我正在尝试设置授权密钥,以便我可以无需密码登录到远程机器。
复杂的是,我必须先经过大学网关机器(机器 1)才能到达远程机器(机器 2)。
我已经在本地计算机上创建了授权密钥,并将公钥添加到 machine1 上的授权密钥列表中。这样就好了;我现在可以不用密码 ssh 进入 machine1。
我不清楚下一步该怎么做。我现在应该:
(a)需要在 machine1 上生成更多密钥并将它们添加到 machine2 上的 authorized_keys 中吗?或者(b)将我刚添加到 machine1 的相同公钥(来自我的本地机器)放到 machine2 中?
答案1
基本上,您可以同时做这两件事。
a) 更多按键
您可以继续创建密钥,machine1
并将公钥复制到machine2
文件中/home/yourusername/.ssh/authorized_keys
。
machine2
如果您不决定采用下面的替代方案,我建议您使用这种方法。如果有人在上获得了您的私钥machine1
,他仍然没有在您的客户端上拥有您的私钥machine1
。
b) 相同的密钥
您也可以将复制到 的公钥machine1
放在 上machine2
。在这种情况下,您还必须将私钥复制到 ,才能machine1
成功地从 sshmachine1
到machine2
。
我不建议这样做,因为您的唯一私钥现在在远程系统上可用。
选择
c) 代理命令
将私钥私下保存在您的客户端上。仅将公钥复制到每台机器的/home/yourusername/.ssh/authorized_keys
。在您的客户端上,设置/home/yourusername/.ssh/config
(假设您在客户端上使用 Linux):
Host machine1
HostName machine1.domain.tld
Port 22 # or whichever port that is in your scenario
User yourusername
IdentityFile ~/.ssh/machine1privatekey
Host machine2
HostName hostname # resolves in the local network? If not, give its IP address here
Port 22
User yourusername
IdentityFile ~/.ssh/machine1privatekey # the same as above
ProxyCommand ssh -W machine2:22 machine1
在这种情况下,一个简单的操作ssh machine2
就会通过 machine1 连接到 machine2,而无需先 ssh 到 machine1,然后手动 ssh 到 machine2。
额外的好处:您的私钥只需要放在您的客户端上,而不是远程系统上。
编辑:
d)SSH 代理转发
您可能可以将 和 的两个私钥都保留machine1
在machine2
客户端上,然后使用 ssh 代理转发将machine1
私钥从客户端转发到machine2
。这被认为是有风险,我没有使用它,但它应该是这样的:
$ ssh-agent /bin/bash
$ ssh-add ~/.ssh/machine*privatekey
$ ssh -A -p 22 [email protected] 'ssh -p 22 yourusernameqmachine2'