SSH 免密登录
介绍
我们经常需要使用ssh命令来连接远程服务器等,每次都需要输入密码,比较麻烦,可以通过配置SSH实现免密登录。
使用
在远程主机的操作,主要是添加公钥。 在本地主要是修改SSH配置文件。
主要流程如下:
- 在本地生成公钥和私钥
- 将公钥添加到远程主机
- 修改本地
SSH配置文件,实现免密登录 - 测试免密登录
生成RSA秘钥
可以参考windows生成RAS密钥,和Linux中的差不多。
添加公钥到远程主机
- 添加公钥到云服务器
将生成的公钥内容添加到服务器的 ~/.ssh/authorized_keys 文件中。
注意 需要注意 authorized_keys 文件的权限,必须是 600。可以通过chmod命令修改权限。
- 添加公钥到
Github
登录Github后,进入Settings->SSH and GPG keys->New SSH key粘贴上公钥,然后取个便于区别密钥来源的名称就行了。
修改本地SSH配置文件
将公钥添加到 authorized_keys 文件等远程中,私钥在本地,可以通过ssh root@10.1.1.1的方式访问远程,省去了输入密码的步骤,但用户名和 IP 地址也不短,或处于安全的原因,不想让其他人看到。可以通过配置 ~/.ssh/config 实现省略用户名和 IP 地址。默认情况下 ~/.ssh 目录下是没有 config 文件的。
我们可以通过命令创建:
$ vim ~/.ssh/configSSH 客户端配置文件位于 ~/.ssh/config,添加内容如下:
Host example
HostName example.com
User root
Port 22
IdentityFile ~/.ssh/id_rsaHost 代表云服务器昵称 HostName 为云服务器的公网 IP 地址,如果配置了域名也可以使用域名,如上就是使用的域名。 Port 代表连接时使用的端口号 User 代表连接时选用的用户名 IdentityFile 代表本地私钥文件的路径。
这样我们就可以用云服务器昵称登录云服务器啦,在终端输入:
$ ssh example连接测试
可以使用如下命令测试Github的连通性
$ ssh -T git@github.com
Hi matiastang! You've successfully authenticated, but GitHub does not provide shell access.如上面一步配置好后可以使用如下命令连接:
$ ssh example如果是第一次登录到这台云服务器,终端会有确认提示:
The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established.
ECDSA key fingerprint is SHA256:nGvmS+JKzQf1gG+Nzc0QN/qS6xSp1iV0rJFP1dILel4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes这时候我们输入 yes 并回车即可。下次再链接就不会提示了,这个是为了防止中间人攻击。
sshd免密登录失败
有些服务器中的 sshd 服务配置并未开启公钥登录选项,如果ssh root@10.1.1.1命令回车后终端显示的不是云服务器相关信息,而是输入密码的话,就需要我们到云服务器上开启 sshd 服务的公钥登录配置。
在云服务器上执行:
$ vim /etc/ssh/sshd_config进入到 sshd 配置文件后。找到 PubkeyAuthentication 项,删除该项的注释符 # 并确保该项对应的开关为 yes。
错误的配置和正确的配置如下:
#PubkeyAuthentication no # -> 错误的配置PubkeyAuthentication yes # -> 正确的配置操作完之后重新启动 sshd 服务,再次尝试就可以免密登录了。 重启命令为:
$ service sshd restart。