linux下免密认证登录失败原因总结

本文介绍了SSH密钥认证失败的常见原因及解决方案,包括调整目录权限、管理多个密钥文件以及通过ssh-agent和ssh-add命令实现免密登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 事件背景
    A机器已经生产rsa密钥且已经将public key添加到B机器/root/.ssh/authorized_keys,但是从A机器上ssh root@B机器时仍然需要输入密码,即无密码认证失败。
  2. 原因总结(B机器上)
    (1).ssh目录的权限必须是700
    linux下免密认证登录失败原因总结
    (2)用户目录的权限必须是700,比如我是用wutengfei用户操作的,则/home/wutengfei(家目录)的权限最好是700
    linux下免密认证登录失败原因总结
    (3) .ssh/authorized_keys文件权限必须是600
    linux下免密认证登录失败原因总结
    (4)setenforce 0把SELinux关闭(很重要)
    linux下免密认证登录失败原因总结
    ##########后续更新的部分############
  3. 导致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
  4. 系统中有多个认证密钥文件
多个认证密钥文件,我们可以使用参数 -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中,就可以免去每次输入的麻烦。

注意⚠️:
eval请详见老男孩shell实战读书笔记(1-5章节)

转载于:https://blog.51cto.com/wutengfei/2045484

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值