- 事件背景 A机器已经生产rsa密钥且已经将public key添加到B机器/root/.ssh/authorized_keys,但是从A机器上ssh root@B机器时仍然需要输入密码,即无密码认证失败。
- 原因总结(B机器上) (1).ssh目录的权限必须是700
(2)用户目录的权限必须是700,比如我是用wutengfei用户操作的,则/home/wutengfei(家目录)的权限最好是700
(3) .ssh/authorized_keys文件权限必须是600
(4)setenforce 0把SELinux关闭(很重要)
##########后续更新的部分############
- 导致ssh密钥认证失败新状况和处理方式
#背景
今天公司同事有个需求,我参照需求对他账户下的家目录权限
进行了更改,如账号家目录是/data/shiyan,最初的权限是500,
后更改为770。
进行ssh密钥登录时,系统提示需要输入密码(公司是做过免密认证的)
或系统提示“Permission denied (publickey).”。
#报错信息
##在ssh目标机上查看登陆系统信息
cat /var/log/secure
##信息如下:
Authentication refused: bad ownership or modes for directory /data/shiyan
#原因
sshd为了安全,对属主的目录和文件权限有所要求。如果权限
不对,则ssh的免密码登陆不生效。
用户目录权限为 755 或者 700,就是不能是77x。
#解决方法
##更改目录权限
chmod 755 /data/shiyan
- 系统中有多个认证密钥文件
多个认证密钥文件,我们可以使用参数 -i 来指定需要传输至目标机的公钥文件,如:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub siterecoffline@192.168.246.171
192.168.246.170系统中两个认证密钥文件,路径如下:
/home/jianzhihua/.ssh/id_rsa.pub
/data/jianzhihua/.ssh/id_rsa.pub
在192.168.246.170执行:
$ ssh-copy-id -i /data/jianzhihua/.ssh/id_rsa.pub siterecoffline@192.168.246.171
从192.168.246.170登录到192.168.246.171,终端执行:
$ ssh siterecoffline@192.168.246.171
Enter passphrase for key '/home/jianzhihua/.ssh/id_rsa.pub': ##系统提示输入私钥,可不论输与不输都不能直接登录
处理方法:
在192.168.246.170终端执行:
$ eval $(ssh-agent)
$ ssh-add
Identity added: /data/jianzhihua/.ssh/id_rsa (/data/jianzhihua/.ssh/id_rsa)
因为:
$ grep jianzhihua /etc/passwd
jianzhihua:x:1039:1039::/data/jianzhihua:/bin/bash
当然你也可以使用/home/jianzhihua/.ssh/id_rsa.pub,在192.168.246.170终端操作如下:
$ ssh-add -k /home/jianzhihua/.ssh/id_rsa
Identity added: /home/jianzhihua/.ssh/id_rsa (/home/jianzhihua/.ssh/id_rsa)
登录时:
$ ssh -i /home/jianzhihua/.ssh/id_rsa siterecoffline@192.168.246.171
参数说明
-k Load only keys and not certificates.
-i identity_file
说明:
ssh-agent是用于管理密钥,ssh-add用于将密钥加入到ssh-agent中,
SSH可以和ssh-agent通信获取密钥,这样就不需要用户手工输入密码了。
顺序执行以上两条命令后就可以用ssh免密登录远程机器了,但这个配置
只对当前会话生效,会话关闭或机器重启后都需要重新执行这两条命令。
将命令放到~/.bash_profile中,就可以免去每次输入的麻烦。