SSH使用错误的ID


2

我想在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 + khLe812GMD8GEsLbLxMgVKlFVAGXT0WUh​​CYpx7VTeawZ6 / dOYlOf44Bjn2z6KAPkQaZyfTzF9gcunDdBY3uHJnOnj9c2bNfMPNc46D5cfPbAov / cNNnue2VWsmtwAAAIEAvJxL25YgbwJdwusIwcVMGjoFj8pRjYKFJwOLvfW1N + UI9u1ZCEkNmuRuOCSRgqDhL0Zr7qv11S8GT4sDdMat6xR7Qhw / Q3NwG4XIOJ5hGoHqlwIleE095JPQnmy8 / ffn4qOYPql19RGwTM3lynGVIXBxcIEKzdmeoZKWG3ejS + I = admin-cloud@computer.network.net

但是,当我运行“ssh computer.network.net”或“ssh localhost”命令时,系统会提示我输入密码(第一个问题)。输入密码并建立ssh会话后,我退出并检查〜/ .ssh / known_hosts文件,其中缓存了以下密钥:

本地主机SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEApHXsA7mMOtqKO1XotKTk5vM5F1LRoqxLLZw2TVLUA36BrkJAMM1EqfnH3mIoNz6sJzOdmQV2ubYGkzvCUb1TX8wUId1KQki8I1l2S52vFEwHkJlFe + KFQcU4SBtxDRDEvHkiLid0D37V + O3W6ElxhhRjkL + nebFPSFEdDlwBUTzAmR3KPD9zFjLP3JJZrwYH1E1sEl52pHbrcr7ROhfRjtz + 3glVog9tJC3Xbfwu74JeywYrKQXbtDV84CJ0FoD6WAtJ + V0Dh8hnyBDkdbBc / zVIEDcXfcVNA4yc2noAHdQQ6p11Q8zW94 / aJVhi / t0D9vSVMZP8UbHmnM2RfElIww ==

这是一个RSA密钥,而不是我生成的DSA密钥(第二个问题)。在做了一些挖掘后,我在/etc/ssh/ssh_host_rsa_key.pub中找到了这个RSA密钥。

为什么SSH使用/ etc / ssh文件夹中的键而不是我在〜/ .ssh文件夹中生成的键? 如何告诉SSH使用〜/ .ssh文件夹中的公共私钥对。看一下man ssh似乎表明这是默认行为,但显然没有发生。

提前致谢。

UPDATE

尝试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(不存在),然后最后,只需要一个密码。对这个错误的任何想法?

Answers:


2

authorized_keys的文件应包含公共密钥,而不是私人的。以下命令应该使用id_dsa.pub文件:

cat ~/.ssh/id_dsa >> ~/.ssh/authorized_keys

known_hosts的文件是主机密钥,所以这是符合市场预期。

此外,尝试在运行ssh时添加一个或多个-v标志,它将打印许多有用的信息。

编辑:您可以使用以下命令验证ssh-agent缓存了哪些密钥:ssh-add -L

或者运行ssh-add(或ssh-add~ / .ssh / id_dsa)以确保磁盘上的文件与其缓存匹配,然后重试。


道歉,这是一个错字。我将公钥添加到authorized_keys文件。如果我把私钥给了它,那将会有一个---- BEGIN DSA PRIVATE KEY ----横跨顶部的横幅
JHowIX 2013年

ssh-add修复了它。感谢您的帮助
JHowIX 2013年

1

检查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指令将添加到尝试的身份列表中(此行为与其他配置指令的行为不同)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.