网站建了这么久,对于Linux的操作还处于入门阶段,只因我不习惯命令行的方式以及不愿记各种命令和参数。
然而这也不影响我日常维护服务器,只不过是操作步骤复杂了点,以下是我的常规做法:
打开PuTTy,然后点击要连接的服务器,输入用户名,再打开密码记录软件复制出密码后黏贴登录(密码太简单怕不安全,太复杂自己又记不住)。
打开FileZilla,点击要连接的服务器,选中要上传的文件右键上传。What? 要上传到系统目录下?那就先上传到FTP目录在进终端用MV命令移动呗。是不是很机智?
当然,终端用的毕竟还是少,所以从来也没嫌弃过这种繁琐操作。直到最近在哔哩哔哩上听Python的课时才知道还有免密码登录这种事,而SCP竟然还能直接在客户端的终端中进行文件传输(看完视频一度有股冲动换台苹果笔记本玩玩,不过理智告诉我,人穷就别做白日梦了)。
从教程上来看,SSH的方式用苹果系统和Linux系统是最好的选择,既然买不起苹果电脑,Linux还是可以考虑的,通过虚拟机就可以了。

一、配置SSH自动连接服务器

1.使用ssh-keygen工具生成配对的公钥私钥。

打开终端,使用下面的ssh-keygen来生成RSA密钥和公钥.-t表示type,就是说要生成RSA加密的钥匙。

ssh-keygen -t rsa

RSA也是默认的加密类型.所以你也可以只输入ssh-keygen。默认的RSA长度是2048位.如果你非常注重安全,那么可以指定4096位的长度.

ssh-keygen -b 4096 -t rsa

生成SSH Key的过程中会要求你指定一个文件来保存密钥,按Enter键使用默认的文件就行了。然后需要输入一个密码来加密你的SSH Key.密码至少要20位长度.SSH密钥会保存在home目录下的.ssh/id_rsa文件中。SSH公钥保存在.ssh/id_rsa.pub文件中。

elan@ubuntu:~$ ssh-keygen -b 4096 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/elan/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/elan/.ssh/id_rsa.
Your public key has been saved in /home/elan/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Zt1l/Q1Z4Ycyj6HDwVdO6GNOkWfAMx6iI6yRXehUBHE elan@ubuntu
The key's randomart image is:
+---[RSA 4096]----+
|      o*E  ..+o.o|
|      o.... O++= |
|     * . .o+=BB.o|
|    o = oo =*O .+|
|     o .S.=+o.. o|
|    .  o   ..    |
|                 |
|                 |
|                 |
+----[SHA256]-----+

如果在上述过程中输入了密码,那么在SSH链接中就会要求你输入密钥的密码,如下:
ssh-keygen-password.png

2、将SSH公钥上传到Linux服务器

可以使用ssh-copy-id命令来完成。

ssh-copy-id username@remote-server-ip

输入远程用户的密码后,SSH公钥就会自动上传到远程Linux服务器上了,并被保存在服务器的.ssh/authorized_keys文件中。
上传完成后,SSH登录就不需要再次输入密码了。但是首次使用SSH Key登录时需要输入一次SSH密钥的加密密码。(如上图,如果勾选"每当我登录时都自动解密该密钥"选项时将来会自动登录,不再需要输入密钥的密码。)
使用scp命令来传送文件时也不需要输入密码。

3、为远程服务器设置别名

经过上一步之后,命令操作已经变得简单多了。只不过每次还是要输入一长串的IP地址,多少还是有些不方便,这个时候就需要用到别名的方式登录。
首先,我们在本地的密钥文件夹下创建一个名为config的文件(没有任何扩展名),用编辑器打开后输入:

Host mindseed #给你想连接的远程服务器起个别名,方便自己后面使用
User elan #远程服务器中你的用户名
Hostname xxx.xxx.xxx.xxx #远程服务器ip

保存后,在终端中输入ssh mindseed,连接成功。

4、同一台客户机连接不同服务器

连接完我的远程服务器,效果还真不错。那本地虚拟机上的SSH怎么办呢?
首先我们重复第二步,将密钥文件上传到虚拟机中。然后再一次打开刚刚编辑的config文件,添加另外的内容:

Host visual #给你想连接的虚拟机服务器起个别名
User elan #虚拟机服务器中你的用户名
Hostname xxx.xxx.xxx.xxx #虚拟机服务器ip

保存后,再终端中ssh visual,连接成功。

5、使用Win10的PowerShell与另一台客户机同时连接服务器

Win10下如何安装OpenSSH不在本文范围(因为我也不知道自己怎么给装上的,或者原本就自带的)。在这里只介绍不同的客户机如何免密登录同一台服务器。
首先,在Win10的机器上用ssh-keygen生成公钥和私钥,方式同Linux一样。
第二步,将公钥文件通过scp的方式上传到远程服务器上。

scp C:\Users\你的用户名\.ssh\id_rsa.pub username@xxx.xxx.xxx.xxx:/home

第三步,登录远程服务器,然后在终端中输入:

cat /home/id_rsa.pub >> /root/.ssh/authorized_keys

第四步,在Win10的用户目录下找到.ssh文件夹,同样创建一个名为config的文件,内容同Linux的一样

Host mindseed #给你想连接的远程服务器起个别名
User elan #远程服务器中你的用户名
Hostname xxx.xxx.xxx.xxx #远程服务器ip

最后,使用PowerShell运行ssh mindseed,连接成功。
ssh-same-server.png
上图中的两个pts就代表了两台不同主机登录的情况(因为Linux采用的是虚拟机方式与Win10主机用的是同一个IP地址)。
生产力大大提高有没有?

附录:ssh 配置文件的详细解释

  • HostName – 定义真正要登录的主机名,此外,你也可以使用数字 IP 地址,不管是在命令行或是 HostName
    定义中都允许使用其中任一种。
  • User – 指定以哪一个用户来登录。
  • Port – 设置连接远程主机的端口,默认是 22 端口。但必须是远程主机的 sshd 配置文件中定义的端口号。
  • Protocol – 这个选项定义了优先使用 ssh 支持的协议版本。常用的值为 ‘1’ 和 ‘2’,同时使用两个协议版本则必须使用英文逗号隔开。
  • IdentityFile – 指定一个用于读取用户 DSA、Ed25519、ECDSA 等授权验证信息的文件。
  • ForwardX11 – 定义 X11 连接是否自动重定向到安全通道和 DISPLAY 设置。有两个可以设置的值,即 yes 或 no。
  • Compression – 默认值为 no,如果设置为 yes,则在连接远程主机过程中使用压缩进行传输。
  • ServerAliveInterval – 设置当没有收到服务器响应 (或者数据))时的超时时间,单位为秒,ssh 会通过加密信道发送信息,请求服务器响应。默认值为 0,这意味着 ssh 不会向服务器发送响应请求;如果定义了 BatchMode 选项,则默认是 300 秒。
  • ServerAliveCountMax – 设置服务器在没有接收到服务器的任何响应时,由服务器发送的活动信息数量。
  • LogLevel – 定义 ssh 登录信息的的日志冗余级别。允许的值为:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2 和 DEBUG3,默认为 INFO。

参考文档

https://www.ssh.com/ssh/keygen/#sec-What-Is-ssh-keygen

最后修改:2021 年 02 月 10 日
如果觉得我的文章对你有用,请随意赞赏