Linux使用证书实现免密登录ssh远程主机

背景

由于本人拥有很多台VPS,经常做调试,有一个很头疼的问题就是每次登陆都要输入登录密码,设置太简单还不当心。设置成复杂密码经常忘记,要到后台管理充值面板。非常非常繁琐。


  • 环境:Centos6 x64 root用户登录
  • 工具: Xshell

步骤一:生成用于SSH的公钥和私钥

方法一:通过shell命令生成

ssh-keygen -t rsa


这里会要求你输入key文件存放目录,一般不需要进行修改,选取默认目录,直接按回车进入下一步



因为我之前生成过一次。所以会提示我是否覆盖,这里选择y,然后回车。会要求你输入一个密码(直接敲回车为空密码)用来加密私钥,作用是当你想用私钥时需要验证一下密码,算是增加了私钥的安全性。设置好密码进入下一步。



可以看到,在/root/.ssh/目录下存放着id_ras(私钥)和id_rsa.pub(公钥)默认加密方式为RSA 2048

接下来执行

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

修改文件权限

chown -R 0700 ~/.ssh
chown -R 0644 ~/.ssh/authorized_keys

接下来,将目录下的id_ras文件下载到本地,同时删除服务器端id_ras文件。至此,通过shell生成公钥和私钥结束


方法二:windows下通过图形化界面工具生成,这里用到Xshell和Puttygen做演示来生成。

  • Xshell

打开Xshell,选择工具-新建用户密钥生成向导



点击后如下图



一切默认直接下一步

成功生成之后继续下一步


这里的设置密码等价于shell命令生成时提示设置的密码,下一步


ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqBLgjI0tV+0SpVY2sgKmjmnZbKZBzyi6G188a8anaSuJD222rqmlNg1P85j9KhJMGWcBSmx4L3BCUbXz2kl7ubwvAGkhm0E4Tdb/tZjM35mbQBIyFHM1r04ZR8skcd1xYSK/YjUzI+5G/uiJxT8YdTq1z0jWDxI2VX6VV4uRZZbdPu6QYZly7b7GW9TPaQSWNr6SSfa0DIO5xCEsle/I+YVhjZfCWEZV2Tja/tCs6IXHiHCdADaqpP87Bz64VZ3Ng6Ig6HqwDenvd5oLyqrxrOCysGjwmKDogUd6jMxrzIm4cdVAZB0mTNJsa1swPWL2++2p3FpmPjMjy7epO48Trw==

  • 这里的公钥格式为Open SSH格式,保存为文件并命名为authorized_keysr. 然后点击完成

点击完成之后会弹出这个对话框



点击这里的导出,选择存放目录,保存。这里导出的文件是私钥。
然后将上面保存的文件authorized_keysr上传到服务器中的/root/.ssh/目录下。注意设置权限。(上面有提到)。



步骤二:配置服务端(sshd.config)

Xshell下输入

vi /etc/ssh/sshd_config

找到这行 去掉前面的#并按如下进行修改

RSAAuthentication yes
StrictModes no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys:这是sshd.config配置文件中默认的公钥文件名,也就解释了上面生成公钥的时候为什么要命名成authorized_keys)

不同的主机商提供的镜像不同。区别在于有的机器不需要进行这步配置,导入公钥之后直接可以登陆,不管怎样,只要正确导入公钥并按照上述要求成功配置sshd.config即可。

然后重启SSH

systemctl restart sshd.service

至此。就已经成功配置了证书登陆ssh远程主机


你可能感兴趣的:(Linux使用证书实现免密登录ssh远程主机)