使用 SFTP/SCP 从服务器获取文件,需要用户切换跳转主机

使用 SFTP/SCP 从服务器获取文件,需要用户切换跳转主机

我正在尝试找到一种即时方法,通过服务器 A 连接防火墙后面的服务器 B,并在服务器 B 和我的笔记本电脑之间交换文件。

正常情况下,ssh登录流程是这样的。

  1. 我的笔记本电脑->中间人:

mylaptop: ssh myUser@ServerA(密码验证)

  1. 中间人->目的地:

ServerA: sudo -u sharedUser ssh ServerB(无密码)

我必须使用受限帐户登录服务器 A我的用户首先,切换我的用户共享用户在服务器 A 上,因为只有共享用户我有服务器 B 的密钥。我没有服务器 B 的密钥,也没有权限使用 myUser 进行读写服务器 A

我已经尝试过OpenSSH/Cookbook/代理和跳转主机,但是它不起作用,因为服务器 A 的 myUser 没有用于登录服务器 B 的密钥(服务器 A 上的 sharedUser 有)。

      ssh                 sudo su                   ssh
Me -----------> myUser@A ---------> sharedUser@A -----------> B
       ^                     ^                        ^
   password              switch user        using sharedUser@A's
authentication                                     ssh key

问题:

  1. 我想知道是否有办法通过 SSH 代理“直接”连接到服务器 B,或者其他方法?

  2. 有没有一种方法可以通过多次跳转和用户名更改,使用 SFTP/SCP 等与服务器 B 远程交换文件?

谢谢!

答案1

你可以像这样mylaptop运行命令: 。所以这应该是可能的:ServerAssh myUser@ServerA some_command

ssh -t myUser@ServerA sudo -u sharedUser ssh ServerB

通常情况下ssh,运行的程序some_command不会分配伪终端,它只会传递 stdin、stdout 和 stderr。如果您想要像ssh ServerB在 上手动输入一样进行交互ServerA,则需要伪终端。因此-t

sudo如果“内部”ssh要求输入密码,伪终端也会很有用。

您说您想传输文件。“内部”ssh可以在 上运行命令,ServerB就像“外部”ssh在 上运行命令一样ServerA。命令可能是cat,文件可以通过这种方式传输(流式传输)。在这种情况下,您不应该使用-t,它只会破坏流。幸运的是,您不需要密码,因此使用与否sudo -u sharedUser ssh ServerB没有冲突。-t

要从中提取文件ServerB

>/local/file ssh myUser@ServerA sudo -u sharedUser 'ssh ServerB "cat </server/b/path/to/file"'

要将文件推送至ServerB

</local/file ssh myUser@ServerA sudo -u sharedUser 'ssh ServerB "cat >/server/b/path/to/file"'

cat正确的引用对于在影响cat(不是ssh或)之后进行重定向非常重要sudo

相关内容