我有我的 local.machine、proxy.machine 和 target.machine。local.machine 与 target.machine 没有直接联系,但需要通过 proxy.machine。
我想将文件从 target.machine 复制到 local.machine。是否可以只使用 local.machine 中的一个命令来完成此操作?
答案1
你可以这样做代理跳转将其放入您的~/.ssh/config
文件中(如果文件不存在则创建该文件):
Host target.machine
User targetuser
HostName target.machine
ProxyJump [email protected]
保存文件后,你可以使用
ssh target.machine
任何时候您想连接都可以。Scp 也可以工作,因为它也尊重 ssh 配置文件。如果您使用 GNOME 并想使用 GUI,Nautilus 也可以。
旧答案(适用于旧版本的 OpenSSH)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
答案2
现在你可以用一行代码来做这件事,无需 nc
任何地方:
scp -o "ProxyCommand ssh [email protected] -W %h:%p" [email protected]:file .
解释
pcreds
并tcreds
在需要时代表您的代理和目标凭证(username
、username:password
等等)。
这是因为内置了类似 netcat 的功能,无需nc
在中间主机上运行。使用ssh -W host:port
设置到指定主机和端口的隧道并将其连接到 stdin/stdout,然后scp
通过隧道运行。
中的%h
和被外部命令中的目标主机和端口替换,以避免您重复它们。%p
ProxyCommand
scp
为了更加方便,您可以在 ssh 配置中配置代理:
Host target.machine
ProxyCommand ssh [email protected] -W %h:%p
从那时起就去做
scp [email protected]:file .
*自 OpenSSH 5.4 起 -2010 年 3 月发布
答案3
如果您不介意使用 rsync 而不是 scp,则可以使用以下单行命令:
rsync -v --rsh "ssh proxy.machine ssh" target.machine:/remote/file /local/dir/
(您需要无密码访问代理机器)
答案4
$ ssh -f -N -L <localport>:<target.machine:port> [email protected]
$ scp [email protected]:/remote/file -P <localport> .
好的,实际上是两个命令......