ssh 信任(免密码登录)实现原理
使用一种被称为”公私钥”认证的方式来进行ssh登录。”公私钥”认证方式简单的解释是:
首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub;私钥文件:~/.ssh/id_rsa),然后把公钥放到服务器上(~/.ssh/authorized_keys),自己保留好私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
实现:两台(A主信任机,B 被信任机)服务器之间ssh访问时,做信任的方式,免密码登录
–在A上实现免密码登录B(192.168.0.202)
ssh test@192.168.0.202 不需要密码
1、两台服务器均生成相应的公私钥
进入服务器之后,
ls -l ~/.ssh/id_rsa.pub —-检查该用户下是够有.ssh文件夹
A> 如果没有
ssh-keygen -t rsa
——此命令为生成本用户的秘钥信息,执行中遇到提示直接回车键即可
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys ——将本地的公钥加入到~/.ssh/authorized_keys 中
B> 如果有
ls -l ~/.ssh/authorized_keys 如果不存在执行上述的 将本地公钥加入authorized_keys的命令
2.将信任机A的公钥id_rsa.pub内容拷贝到被信任机B的authorized_keys中
信任机A上
cat ~/.ssh/id_rsa.pub
然后将内容拷贝到被信任机B 的~/.ssh/authorized_keys中
可以在被信任机B上执行
echo “A的公钥内容” >>~/.ssh/authorized_keys
或者此步骤简化为一条命令
在信任机A上执行
cat ~/.ssh/id_dsa.pub | ssh user@remote.machine.com 'cat >> .ssh/authorized_keys'
此步骤需要输入密码
3.验证信任是否成功
到信任机上,输入ssh test@192.168.0.202 看是否能直接登录进去
如果失败,一般是被信任机上用户权限造成,可到192.168.0.202上查看日志 /var/log/auth.log
主要检查两方面 authorized_keys以及用户的权限
authorized_keys权限不能有x 最好600
chmod 600 ~/.ssh/authorized_keys
同时检查~/.ssh的权限,最好也是600
用户目录权限不能组和其他用户不能有w权限,750或755
chmod 750 /home/test/
附-说明:
1.以上信任的方式可以简化成较简单的命令
信任机A上,先执行ssh-keygen -t rsa 生成公钥,然后执行
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 22 test@192.168.0.202"
其中p为端口,默认22,”“里面的为用户和被信任机的IP,此命令简化了在被信任机B上生成authorized_keys的命令,如果B中存在authorized_keys,则会在后面新增一条记录,如果B中没有authorized_keys,则会新增文件,同时增加记录
2.简化登录输入
如果在登录服务器时,觉着输入ssh test@192.168.0.202)较繁琐,可以简化登录ssh 202
在A信任机A上新增文件config
touch ~/.ssh/config,添加以下内容即可
Host 202
User souchelogs
HostName 192.168.0.202
使用ssh 202测试是否成功
3.ssh 信任授权失败–FAQ
在将id_rsa.pub到被信任机~/.ssh/authorized_keys后,测试信任还是未建立成功,提示需要输入密码,此时,到被信任机中查看/var/log/auth.log,登录日志,如果出现Authentication refused: bad ownership or modes for file /home/souche/.ssh/authorized_keys 表示~/.ssh/authorized_keys文件的权限有问题,此处可以
chmod 600 ~/.ssh/authorized_keys
这是为了保证此权限只能被本用户处理,安全考虑
也可能是上级,目录如.ssh 或者用户目录权限造成
如用户目录设置777,也会造成信任授权失败
截取两种错误截图
authorized_keys 权限问题截图
用户目录错误截图
PS:可以在登录被信任机的时候,生成authorized_keys前,提前加上umask,这样可以避免因为authorized_keys权限造成登录失效
cd .ssh
umask 077
cat id_rsa.pub > authorized_keys