我正在尝试在 CentOS6 系统上为自己建立无密码 ssh。我遵循以下步骤:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
相应的公钥和私钥文件以及授权密钥均已创建。~/.ssh/id_dsa.pub 的内容如下所示:
ssh-dss AAAAB3NzaC1kc3MAAACBAMtCKpsSeE8DxjvMqCl2S62YGmR/UMXpLH+tOuCiHzITUnB44kTBfh16WGRjAKdoFcrx/xIZBXyP5YTo1rIGzLbIK+LILOyaIe17mVYWgBs5k5WENLQKwQ3W0kaNvkN+uTcGArDl9r6o8oi8Lnox0ldCp/zGsNZuJfUnCOxX0PthAAAAFQD9wyrHwmyjMKWUhva+pwzhkYjbgQAAAIAqxFHO/Cb834Wa+PcNB80PvcPlwKHMrPnPZcEl+INsNmENU+khLe812GMD8G EsLbLxMgVKlFVAGXT0WUhCYpx7VTeawZ6/dOYlOf44Bjn2z6KAPkQaZyfTzF9gcunDdBY3uHJnOnj9c2bNfMPNc46D5cfPbAov/cNNnue2VWsmtwAAAIEAvJxL25YgbwJdwusIwcVMGjoFj8pRjYKFJwOLvfW1N+UI9u1ZCEkNmuRuOCSRgqDhL0Zr7qv11S8GT4sDdMat6xR7Qhw/Q3NwG4XIOJ5hGoHqlwIleE095JPQnmy8/ffn4qOYPql19RGwTM3lynGVIXBxcIEKzdmeoZKWG3ejS+I= [电子邮件保护]
但是,当我运行“ssh computer.network.net”或“ssh localhost”命令时,系统会提示我输入密码(第一个问题)。输入密码并建立 ssh 会话后,我退出并检查 ~/.ssh/known_hosts 文件,其中缓存了以下密钥:
本地主机 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApHXsA7mMOtqKO1XotKTk5vM5F1LRoqxLLZw2TVLUA36BrkJAMM1EqfnH3mIoNz6sJzOdmQV2ubYGkzvCUb1TX8wUId1KQki8I1l2S52vFEwHkJlFe+KFQcU4SBtxDRDEvHkiLid0D37V+O3W6ElxhhRjkL+neb FPSFEdDlwBUTzAmR3KPD9zFjLP3JJZrwYH1E1sEl52pHbrcr7ROhfRjtz+3glVog9tJC3Xbfwu74JeywYrKQXbtDV84CJ0FoD6WAtJ+V0Dh8hnyBDkdbBc/zVIEDcXfcVNA4yc2noAHdQQ6p11Q8zW94/aJVhi/t0D9vSVMZP8UbHmnM2RfElIww==
这是一个 RSA 密钥,而不是我生成的 DSA 密钥(第二个问题)。经过一番挖掘,我在 /etc/ssh/ssh_host_rsa_key.pub 中找到了此 RSA 密钥。
为什么 SSH 使用 /etc/ssh 文件夹中的密钥而不是我在 ~/.ssh 文件夹中生成的密钥? 我如何告诉 SSH 使用 ~/.ssh 文件夹中的公钥私钥对。查看 man ssh 似乎表明这是默认行为,但显然没有发生。
提前致谢。
更新
尝试 ssh -v localhost 的输出很冗长,但我确实发现了一个有趣的小细节:
debug1: Next authentication method: publickey
debug1: Offering public key: /home/admin-cloud/.ssh/id_dsa
debug1: Server accepts key: pkalg ssh-dss blen 434
Agent admitted failure to sign using the key.
debug1: Trying private key: /home/admin-cloud/.ssh/identity
debug1: Trying private key: /home/admin-cloud/.ssh/id_rsa
debug1: Next authentication method: password
因此,它似乎找到了我的 ~/.ssh/id_dsa 密钥,并被接受,然后出现“代理承认无法使用密钥签名”。之后,它会查找 ~/.ssh/identity(不存在)和 ~/.ssh/id_rsa(不存在),最后只要求输入密码。您对该错误有什么想法吗?
答案1
这授权密钥文件应该包含民众钥匙,而不是私人的一个。以下命令应该使用id_dsa.pub文件改为:
cat ~/.ssh/id_dsa >> ~/.ssh/authorized_keys
这已知主机文件用于主机密钥,因此这是预期的。
此外,尝试添加一个或多个-v运行时标志远程控制,它将打印许多有用的信息。
编辑:你能验证哪些密钥吗ssh 代理已使用以下方式缓存:ssh-添加-L?
或者运行ssh 添加(或者ssh-添加〜/.ssh/id_dsa)以确保磁盘上的文件与其缓存匹配,然后重试。
答案2
IdentityFile
检查配置变量的值/etc/ssh/ssh_config
,并确保它没有被覆盖~/.ssh/config
:
IdentityFile ~/.ssh/id_dsa
并且,为了确保万无一失(它应该是多余的,并ssh-keygen
使用正确的权限创建它),请验证该文件的权限是否为 0600,否则ssh
将不会使用该文件。
指定从中读取用户的 DSA、ECDSA 或 RSA 身份验证身份的文件。对于协议版本 1,默认值为 ~/.ssh/identity,对于协议版本 2,默认值为 ~/.ssh/id_dsa、~/.ssh/id_ecdsa 和 ~/.ssh/id_rsa。此外,身份验证代理所代表的任何身份都将用于身份验证。ssh(1) 将尝试从通过将 -cert.pub 附加到指定 IdentityFile 的路径而获得的文件名中加载证书信息。
文件名可以使用波浪号语法来指代用户的主目录或以下转义字符之一:“%d”(本地用户的主目录)、“%u”(本地用户名)、“%l”(本地主机名)、“%h”(远程主机名)或“%r”(远程用户名)。
配置文件中可以指定多个身份文件;所有这些身份将按顺序尝试。多个 IdentityFile 指令将添加到尝试的身份列表中(此行为与其他配置指令的行为不同)。