SSH 无密码认证失败

SSH 无密码认证失败

我正在尝试 ssh 两台机器,我更愿意使用生成的密钥进行身份验证,而不是密码。这将使我能够自动执行端口转发和许多其他操作。

注意:我的服务器是 debian。

以下是我所做的。

  1. 我生成了密钥:

    ssh-keygen -t dsa
    
  2. 将 id_dsa.pub 复制到远程服务器的 ~/.ssh

  3. ssh-add -D 删除旧密钥。我想我不需要它们
  4. ssh-add ~/.ssh/id_dsa 添加私有 id 5.尝试以以下身份连接到外部服务器

    ssh root@remote-ip

  5. 在我接受添加到已知主机后,密码仍然固定。
  6. 尝试了 ssh -vvv root@remote-ip 并且获取的日志发布在下面。
OpenSSH_5.8p1 Debian-7ubuntu1,OpenSSL 1.0.0e 2011 年 9 月 6 日
debug1:读取配置数据 /etc/ssh/ssh_config
debug1:应用选项 *
调试2:ssh_connect:needpriv 0
debug1:连接到184.154.191.58 [184.154.191.58]端口18765。
debug1:连接已建立。
debug1:身份文件/home/eclipse/.ssh/id_rsa 类型-1
debug1:身份文件/home/eclipse/.ssh/id_rsa-cert 类型-1
debug1:身份文件/home/eclipse/.ssh/id_dsa 类型2
debug1:检查黑名单文件 /usr/share/ssh/blacklist.DSA-1024
debug1:检查黑名单文件 /etc/ssh/blacklist.DSA-1024
debug1:身份文件/home/eclipse/.ssh/id_dsa-cert 类型-1
debug1:身份文件/home/eclipse/.ssh/id_ecdsa 类型 -1
debug1:身份文件/home/eclipse/.ssh/id_ecdsa-cert 类型-1
debug1:远程协议版本2.0,远程软件版本OpenSSH_4.3
调试1:匹配:OpenSSH_4.3 pat OpenSSH_4*
debug1:启用协议 2.0 的兼容模式
debug1:本地版本字符串 SSH-2.0-OpenSSH_5.8p1 Debian-7ubuntu1
debug2:fd 3 设置 O_NONBLOCK
debug3:put_host_port:[184.154.191.58]:18765
debug3:load_hostkeys:从文件“/home/eclipse/.ssh/known_hosts”加载主机“[184.154.191.58]:18765”的条目
debug3:load_hostkeys:在文件 /home/eclipse/.ssh/known_hosts:3 中找到密钥类型 RSA
debug3:load_hostkeys:已加载 1 个密钥
debug3: order_hostkeyalgs: 首选 hostkeyalgs:[电子邮件保护][电子邮件保护],ssh-rsa
debug1:SSH2_MSG_KEXINIT 已发送
debug1: 收到 SSH2_MSG_KEXINIT
调试2:kex_parse_kexinit:ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
调试2:kex_parse_kexinit:[电子邮件保护][电子邮件保护],SSH-RSA,[电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护][电子邮件保护],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-dss
调试2:kex_parse_kexinit:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[电子邮件保护]
调试2:kex_parse_kexinit:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[电子邮件保护]
调试2:kex_parse_kexinit:hmac-md5,hmac-sha1,[电子邮件保护],hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
调试2:kex_parse_kexinit:hmac-md5,hmac-sha1,[电子邮件保护],hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
调试2:kex_parse_kexinit:无,[电子邮件保护],zlib
调试2:kex_parse_kexinit:无,[电子邮件保护],zlib
调试2:kex_parse_kexinit:
调试2:kex_parse_kexinit:
调试2:kex_parse_kexinit:first_kex_follows 0
调试2:kex_parse_kexinit:保留0
调试2:kex_parse_kexinit:diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
调试2:kex_parse_kexinit:ssh-rsa,ssh-dss
调试2:kex_parse_kexinit:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[电子邮件保护]
调试2:kex_parse_kexinit:aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[电子邮件保护]
调试2:kex_parse_kexinit:hmac-md5,hmac-sha1,hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
调试2:kex_parse_kexinit:hmac-md5,hmac-sha1,hmac-ripemd160,[电子邮件保护],hmac-sha1-96,hmac-md5-96
调试2:kex_parse_kexinit:无
调试2:kex_parse_kexinit:无
调试2:kex_parse_kexinit:
调试2:kex_parse_kexinit:
调试2:kex_parse_kexinit:first_kex_follows 0
调试2:kex_parse_kexinit:保留0
debug2:mac_setup:发现 hmac-md5
debug1:kex:服务器->客户端aes128-ctr hmac-md5 none
debug2:mac_setup:发现 hmac-md5
debug1:kex:客户端->服务器aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024-1024-8192) 已发送
调试1:期望SSH2_MSG_KEX_DH_GEX_GROUP
debug2:dh_gen_key:私钥位设置:125/256
debug2:位设置:518/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT 已发送
debug1:期待 SSH2_MSG_KEX_DH_GEX_REPLY
debug1:服务器主机密钥:RSA 5d:ce:fb:75:de:6f:52:f9:ad:41:e3:92:9a:53:ee:f0
debug3:put_host_port:[184.154.191.58]:18765
debug3:put_host_port:[184.154.191.58]:18765
debug3:load_hostkeys:从文件“/home/eclipse/.ssh/known_hosts”加载主机“[184.154.191.58]:18765”的条目
debug3:load_hostkeys:在文件 /home/eclipse/.ssh/known_hosts:3 中找到密钥类型 RSA
debug3:load_hostkeys:已加载 1 个密钥
debug3:load_hostkeys:从文件“/home/eclipse/.ssh/known_hosts”加载主机“[184.154.191.58]:18765”的条目
debug3:load_hostkeys:在文件 /home/eclipse/.ssh/known_hosts:3 中找到密钥类型 RSA
debug3:load_hostkeys:已加载 1 个密钥
debug1:主机“[184.154.191.58]:18765”已知并且与 RSA 主机密钥匹配。
debug1:在 /home/eclipse/.ssh/known_hosts:3 中找到密钥
debug2:位设置:514/1024
debug1: ssh_rsa_verify: 签名正确
调试2:kex_derive_keys
debug2: set_newkeys: 模式 1
debug1: SSH2_MSG_NEWKEYS 已发送
debug1:期望 SSH2_MSG_NEWKEYS
debug2:set_newkeys:模式 0
debug1: 已收到 SSH2_MSG_NEWKEYS
debug1:服务器不允许漫游
debug1: SSH2_MSG_SERVICE_REQUEST 已发送
调试2:service_accept:ssh-userauth
debug1: 已收到 SSH2_MSG_SERVICE_ACCEPT
debug2:密钥:/home/eclipse/.ssh/id_rsa((nil))
debug2:密钥:/home/eclipse/.ssh/id_dsa (0x21b20e18)
debug2:密钥:/home/eclipse/.ssh/id_ecdsa((nil))
debug1:可以继续的身份验证:密码、键盘交互
debug3:重新开始,传递不同的列表密码,键盘交互
debug3:首选 gssapi-keyex、gssapi-with-mic、publickey、keyboard-interactive、密码
debug3:authmethod_lookup 键盘交互
debug3:剩余首选:密码
debug3:authmethod_is_enabled 键盘交互
debug1:下一个身份验证方法:键盘交互
调试2:userauth_kbdint
debug2:我们发送了一个键盘交互数据包,等待回复
调试2:input_userauth_info_req
调试2:input_userauth_info_req:num_prompts 1
密码:

请有人帮忙。

答案1

你把公钥放错了位置。在服务器上,允许的密钥存储在文件中~/.ssh/authorized_keys,每行一个密钥。SSH 服务器将忽略 中的所有其他文件~/.ssh

(您可以轻松使用它来授权密钥。)ssh-copy-id <server>


第二,你真的运行过sshd -Dsshd id_dsa?命令是ssh-add

ssh-add -D
ssh-add ~/.ssh/id_dsa

答案2

尝试

ssh-copy-id [user@]hostname

系统将提示您输入远程用户的密码,输入该密码后,您就应该进入远程服务器,注销并通过 ssh 重新登录。无需密码。

*此外,请检查其他答案中提到的文件权限。

希望能帮助到你

答案3

这些年来,我花了太多时间调试无密码公钥 ssh 身份验证,所以我想为其他人提出一些建议:

  • 正如 mgorven 所言,请确保在远程主机上正确设置了文件权限。根据我的经验,这是最常见的问题。
    $ chown -R 用户名:用户名 ~/.ssh
    $ chmod -R 700 ~/.ssh
  • 使用“-v”、“-vv”或“-vvv”从客户端运行 ssh 给了我很多输出,但它从来没有告诉我远程机器上的配置有什么问题。这可能是为了防止邪恶的 h4x0rs 获取过多信息或类似的东西。

  • 如果您可以物理(非 ssh)访问远程机器,您可以尝试停止 sshd 服务并使用“-d”标志手动运行 sshd 以将调试信息输出到控制台。

  • 为 root 设置无密码身份验证是重大的安全禁忌,但如果您仍想这样做,请先尝试设置非 root 用户。然后,如果您在为 root 启用它时遇到问题,您就会知道这是 root/sysadmin 帐户的特定设置造成的。

  • 检查 SELinux 是否已启用。如果已启用,则可能会造成干扰。特别是当您尝试为超级用户帐户设置无密码身份验证时。

希望这可以节省人们因 ssh 而花费的大量令人沮丧的故障排除时间。

答案4

OpenSSH 对文件权限非常挑剔。确保/root/.ssh其中的所有内容都归正确的用户所有,并且只有所有者可读写。

chown -R root:root /root/.ssh
chmod -R u=rwX,g=,o= /root/.ssh

如果仍然不起作用,请在尝试登录时将内容粘贴/var/log/auth.log/var/log/syslog服务器上。

相关内容