【问题标题】:scp from distant host to local server in a script脚本中从远程主机到本地服务器的 scp
【发布时间】:2019-03-28 04:35:24
【问题描述】:

我已经找到了很多服务器跳转和 ProxyCommand 的示例,但没有一个与我的特定需求相关。

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

来自本地:ssh userJ@jump

然后从跳转:ssh userD@distant

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

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

【问题讨论】:

    标签: shell ssh command-line scp


    【解决方案1】:

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

    local 上从distant 简单地“拉”文件会更容易。

    local 上设置~/.ssh/config

    [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 上预先填充授权密钥,代理转发就会起作用。

    【讨论】:

      【解决方案2】:

      我通常通过在~/.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 ./

      【讨论】:

        猜你喜欢
        • 2012-06-05
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 2018-01-29
        • 2014-11-24
        • 1970-01-01
        • 2013-08-16
        • 2019-12-31
        相关资源
        最近更新 更多