我正在尝试 ssh 两台机器,我更愿意使用生成的密钥进行身份验证,而不是密码。这将使我能够自动执行端口转发和许多其他操作。
注意:我的服务器是 debian。
以下是我所做的。
我生成了密钥:
ssh-keygen -t dsa
将 id_dsa.pub 复制到远程服务器的 ~/.ssh
- ssh-add -D 删除旧密钥。我想我不需要它们
ssh-add ~/.ssh/id_dsa 添加私有 id 5.尝试以以下身份连接到外部服务器
ssh root@remote-ip
- 在我接受添加到已知主机后,密码仍然固定。
- 尝试了 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 -D
吗sshd 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
服务器上。