背景
由于本人拥有很多台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远程主机