长久以来,作者都是使用xshell+xftp远程连接服务器。要说吧,其实也没什么不好,这俩软件友好亲民,界面清楚,xftp甚至是可视化的。但在今天,购买了新的服务器并准备在vultr的服务器到期后将网站迁移过去之后,发现新服务器提供商似乎没有提供(或者说,没有明显提供)用密钥登录服务器的方法。这可不太好——我的意思是,谁不喜欢用密钥一键连接服务器呢?加之之前一直听闻可以使用powershell直接连接服务器,本着试一试的心态,就有了这篇文章。

总的来说,本文将介绍如何配置windows terminal(全称打起来很麻烦,下文中没特别说明的话就用wt代替了)以使用其远程连接服务器、如何使用ssh密钥登录服务器和如何“一键”连接服务器。当然,由于本文介绍wt,所以就假定读者是windows 10系统了,我想这应该没什么问题。

一. 如何利用Windows terminal连接服务器

首先,wt只是一个terminal而已,类似于vscode一类的东西,它需要你电脑上就有命令提示符、powershell一类的命令行工具或shell——当然,在我所知的范围内,是台windows电脑就至少有个命令提示符吧,更别提win10上应该都预装了powershell。所以理论上,作为第一步,读者只需要从windows的应用商店安装windows terminal就行了。而关于wt的个性化设置,网络上有许多文章介绍,这里就不再赘述了(事实上wt的个性化设置也是我现在选择使用它连接服务器的主要原因)。

好,现在读者已经成功下载安装wt了(什么?你说应用商店使用起来太[哔——]了?那就不在本文的讨论范围中了)。接下来需要确认读者的电脑上安装有ssh。请读者打开“设置”——选择“应用”——点击“可选功能”,在搜索框中输入“ssh”,如果显示安装有“openSSH客户端”,像下图一样,那就没事了;如果没有呢?请点击“添加功能”,然后搜索“ssh”安装即可。

那么,现在就到了激动人心的环节了:请打开wt,在命令行中输入:

ssh user_name@server_address

其中user_name是云服务器提供商给你的或你自己设定的(一般是云服务器提供商给你的)用户名,是服务器用户的用户名(注1:类似于windows的账户)(注2:不是服务器的名字(host_name)一类的东西),通常是rootserver_address就是你的服务器ip地址。接下来,wt会提示你输入密码:

password:

和用户名的情况一样,这个密码通常也是云服务器提供商给你的,但也不排除是自己设置的可能,总之把这个密码输进去就好。要注意的是,输入的密码不会显示在屏幕中:不要像上篇笔记一样,以为什么玩意儿坏了(笑)。输入完密码后,按回车,同时心中默念:“万机之神,神圣的22端口,请让我成功连接!”,就能成功连接上服务器了。

二.如何使用ssh密钥连接服务器

要使用ssh密钥连接服务器,首要的是确认读者的服务器上安装有ssh(不过一般来说,如果上一步都成功了的话,服务器上应该会有ssh吧,算了不管了)。在这里,不同的linux系统有不同的命令,笔者使用的是centOS 7系统,因此连接上服务器后,输入:

rpm -qa | grep ssh

(ssh可能也是通过yum安装的,如果rpm没有的话试一试输入

yum listed --installed | grep ssh

(可能需要sudo)),如果显示有图中划出的两个软件,那么就万事大吉:

即:

openssh-clients-balabalabala
openssh-server-balabalabala

然后,读者如果没有ssh密钥的话,请在本地计算机中使用ssh-keygen命令按提示(没有特殊要求的话一路回车就好了)生成一个公钥私钥对。这样一个公钥私钥对通常保存在本地计算机C:\User\user_name\.ssh中,如:

其中id_rsa是读者的私钥(当然读者可能会有其他命名,总之就是不带.pub的那个),请务必务必务必保存好;id_rsa.pub(同前,就是带.pub的那个)就是对应的公钥,也请务必务必务必保存好,不要像某位作者一样差点把密钥丢了。

有了ssh密钥后,我们需要把公钥上传到服务器中。对于linux用户,一个简便的方式是在本地计算机输入下列指令:

ssh-copy-id -i \your\ssh\address user_name@sever_address

但是,很可惜的是,在这里并不适用:win 10并没有上述指令可供调用。因此,我们需要手动将公钥上传到服务器上。当然,塞翁失马,焉知非福:这也给了我们一个使用sftp,即win 10安装的openssh的一个类似于xftp的功能,的机会。在本地计算机上输入:

sftp user_name@server_address

并输入密码后,成功登录服务器,使用cd ~命令来到当前用户的文件夹,然后使用put命令将公钥上传上去(读者可是事先使用ls -a命令确认.ssh文件夹的存在——不存在就使用mkdir命令创建一个就好了):

put C:\User\user_name\.ssh\id_rsa.pub .ssh

如果读者修改id_rsa.pub文件的位置,就在上述命令对应位置修改。然后,使用mv命令将id_rsa.pub的名称修改为authorized_keys

mv .ssh\id_rsa.pub .ssh\authorized_keys

如果有必要的话,重启ssh服务:

systemctl restart sshd.service

(这是centOS中的代码,请读者自行更换为读者服务器操作系统的代码)退出登录后再尝试登录服务器时,应当能直接使用ssh密钥而不用输入密码就能登录了。

三.如何“一键”连接服务器

现在,理论上读者已经能用密钥登录服务器了。但是,每次使用wt连接服务器都要输入ssh root@balabala,很烦,需要简化一下。这可以通过修改wt的配置文件实现。快捷键ctrl+,打开设置,点击左下角的“打开json文件”:

然后找到"profile"代码块内的"list":开始的代码块:

这里是各命令提示符和shell的配置文件的代码块,如图中就是powershell和cmd的配置文件。读者需要在这个代码块中至少输入以下代码(不要忘记补逗号!):

{ 
"commandline": "ssh -i C:/Users/gravertino/.ssh/id_rsa user_name@server_address",
 "guid": "{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}",
"hidden": false,
"name": "whateveryoulike"
}

其中,"name"所指示的值是这个配置文件的名称,可以随便起一个你喜欢的;"hidden"是指是否隐藏这个配置文件,当然是false"guid"是这个配置文件的标识符,可以在wt中用new guid生成一个;"commandline"是这团代码中的重头戏,它告诉wt当使用这个配置文件时应执行什么指令,因此读者需要像上面的例子一样输入并将私钥的地址替换为自己的私钥的地址,这个代码的格式是:

ssh -i your/private/key/address user_name@server_address

当然,还有其他的一些配置可以写,例如backgroundImage,可以仿照已有的配置文件填写。

如果你说,啊呀写代码好烦不想写怎么办?也有简单的方法:在wt的设置里,拉到最下面,点击“添加新配置文件”,选择“新建空白配置文件”,然后填空即可。

“名称”一栏对应"name",命令行一栏输入启动时要执行的代码——就是ssh -i balabala这一堆,点击保存就好了。

如果一切顺利的话,读者此时在下拉菜单中就能看到新建的配置文件(在图中就是那个“greencloud”):

用读者的鼠标左键单击它,稍等片刻,读者就应当能看到自动连接上了服务器,可以开始愉快的搬砖了(乐)。

那么,这就是这篇技术笔记。