使用 SSH 通过带有证书转发的隧道复制文件

使用 SSH 通过带有证书转发的隧道复制文件

我需要找到一种方法,通过具有公共 IP 的服务器将文件从位于专用 NATted 网络上的mymachine服务器复制。 NAT 后面的机器只有 的证书,因此需要将证书从via转发到priv-serverpub-serverpriv-serveruser@mymachinemymachinepub-serverpriv-server

因此,为了仅使用一个命令即可通过 SSH 登录,我使用:

$ ssh -tA user@pub-server 'ssh user@priv-server'

——这效果非常好。证书从via转发mymachine到,一切都设置得很好。priv-serverpub-server

现在,我通常会用于scp任何文件传输需求,但我不知道如何将所有隧道信息传递到scp.

答案1

相反,使用更低级的形式来复制文件,方法是cat在本地复制文件,并将其通过管道传输到远程cat > filename命令中priv-server

$ cat file1.txt | ssh -A user@pub-server 'ssh user@priv-server "cat > file1.txt"'

或压缩:

$ gzip -c file1.txt | ssh -A user@pub-server 'ssh user@priv-server "gunzip -c > file1.txt"'

摘自man ssh

-A 启用身份验证代理连接的转发。这也可以在配置文件中针对每个主机进行指定。

-t 强制伪 tty 分配。这可用于在远程计算机上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个 -t 选项强制 tty 分配,即使 ssh 没有本地 tty。


我最初不知道答案,但经过一夜好眠并写下这个问题后,我发现我最初尝试的命令存在问题,修复了它,并且成功了。但由于这似乎是一件有用的事情,所以我决定分享答案。

答案2

如果您尝试使用本机,这会很简单sshfs这是最近添加的。

安装sudo apt-get install sshfs

sshfs -ttA user@pub-server ssh user@priv-server

这会发挥魔法。

欲了解更多信息,请参阅此处Linux 杂志

答案3

不要想知道如何处理复杂的 SSH 转发链,而是将问题分开。

  1. 配置您的系统以透明访问每个主机。这是在您的操作中一劳永逸地完成的~/.ssh/config文件。

    教 SSH使用一台机器作为另一台机器的代理,声明一个ProxyCommand.

    Host priv-server
    User user
    ProxyCommand ssh -W %h:%p -t user@pub-server
    

    启用连接共享。这允许多个客户端实例使用同一通道,从而节省连接建立时间。在顶部.ssh/config(任何行之前Host)添加

    ControlMaster auto
    ControlPath ~/.ssh/control:%h:%p:%r
    
  2. 如果可以,请设置密钥身份验证和代理转发,以便身份验证完全透明。如果不能,那么您需要在某些主机上进行交互式身份验证,只需每个会话或在网络故障后进行一次身份验证。打开主连接。

    ssh -Nf priv-server
    
  3. 正常调用ssh(或scpsftpsshfsrsync等)。

相关内容