我有本地机器 (L) 和远程机器 (R),只能通过跳过 (A)、(B) 才能到达。
为了传输文件,我的正常例程如下所示:
l@L$ ssh -t a@A ssh -t b@B ssh r@R
r@R$ # do some stuff till I find out I want to copy file x to L
然后我打开一个新终端
l@L ssh a@A
a@A ssh b@B
b@B scp r@R:PATH_TO_FILE a@A:TEMP
b@B <ctrl-D> to close
a@A scp TEMP r@R l@L:FINAL_DESTINATION
以及scp
我所有跃点的文件。
我想知道是否有一个 shell 扩展或程序允许直接从 R 复制文件。类似于通过管道 stdout@R 到 stdin@L 来捕获它。它不必非常高效。由于大多数时候我的文件都很小(<100kB),但它需要支持二进制。
答案1
您可能需要查看ssh
的ProxyCommand
配置,它可以使工作更加无缝,并且适用于 shell、SFTP、隧道以及您可能希望通过 ssh 代理的任何其他内容。
假设您有以下三个主机:
workstation.example.com
- 这是您正在操作的机器proxy.example.com
- 这是您路由 SSH 流量的机器endpoint.example.com
- 这是您希望流量最终到达的地方
在~/.ssh/config
on 中workstation
,添加以下内容:
Host endpoint
User WorkstationUser # set this to the username on the workstation host
HostName endpoint.example.com
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
在proxy
主机上,确保nc
已安装 (netcat)。
然后,在 上workstation
,您可以ssh endpoint
或sftp endpoint
并且您将通过代理主机透明地代理到该计算机。