小智 28
从您的本地机器,您可以创建通过中间主机到最终主机的 SSH 隧道:
ssh user@intermediate -L 2000:final:22 -N
Run Code Online (Sandbox Code Playgroud)
这将在您的本地主机上打开端口 2000,该端口将通过中间主机的隧道直接连接到端口 22 上的最终服务器。现在在另一个提示中,在端口 2000 上与 sftp 连接以通过隧道连接到最终服务器,注意此处指定的用户是针对最终主机的:
sftp -P 2000 user@localhost
Run Code Online (Sandbox Code Playgroud)
不过,这似乎属于superuser.com或serverfault.com。
Gor*_*son 17
由于我最初写了这个答案,OpenSSH 添加了一种更简单的方法来做到这一点。如果您的家用机器上至少有 OpenSSH 8.0,中间主机上至少有 7.3,则可以使用新的跳转主机 ( -J) 选项:
sftp -J user@intermediatehost user@finalhost
Run Code Online (Sandbox Code Playgroud)
如果家庭和中间主机上至少有 7.3,你可以使用~/.ssh/config 文件中的ProxyJump选项做同样的事情:
Host finalhost
ProxyJump user@intermediatehost
Run Code Online (Sandbox Code Playgroud)
使用该条目,您可以使用 sftp、scp 和 ssh 到 finalhost,它会自动调用隧道。唯一不透明的部分是它会提示输入两个密码(中间主机后跟最终主机),但如果您愿意,您也可以使用 SSH 密钥对来消除它。
如果您没有足够新的 OpenSSH 版本,您仍然可以使用该ProxyCommand选项来做基本相同的事情:
sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost
Run Code Online (Sandbox Code Playgroud)
(假设中间主机安装了 netcat /usr/bin/nc- 如果没有,您可能需要找到/安装一些将 stdin&stdout 网关连接到 TCP 会话的等效方法。)
和等效的 ~/.ssh/config 选项:
Host finalhost
ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Wikibooks 上的 OpenSSH Cookbook。
小智 0
我假设最终主机装有防火墙,我只能猜测您可以用来绕过它的方法。
例如 - 从本地计算机公开 ssh,然后 ssh 到第一台主机,然后 ssh 到第二台主机,并从最终主机 sftp 到您的计算机。
| 归档时间: |
|
| 查看次数: |
16344 次 |
| 最近记录: |