最近因为项目要上线,服务器从测试环境转到了生产环境,登录方式也更换了从原来的密码认证到密钥认证。这样做的目的是防止服务器密码被暴力破解。什么是ssh?ssh是一种可以根据密码或密钥对用户进行身份验证的协议。生成密钥对这里我们使用RSA类型的加密类型来创建密钥对。ssh-keygen-f~/.ssh/your_key_name-f参数表示指定密钥对生成的位置和名称。密钥对一般放在$HOME/.ssh目录下,回车创建密钥对。keypairtoencrypt,然后就可以一路回车了。创建成功后,可以看到.ssh目录下多了两个文件,分别是:your_key:密钥对的私钥,一般放在客户端。your_key.pub:密钥对中的公钥,一般放在服务器上。将本地公钥传输到服务器注意:这里是将your_key.pub公钥文件上传到你需要连接的服务器,而不是your_key私钥文件。ssh-copy-id-i~/.ssh/your_key.pubuser@-pport-i参数表示使用指定的key,-p参数表示指定端口,ssh默认端口为22,如果没有改变默认端口可以省略。这里需要输入密码进行确认。如果成功,你会看到如下内容:上传到服务器的本地公钥文件在哪里?在用户的.ssh/authorized_keys文件中。cat~/.ssh/authorized_keys通过密钥对免密码登录现在我们可以使用如下命令登录服务器:ssh-pport-i~/.ssh/your_keyuser@就可以登录了不用输入密码就成功了。如果您仍然需要输入密码或遇到其他问题,您可以从以下方向进行排查。常见问题:如果不使用默认键名(id_rsa),连接主机时需要添加-i参数指定对应键名。否则,由于默认私钥与远程主机中的自定义公钥不匹配,基于该密钥的认证自然会失败,并提示您重新输入密码。服务器上$HOME/.ssh目录的正常权限是700,服务器上$HOME/.ssh/authorized_keys文件的权限默认是600。上传密钥时使用公钥(.pub),私钥用于密钥认证。上面配置sshconfig的命令虽然可以实现免密码登录,但是命令太长,即使复制粘贴也可能出错。那么有什么好的方法可以解决这个问题呢?当然有。在$HOME/.ssh目录中,创建一个名为config的文件。vim$HOME/.ssh/conifg添加如下配置:HostaliasUseruserHostNameipaddressPortportIdentityFile~/.ssh/your_keyServerAliveInterval360参数说明:Host:可以理解为别名。配置完成后,最后通过ssh别名登录。User:远程主机的用户名HostName:远程主机的地址Port:端口号IdentityFile:私钥文件路径ServerAliveInterval:保持会话之间客户端和服务器在短时间内断开连接。当然,如果你使用的是ssh客户端,就不需要配置这些了。关闭密码认证如果以上配置都正确,并且可以正常通过密钥免密登录,那么最后要做的就是在服务器上关闭密码认证。vim/etc/ssh/sshd_config#把yes改成noPasswordAuthenticationyes,重启sshd服务。servicesshdrestart以上就是如何使用自定义密钥对进行免密码认证的整个过程。