由于授权了公钥到服务器上,从而想达到免密码登录服务器。之前有成功配置过一台服务器,所以这次本以为没什么问题。但是后来设置了之后,再次ssh登录的时候还是一直需要输入密码。
很奇怪的事情。百度了很久,谷歌了很久,大部分都是这说权限的问题。权限解决不了问题只能硬着头皮去看调试信息。ssh -t root@服务器IP -p 110 -vvv 。这输出的调试信息中,我才发现一直提示我本地 .ssh/id_dsa.pub 找不到该文件或者说该目录。奇怪了,为什么需要id_dsa.pub这个类型的公钥。
登录服务器上,去ssh目录(cd /etc/ssh/)查看sshd_config 配置信息(cat sshd_config)。HostKey:设置计算机私人密匙的文件,个人觉得也为配置服务器ssh验证方式的地方,验证方式为:
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
#号在前面的是注释掉的,这个表示服务器上开启了另一种验证方式:dsa加密方式的公钥。遇到这种情况,解决方式有两个:
1、注释掉这一段(就是加个#号)这种方式,可能会影响到其他人。
2、在本地生成dsa加密方式的公钥和私钥,然后把公钥传到服务器。
我的解决方案是在本地生成一个dsa加密方式的公钥命令如下:
ssh-keygen -t dsa -C "347921588@qq.com" 默认密码默认,连按3次回车。会显示生成的公钥的图案,由于图片被删除了就不展示了。当然,可以直接用命令行查看 ls ~/.ssh/ 。
公钥存在了,然后把公钥追加到服务器 登录用户的目录下的.ssh/authorized_keys 中,我登录服务器的用户是root,所以目录是: /root/.ssh/ 下的authorized_keys。建议用命令行追加进去。
ssh-copy-id -i .ssh/id_dsa.pub root@服务器的IP 例如 ssh-copy-id -i .ssh/id_rsa.pub root@16.15.14.16 根据提示输入root的登录密码。用该命令行的好处是,不会改变authorized_keys中的原有数据,不会影响其他用户的授权,会追加到后面。添加成功后,再次登录成功。
总结下:遇到授权后,要求再次输入密码的。首先去看下ssh的配置文件,也就是sshd_config ,看一下开启了几个验证方式。只开启了一个验证方式,要看看是不是和自己本地Mac上生成的公钥的加密方式一样。如果都一样,而且之前已经有其他用户的公钥在authorized_keys中的话,那就需要检查下本地的公钥是否正确了。如果开启多个验证方式,那么就如前文所说方式处理就好。如果用户目录下的.ssh/ 和authorized_keys 都是手动创建的,需要注意权限问题。
可能这种情况很少有人遇到,也可能是个例,但发布出来给自己留个记录,同时希望能给其他人一个避免入坑的方法。可能写的也不对。。但是希望帮到更多的人。
阿里云 绑定的密钥登录的好像不行...