使用PublicKey免密登录Linux服务器

作者:JAY 2019-12-12

原理

SSH不仅可以通过帐号密码登录,还可以通过非对称加密的密钥登录。原理如下:


登录流程是典型的非对称加密应用。私钥一直都在客户端保存,不在网络上传输,不会被中间人窃取。公钥是可以公开的,只需要在服务端把密钥添加进去即可,整个过程不需要用到密码。


实践

Step1:客户端生成密钥对

Linux用户可以用ssh-keygen;Windows用户有puttygen

SSH客户端通常也有生成和管理密钥的功能。比如xShell,在 会话管理-属性-连接-用户身份认证页面,方法切换到 Public Key,可以直接管理用户密钥。密钥管理页面有生成密钥的功能,生产之后也方便管理。

生成之后,请妥善保管好私钥。公钥需要发到服务器,接着做下一步配置。


Step2:服务器配置公钥登录

修改配置/etc/ssh/sshd_config,开启ssh登录。这一步还可以选择是否关闭密码登录,关闭之后这台服务器会将不能用密码登录,只能通过public key登录。(请务必配置完确认public key能登录了,再关掉密码登录!)

grep '^[A,P]' /etc/ssh/sshd_config

PubkeyAuthentication  yes                    #启用PublicKey认证
AuthorizedKeysFile    .ssh/authorized_keys   #PublicKey文件路径
PasswordAuthentication  no                   #不适用密码认证登录


已经配置好PublicKey文件路径,接着我们需要把上一步生成的公钥添加到这个路径下。直接复制到~/.ssh/authorized_keys 文件末尾即可。(如果没有该文件,新建一个)

接着设置权限,将.ssh 目录的权限设为700,authorized_keys 目录的权限为 600。这一步不能省略。设置的方法和权限的含义参考我的另一篇博客《Linux权限学习笔记》。


最后重启服务:

systemctl restart sshd


Step3:客户端使用Public Key登录

做完以上配置之后,直接ssh命令即可登录服务器,不需要再输入密码。

如果使用xShell,在会话管理-属性-连接-用户身份认证页面,方法切换到 Public Key,选择刚才生成的密钥,即可登录,不需要输入密码。


总结

使用PublicKey登录,省去了输入密码的过程。尤其需要多个服务器之间相互访问的时候,更加方便和安全。




本文未经许可禁止转载,如需转载请联系 JAY@oonne.com


TOP