是否可以使用本地机器上的一个命令通过代理进行 scp ?

是否可以使用本地机器上的一个命令通过代理进行 scp ?

我有我的 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 .

解释

pcredstcreds在需要时代表您的代理和目标凭证(usernameusername:password等等)。

这是因为内置了类似 netcat 的功能,无需nc在中间主机上运行。使用ssh -W host:port设置到指定主机和端口的隧道并将其连接到 stdin/stdout,然后scp通过隧道运行。

中的%h和被外部命令中的目标主机和端口替换,以避免您重复它们。%pProxyCommandscp

为了更加方便,您可以在 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> .

好的,实际上是两个命令......

相关内容