我经常通过 传输文件和操作程序ssh
,并且经常在家中进行。我通常使用的机器是工作中的台式机,ssh
除非我已经连接到部门网络,否则我无法直接使用它。因此,如果我在家,我必须ssh
先连接到我部门的网络,然后再连接到我的桌面,即
ssh username@departmentnetwork
进而
ssh username@desktop-departmentnetwork
此设置意味着,如果我要从家里传输文件,我必须将scp
文件传输到部门网络上的驱动器,ssh
再传输到部门网络,然后scp
将文件再次传输到我的桌面。
有没有办法使用 、 、 和 中的任何一个或全部ssh
来scp
连接sshfs
到“网络中的网络”?
答案1
您可以使用ProxyCommand
您可以设置的ssh
方式,使其连接到“网关”系统,然后连接到“网关”系统后面的辅助系统。
Host internal-host
User sam
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh user@gateway nc internal-host.somedom.com %p
该技术利用该工具nc
充当连接器。这篇文章详细介绍了它的工作原理:透明多跳 SSH。
我使用的另一个技巧是在我的设置中添加一个ControlMaster
,这样一旦我通过身份验证,我就可以“回收”它,而不必继续重新验证其他连接。
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
很多主机
如果您有多个内部主机,您可以使用文件中可用的特殊变量~/.ssh/config
来获取主机名 ( %h
) 和端口 ( %p
)。
Host host1 host2 host3
User internal-user
ProxyCommand ssh [email protected] nc %h %p
这将允许您ssh host1
从系统连接到 host1。
参考
答案2
@slm建议的方法是一个好方法。如果你想学习另一种方法,也可以通过 ssh 隧道来完成:
ssh -t -l gatewayuser -L9997:127.0.0.1:9998 gatewayserver "ssh -l serveruser -D9998 -N internalserver"
请忽略糟糕的图表:)