谢谢您,但我认为我没有正确传达问题。我再描述一下问题。我们假设密钥名为“ssh-rsa AAAAB3Nxyz user@laptop”。现在这些是当前配置:
在我的笔记本电脑~/.ssh/id_rsa.pub 包含 -
ssh-rsa AAAAB3Nxyz user@laptop
On服务器B~/.ssh/id_rsa.pub 包含 -
ssh-rsa AAAAB3Nxyz user@laptop
On服务器A~/.ssh/authorized_keys 包含 -
ssh-rsa AAAAB3Nxyz user@laptop
现在,当我从我的笔记本电脑(进入服务器 A)进行 ssh 时,有没有密码提示。但是当我从服务器 B(进入服务器 A)进行 ssh 时,我得到以下信息 -
输入密钥“~/.ssh/id_rsa”的密码:
当我输入密码时,我就可以登录。但我不希望服务器 B 上出现密码提示。我不明白为什么会有这种行为差异。为什么服务器 B 无法在没有密码提示的情况下访问服务器 A,而使用相同的密钥我的笔记本电脑却能够在没有密码提示的情况下访问服务器 A。我检查了所有权限,都没有问题。希望这一点是清楚的。谢谢。
答案1
您永远不需要复制整个~/.ssh
目录,只需复制密钥的公共部分的内容。假设启用密码身份验证,最简单的做法是
user@darkstar ~ $ ssh-copy-id remoteusername@remotehostname
让 ssh 负责将所有内容放在正确的位置。
如果您需要手动执行此操作,或者如果您没有密码身份验证并且必须让系统管理员将密钥放置到位等,那么您需要复制文件~/.ssh/id_rsa.pub
。一旦位于远程计算机上,只需将内容添加到~/.ssh/authorized_keys
相应用户帐户下文件中已有的内容即可。一个简单的cat id_rsa.pub >> ~/.ssh/authorized_keys
就可以了。
最后,您要确保两台计算机上的私钥、文件authorized_keys
和~/.ssh
目录的权限设置正确 -~/.ssh
目录应设置为 0700,其中的文件应设置为 600。
解决您的问题,登录到远程计算机,将现有~/.ssh
目录重命名为其他目录,重新创建它并正确设置权限,注销,然后使用ssh-copy-id
上面的目录。此时,您应该能够使用您的密钥以及与之关联的任何密码进行 ssh。
编辑更新的问题我认为您缺少密钥对概念。想想房子的门锁 - 为了用一把钥匙打开所有门锁,它们的内部必须具有相同的密码组合。
任何给定组合的 id_rsa.pub 文件都会进入远程计算机上的authorized_keys 文件。为了使该密钥发挥作用,您所连接的计算机上必须具有相应的私钥。您可以通过将多个密钥放在不同的文件中并使用-i
ssh(等)选项来指定要连接到的私钥来处理多个密钥。
因此,使用您的信息,您需要从笔记本电脑获取私钥文件(可能~/.ssh/id_rsa
)并将其放在服务器 B 上,称之为类似~/.ssh/laptop_id_rsa
)。当您从服务器 B ssh 到服务器 A 时,您可以使用ssh -i ~/.ssh/laptop_id_rsa user@serverA
.如果您想从 A 到 B,请重复将私钥放在 A 上的过程。或者,您可以使用服务器 B 作为跳转主机/隧道,这样一旦您使用正确的选项连接到那里,您就可以从笔记本电脑直接 ssh 到服务器 A。这将您的私钥文件仅保存在您的笔记本电脑上(这对于安全来说是件好事,您不希望副本四处飘荡,尤其是使用无密码密钥时!)
您可能还需要设置一个~/.ssh/config
文件,以便您可以简单地执行ssh serverA
并让它使用适当的主机名、端口、用户名、身份文件等。