如何使用 ssh 连接两台远程计算机

如何使用 ssh 连接两台远程计算机

我找到了很多关于通过 ssh 连接两台计算机的教程,但我猜我还是没有抓住重点。(例如,我尝试这个或者这个

假设我是用户 A,ipv4 为 xxx.xxx.x.xx,我想与我的朋友(在另一个国家)用户 B(ipv4 为 yyy.yyy.y.yy)建立 ssh 连接

因此,我生成了一个 ssh 密钥,并且我有一个很好的 ./ssh/id_rsa 和 ./ssh/id_rsa.pub,现在我应该将它复制到我朋友的电脑上吗?

但正如人们所猜测的那样,

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

不起作用(怎么可能呢,因为我们还没有被限制?)

用户 B 是否必须手动将此文件复制到他自己的 .ssh 文件中?

然后在我的电脑上

ssh [email protected]

能直接起作用吗?(我认为这是非常不现实的……)

抱歉,我太笨了,但在我看来,在教程中,人们正在处理同一台计算机......

答案1

因此,我生成了一个 ssh 密钥,并且我有一个很好的 ./ssh/id_rsa 和 ./ssh/id_rsa.pub,现在我应该将它复制到我朋友的电脑上吗?

是的,具体来说,您应该将您的文件(公钥)复制到远程系统的文件中。~/.ssh/id_rsa.pub~/.ssh/authorized_keys

(尽管你确实应该你自己目标机器上的用户帐户,而不是共享朋友的“userB”帐户。)

[ssh-copy-id] 不起作用(怎么可能呢,因为我们还没有被限制?)

通常情况下,它会通过输入密码登录远程系统。(SSH 使用与本地登录相同的“系统”帐户和密码。)

这里关于 SSH 的事情是它允许客户端从几种登录方法中进行选择——实际上并不是仅有的基于密钥对。(有点像网站允许您使用密码登录、使用 Google 登录、使用 USB 令牌登录等。)

当然,如果远程系统已经有基于密码的登录已禁用(这在当今已经成为一种必需品),那么 ssh-copy-id 确实无法凭空发挥作用,您需要以其他方式将您的公钥复制到服务器的“authorized_keys”文件中。

幸运的是,公钥只是一长行文本,因此您可以通过电子邮件、Discord 或其他任何方式粘贴它。(虽然 RSA 密钥很长,但ssh-keygen -t ed25519会产生一个很多更短的 id_ed25519.pub,甚至可以在紧急情况下写在纸上。

(尽管在这种情况下,ssh-copy-id 仍然可以保留技术上如果您已经有了一组可用的密钥对,并想用它来注册另一个密钥对,那么这种方法就很有用。第三种选择是基于 Kerberos 的登录,这种登录方式主要见于企业/业余爱好者环境。)

然后就可以直接在我的计算机上运行了?(我认为这是非常不现实的......)ssh [email protected]

具体来说,SSH 部分可以工作,是的。

但是,请注意,SSH 不会神奇地穿过 NAT,也不会自动为您设置“端口转发”,因此如果需要访问朋友的家用计算机,则需要单独进行设置。(SSH 使用 TCP 端口 22。)同样,如果有防火墙,则需要一条规则来允许 SSH。

所以需要先处理ssh y.y.y.y才能起作用。

(大多数 SSH 教程都不涉及家庭 NAT,因为它是一个非常通用的东西,并不是 SSH 设置的严格组成部分。只是假设如果有人想允许通过 IPv4 连接到家庭网络,那么他们已经知道什么是端口转发以及需要如何配置它——对 SSH 或 Minecraft 或 BitTorrent 或其他任何东西执行此操作没有区别。

此外,许多 SSH 教程更针对开发人员和一般想要连接到具有自己的公共 IPv4 地址的 VPS 的人。这与您尝试连接到朋友的 PC 略有不同。)

答案2

要使公钥认证工作,id_rsa.pub必须为目标用户附加您的公钥 ( ) ~/.ssh/authorized_keys。如何在那里获得它与 SSH 无关 - 您必须自己弄清楚。您可以使用任何您想要的媒介,只要它保证完整性(即收件人可以确认他们收到的就是您发送的)。它不必是机密的,因为它是您的民众密钥。私钥 ( id_rsa) 保留在您的计算机上。

那么这有什么意义ssh-copy-id呢?有两种用例:

  1. 密码验证已启用,并且您想要启用公钥验证。在这种情况下,您必须输入密码才能连接到主机 B,并将ssh-copy-id公钥附加到authorized_hosts

  2. 公钥认证已设置,但您想要添加另一个密钥,例如使用更强或不同的加密技术。特别是,您可能想要添加不属于您或您当前主机的密钥。在这种情况下,您需要使用选项指定密钥文件-i。(默认为添加由ssh-add -L或提供的所有密钥(id_rsa.pub如果没有)。)

如果您已经设置了密码验证,为什么还要使用公钥验证?因为它无法猜测,并且不需要用户交互。

相关内容