我正在尝试通过 SSH 连接到运行 sshd 的服务器(我们将其称为 me@server)。我使用 创建ssh-keygen -t rsa
密钥来设置 ssh 密钥,然后运行cat ~/.rsa/id_rsa.pub | ssh user@server 'cat >> ~/.ssh/authorized_keys'
。现在,当我运行时,ssh user@server
我可以毫无问题地连接到服务器。但是当我使用别名时,系统ssh server
会提示我输入密钥的密码(它没有密码),最终输入user@server
的密码(这是我首先试图避免的。
这是我.ssh/config
在本地机器上的情况:
Host server
HostName my_ip
User user
IdentityFile ~/.ssh/id_rsa.pub
我检查了本地和远程计算机上的所有文件/目录权限,它们似乎都是正确的。有人知道发生了什么吗?
更新
所以我想既然登录在没有该-i ~/.ssh/id_rsa.pub
选项的情况下也能正常工作,那我不妨试试没有该选项的主机,IndentityFile ~/.rsa/id_rsa.pub
所以我从配置文件中删除了该行,一切正常。我不知道为什么。有人愿意解释一下吗?
答案1
IdentityFile ~/.ssh/id_rsa.pub
-i ~/.ssh/id_rsa.pub
您在这里指定公钥。您应该指定私钥。私钥可能名为~/.ssh/id_rsa
。
~/.ssh/id_rsa
恰好是要ssh
查找的默认密钥文件名之一。当您从命令中删除错误的密钥文件规范时,ssh
可能会回退到查找其默认密钥,并用于id_rsa
会话。
答案2
首先,您确定它要求输入密钥文件的密码而不是远程服务器密码吗?
其次,如果您指定命令行选项,SSH 会有一个非常详细的调试模式:-v -v -v
您可以在服务器上执行相同操作:-d -d -d
这应该能准确地告诉你双方到底发生了什么,并解释任何奇怪的行为。
如果我不得不猜测,我怀疑 SSH 客户端正在解析不同的私钥,然后由于某种原因强制提示,但调试输出是找出答案的方法。
如果我有 4 个不同的私钥,我会将它们全部列为 IdentityFile 条目。这应该可以解决这个问题 - 如果它确实替换了一个意外的密钥。