有三台机器A、B和C运行linux。我有对机器A和B的根访问权,但不能访问C。A是我的本地机器,我想连接C。C只能通过VPN通过ssh访问。我不能直接从A连接到C,因为VPN流量在A中被阻塞了。我可以使用共享密钥从A到B连接到ssh。我在B中运行openvpn,然后可以通过ssh连接到C,但是C不接受共享密钥。我想要scp文件直接和无密码从C到A,从A到C,所以我创建了一个ssh主连接在B和ssh隧道在A,但是我不能使隧道使用主连接在B,我的问题是如何设置ssh,以便连接从A到C使用现有的主连接在B?
发布于 2014-11-26 17:14:40
我可以看到实现这一目标的三种方法:
1.您可以在A上运行scp,而不是让它只运行ssh到另一个主机并在那里运行scp,您可以让它从ssh到B,在B上运行另一个ssh命令来连接C并在那里运行服务器端scp。
看起来scp没有一个选项来指定如何在远程端调用scp,但是它确实有一个选项来指定如何在本地调用ssh。这是-S
选项,目的是告诉它在哪里找到ssh
。
您可以做的是使用指向脚本的-S
选项来运行scp。然后该脚本将ssh到B并在那里运行ssh,必须调用B上的ssh命令,并使用A上scp提供给脚本的所有选项。
2.如果您能够在C上配置一个authorized_keys文件,您可以让A直接对C进行身份验证。可能您所缺少的是C上的authorized_keys文件的适当权限,因为A不能直接连接到C上,因此您将指定一个运行ssh -W
的ProxyCommand来从A连接到B。听起来,在您的情况下,需要在A上的~/.ssh/config
中使用ssh -W %h:%p B
。
3.在C上运行scp命令,并让C连接回A。如果C不能直接连接到A,则可以使用上面建议的ProxyCommand打开连接,或者通过设置A和B之间或B与C之间的ssh反向端口转发来打开连接。
https://serverfault.com/questions/647443
复制相似问题