SSH 为 Linux 环境下最常用的远程连接协议,它是 SecureShell 的简写。SSH 除了可以用作安全的远程 shell 来对主机进行管理外,其套件中还包括 scp 等文件传输工具,方便本地与远程主机的文件传输。通过配置 ssh 的信任公钥证书,可以实现无密码的登陆,这在经常需要远程登陆服务器,或是一些自动化脚本,不方便写明密码的场景中非常实用。
检查 ssh key
首先,如果是 Linux 环境,可以通过以下命令检查家目录中是否已经存在 ssh key 文件。如果确定是新部署的系统,可以直接进行步骤1,生成新的 ssh key。如果是 Windows 系统,在后面有特别说明。
如果已经存在 *.pub 这样的文件,那就是已经生成了自己的 ssh key,此时可以跳过步骤 1,直接进行下一步。
1. 生成 ssh key
使用以下命令生成 ssh key。
在生成过程中,根据提示应该会要求设置一个密码,并要二次确认。结束后,ssh key 就生成完成了。
复制公钥文件到服务器
复制公钥文件到远程服务器,这里有两个方法,一是先读取本地 ~/.ssh/*.pub 这个文件的内容,然后 ssh 到远程服务器,再使用 vi 等编辑器将这个文件的内容追加写入到远程服务器的 ~/.ssh/authorized_keys 文件中。
这里推荐另一个更简单一些的方法,使用 ssh-copy-id 命令,其中 -i 选项指定的是前面新生成的公钥文件,后面就和平时 ssh 的用法一样:
这样,服务器的信任公钥就配置完成了,再次使用 ssh,scp 连接服务器时就不再需要询问密码了。
Windows 下使用 Putty 的配置
在很多情况下,需要在 windows 环境下远程连接 Linux 服务器做运维,此时对 ssh 的无密码登陆配置和在 Linux 环境下大同小异,这里以最常用的 Putty 为例说明:
如上图,在安装完 Putty 后,打开其中包含的 PuTTYgen 这个程序,点击 Generate 即可生成一个 ssh key。如果已经生成,这里会直接显示已有的 key。有了 key 之后,和上面的步骤 2 一样,将其追加到远程服务器的 ~/.ssh/authorized_keys 文件中即可。