最近由于项目快要上线了,服务器从测试环境转到了生产环境,登陆方式也从原来的密码认证替换成了密钥认证。vim
这么作的目的是为了防止服务器密码被暴力破解。服务器
ssh 是什么?
ssh 是一种协议,它能够基于密码进行认证,也能够基于密钥去认证用户。ssh
这里咱们使用 RSA
类型的加密类型来建立密钥对。测试
ssh-keygen -f ~/.ssh/your_key_name
-f
参数表示指定密钥对生成位置与名称$HOME/.ssh
目录下建立成功以后,能够看到 .ssh
目录下多了两个文件,分别是:加密
your_key
:密钥对的私钥,一般放在客户端。your_key.pub
:密钥对中的公钥,一般放在服务端。注意:这里是将your_key.pub
公钥文件上传至你须要链接的服务器,而不是your_key
私钥文件。spa
ssh-copy-id -i ~/.ssh/your_key.pub user@<ip address> -pport
-i
参数表示使用指定的密钥,-p
参数表示指定端口,ssh 的默认端口是 22,若是没有更改默认端口,则能够省略。rest
这里须要输入一次密码进行确认,若是成功以后,会看到如下内容:code
本地的公钥文件上传在服务器的哪里?
在该用户的.ssh/authorized_keys
文件中。blog
cat ~/.ssh/authorized_keys
如今咱们可使用如下命令登陆到服务器中了:ip
ssh -p port -i ~/.ssh/your_key user@<ip address>
不出意外,就能够不用输入密码而直接成功登陆了。
若是你仍然须要输入密码或者遇到其余问题了,能够从如下方向进行排查。
-i
参数,指定对应密钥的名称。不然因为默认私钥与远程主机中的自定义公钥不匹配,天然没法基于密钥进行认证,会再次提示你输入密码。$HOME/.ssh
目录的正常权限是700,服务端$HOME/.ssh/authorized_keys
文件的权限默认为600。上面的命令虽然能够实现免密登陆,可是命令太长了,就算是复制粘贴也有可能会出错。
那有没有什么好的办法,解决这个问题呢?
固然是有的啦。
在$HOME/.ssh
目录下,建立一个名为config
的文件。
vim $HOME/.ssh/conifg
加入如下配置:
Host alias User user HostName ip address Port port IdentityFile ~/.ssh/your_key ServerAliveInterval 360
参数说明:
ssh alias
进行登陆。固然,若是你是使用ssh 客户端
,那就不用配置这些。
若是上面的配置都无误,能够正常经过密钥进行免密登陆,那么最后须要作的一件事情就是关闭服务端的经过密码进行身份认证。
vim /etc/ssh/sshd_config # 将yes 改成 no PasswordAuthentication yes
而后重启 sshd 服务。
service sshd restart
以上就是有关如何用自定义的密钥对进行免密认证的所有过程了。