解决SSH连接跳过公钥验证问题

文章讲述了如何确认和解决SSH公钥认证不工作的问题,包括检查~/.ssh/config文件的正确配置,确保密钥文件的权限设置,以及使用ssh-vvv进行调试以定位问题。同时强调了正确配置Host别名和authorized_keys文件权限的重要性。
摘要由CSDN通过智能技术生成

首先需要确认自己是使用默认的id_rsa私钥,还是通过~/.ssh/config文件的IdentityFile参数来使用指定的rsa私钥进行公钥认证的。如果是通过默认的rsa密钥进行公钥认证,则可以跳过第一步,否则请看完。

1. 查看SSH客户端的~/.ssh/config文件,确认常用参数是否以如下格式编辑:

Host <Alias1> <Alias2> ...
   	 HostName <IP_Address_or_HostName>
     User <UserName>
   	 Port <Port>
     IdentityFile <~/.ssh/private_key>

注意:在SSH公钥验证过程中,使用的是~/.ssh/config文件中定义的Host参数(Alias),而不是HostName参数(IP_Address_or_HostName)。因此如果用配置文件中不存在的Alias进行SSH连接,就会导致SSH服务器无法进行公钥验证,从而要求你输入用户登录密码进行验证。

2. 检查密钥文件权限

  • SSH服务器
    使用ll -a ~/.ssh命令查看目录及文件权限状态,确保~/.ssh目录权限必须是700(rwx------), ~/.ssh/authorized_keys文件权限必须是600(rw-------)。

    chmod 700 ~/.ssh				 #或chmod u=rwx,g=,o=
    chmod 600 ~/.ssh/authorized_keys #或chmod u=rw,g=,o=
    

    提示:如果你是使用ssh-copy-id命令在SSH服务器上添加的公钥,则可以省略此步骤,因为因为ssh-copy-id命令会自动设置正确的文件权限。

  • SSH客户端
    使用ll -a ~/.ssh命令查看目录及文件权限状态,确保/.ssh目录权限必须是700(rwx------), ~/.ssh/config文件权限必须是600(rw-------)。(https://man.openbsd.org/ssh_config#FILES)

    chmod 700 ~/.ssh 		#或chmod u=rwx,g=,o=
    chmod 600 ~/.ssh/config #或chmod u=rw,g=,o=
    

    提示:/etc/ssh/sshd_configSSH服务器配置文件文件保持初始时的默认配置即可,因为默认配置已经考虑了安全性(公钥认证默认注释状态,即开启状态)和稳定方面的问题,无需过多修改。

3. SSH连接时使用-vvv选项来增加SSH客户端的详细调试输出

  • 未指定私钥的:ssh -vvv UserName@IP_Address_or_HostName
  • 指定了私钥的:ssh -vvv UserName@Alias
  1. 若出现类似以下的调试信息,则表明指定的私钥未生效,只使用了默认私钥进行认证,建议检查客户端~/.ssh/config配置文件:

    debug1: Will attempt key: /c/Users/xxx/.ssh/id_ecdsa
    debug1: Will attempt key: /c/Users/xxx/.ssh/id_ecdsa_sk
    debug1: Will attempt key: /c/Users/xxx/.ssh/id_ed25519
    debug1: Will attempt key: /c/Users/xxx/.ssh/id_ed25519_sk
    debug1: Will attempt key: /c/Users/xxx/.ssh/id_xmss
    debug1: Will attempt key: /c/Users/xxx/.ssh/id_dsa
    
  2. 若出现类似以下的调试信息,则表明~/.ssh/authorized_keys文件权限设置有问题,建议按照第二步重新检查权限设置:

    Authentication refused: bad ownership or modes for file   ~/.ssh/authorized_keys
    

    提示:可通过ssh -i ~/.ssh/private_key UserName@Alias命令指定使用特定的密钥文件进行本次身份验证。

  3. 若出现类似以下的调试信息,则表明服务器上没有找到匹配的公钥,这可能是因为它没有被你正确的添加到~/.ssh/authorized_keys文件中,建议检查两端的公钥是否一致:

    debug: we did not send a packet, disable method
    debug: authmethod_lookup password
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值