从脚本中的远程主机到本地服务器的scp

时间:2018-10-23 20:38:57

标签: shell ssh command-line scp

我已经能够找到许多服务器跳跃和ProxyCommand的示例,但都与我的特定需求无关。

我想将文件从远程服务器传输到本地服务器。目前,我可以从local切换到jump,也可以从jump切换到distant(不能从本地直接切换到遥远)。然后,我可以从distant将文件复制回local。现在,我手动执行此操作:

从本地:ssh userJ@jump

然后从跳转:ssh userD@distant

然后远离远处:scp \path\file userL@local:\dest\path\

但是我希望能够在从本地运行的脚本中执行此操作。我将rsh密钥存储在适当的位置,以消除密码提示。我只是无法弄清楚单个命令的语法。

2 个答案:

答案 0 :(得分:1)

您是否必须将distant上的文件“推”回local

localdistant上简单地“拉”文件会更容易。

~/.ssh/config上设置local

[userL@local]# cat ~/.ssh/config
Host distant
HostName Distant
user userD
ProxyCommand ssh -A userJ@jump nc %h %p

使用ssh测试连接:

[userL@local]# ssh -A userD@distant    [or even:  ssh -A distant]
Last login: Tue Oct 23 16:05:59 2018 from jump
[userD@distant]# 

现在从distant中提取文件:

[userL@local]# scp userD@distant:/distantpath/distantfile /localpath/localfile
distantfile                100%  129KB 128.9KB/s   00:01
[userL@local]#

在上面的示例中,我使用ssh的代理转发将凭据从local传递到jump,最后是distant。您只需要在jumpdistant上预先填充授权密钥,代理转发才能起作用。

答案 1 :(得分:0)

我通常通过在~/.ssh/config文件中将ssh客户端配置为自动执行跳转来解决此问题:

Host distant-jump
  User userD
  Hostname distant
  ProxyCommand ssh -q -W %h:%p jump

Host jump
  User userJ

然后您可以:scp distant-jump:/path/file ./