以前一直使用xshell、putty等客户端在Windows上远程连接Linux服务器,现在统统可以卸载了,因为现在使用Windows Terminal即可流畅实现这些功能。
1.安装Windows Terminal
单击左下角“开始”,选择“Microsoft Store”,搜索“Windows Terminal”,进行安装。
2.安装OpenSSH客户端
在“设置”→“应用”中点击“可选功能”,查看电脑上是否已安装“OpenSSH客户端”,如果下图界面中没有“OpenSSH客户端”,点击“添加功能”选项进行添加。
安装OpenSSH客户端
3.设置ssh登录配置文件
打开Windows Terminal,可以发现其跟cmd命令窗口、shell都很像,其实在这里就可以把它当成上述二者使用。在这里直接执行ssh命令:
1 | ssh -p 22 [email protected] |
即可实现远程访问服务器。其中 -p 22 是指定22号端口,user 是指登录用户名,@后面的是服务器 ip 。
但是这种访问方式需要每次都输入服务器ip和用户名、用户密码等信息,使用体验非常不友好。如何一劳永逸不用输入这些信息就能直接连接远程服务器呢?
首先,单击Windows Terminal窗口上方的下三角,在下拉菜单中选择设置,就会打开Windows Terminal的配置文件。
打开配置文件
打开后的json配置文件中的核心代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | "profiles": { "defaults": { // Put settings here that you want to apply to all profiles. }, "list": [ { // Make changes here to the powershell.exe profile. "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "name": "Windows PowerShell", "commandline": "powershell.exe", "hidden": false }, { // Make changes here to the cmd.exe profile. "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "name": "命令提示符", "commandline": "cmd.exe", "hidden": false }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" } ] }, |
上面的json文件中"list"项有3条用花括号括起来的内容,分别是"Windows PowerShell",“cmd”,“Azure Cloud Shell”的配置内容。这3项正是Windows Terminal窗口的下三角下拉菜单中的选项。
下拉菜单
可以看出,我的截图中还有一个“Ubuntu”的企鹅选项,不难猜测,想要在下拉菜单中增加新的选项,只需要并列地添加新选项的配置文档就可以了。下面给出我的配置文件中添加的内容,并做相应的解释。
【注意】:下面的代码块为在配置文件中添加的内容,添加的位置为上面代码块中的中括号内,和其它3个花括号形成并列关系,并注意添加逗号分隔符!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "acrylicOpacity" : 0.5, "closeOnExit" : true, "commandline" : "ssh -p 22 [email protected]", "cursorColor" : "#FFFFFF", "cursorShape" : "bar", "fontFace" : "Consolas", "fontSize" : 14, "guid" : "{20c1b201-1272-4bb0-b008-6eb5fed2cb2f}", "historySize" : 9001, "name" : "Ubuntu", "icon": "C:\\Users\\pxt\\Pictures\\linux.jpg", "padding" : "0, 0, 0, 0", "snapOnInput" : true, "startingDirectory" : "", "useAcrylic" : false } |
其中重点介绍几个选项:
"commandline" : "ssh -p 22 [email protected]"
单击该选项时执行的命令。即把该选项添加到下拉菜单后,点击该选项就相当于执行命令"ssh -p 22 [email protected]"。
"guid" : "{20c1b201-1272-4bb0-b008-6eb5fed2cb2f}"
相当于该profile的id,可自己执行命令:
1 | new-guid |
获得新的guid序列号。如果想要将某个选项设置为打开窗口时默认的profile,就在配置文件中的"defaults"项内将"guid"的值设置为相应选项的guid值即可。
"name" : "Ubuntu"
新添加选项的名字,会显示在下拉选项中,比如我的是“Ubuntu”。
"icon": "C:\Users\pxt\Pictures\linux.jpg"
下拉选项中的图标,比如我的是个小企鹅,这个图像就存放在本地"C:\Users\pxt\Pictures\linux.jpg"路径下。
其它都是一些字体、颜色等属性的设置,无关紧要,这里不做解释。
保存配置文件后重新启动Windows Terminal窗口,在下三角下拉菜单中即可看到出现的“Ubuntu”选项。点击该选项,就会自动新建终端并已执行完ssh命令,你只需要输入密码就可以连接远程服务器了。
4.ssh秘钥登录
每次登录时都要输入密码也很麻烦,可以连输入密码操作也自动执行吗?答案是肯定的。从上面的分析中可以看出,当我们点击下拉菜单中的某个选项时,新建的窗口是怎么执行命令的,主要靠配置文件中该选项的"commandline"。使用ssh命令的-i选项,即可无需输入密码,使用指定的ssh秘钥登录。
将Ubuntu选项配置文件中的"commandline"修改为:
1 | "commandline" : "ssh -i D:\\id_rsa [email protected]" |
【注意】:将路径、用户名及ip修改为自己的对应内容!!!
其中的“D:\id_rsa”为服务器的ssh秘钥。获得秘钥的方法如下:
(1)在服务器端生成秘钥
在服务器端的shell中执行命令:
1 | ssh-keygen |
一直按Enter键,将在“~/.ssh/”路径下生成公钥和私钥:
1 2 | a415@a415:~/.ssh$ ls id_rsa id_rsa.pub known_hosts |
该路径下的文件“id_rsa”是私钥,“id_rsa.pub”是公钥。保证公钥在服务器端,私钥在本地端,就可以在本地端使用私钥进行免密登录远程服务器。
在服务器端键入以下命令,在服务器上安装公钥:
1 2 | cd .ssh cat id_rsa.pub >> authorized_keys |
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
1 2 | chmod 600 authorized_keys chmod 700 ~/.ssh |
(2)将私钥拷贝至本地Windows系统磁盘下
在本地端Windows Powershell下执行命令:
1 | scp [email protected]:/home/a415/.ssh/id_rsa D:\\ |
将服务器端的私钥拷贝到本地D盘下。
【注意】:将用户名、服务器ip以及路径修改为自己的相应内容!!!
(3)对秘钥文件的权限进行修改
将id_rsa文件直接拷贝到本地,修改Windows Terminal的配置文件中的"commandline"后,会报错,出现权限问题。因此按以下步骤对该文件的权限进行修改。
1.选中拷贝至D盘下的id_rsa文件,右键→属性→安全→高级
image.png
2.点击左下角“禁用继承”,并在弹出的窗口中选择下面的“从此对象中删除所有已继承的权限”。
image.png
3.点击左下角的“添加”
image.png
4.在弹出的窗口中选择左上角的“选择主体”,并在弹出的小窗口的“输入要选择的对象名称”一栏输入windows系统的用户名。比如我的用户名是pxt。如果不知道用户名的话可以再“C:\用户\”路径下查看用户名。
image.png
5.输入用户名后,点击右侧的“检查名称”按钮,系统会自动校正与输入的用户名关联的具体对象名称:
image.png
分别点击各窗口的“确定”按钮关闭窗口即可。
(4)修该配置文件
此时打开Windows Terminal的配置文件,在添加的"Ubuntu" profile中,修改"commandline"一行的信息为:
1 | "commandline" : "ssh -i D:\\id_rsa [email protected]" |
保存配置文件后关闭。重启Windows Terminal后在下拉菜单中选择Ubuntu选项,即可自动连接服务器端,无需任何操作。