有没有办法通过跳转服务器与远程机器建立SFTP连接来传输文件?

Is there a way to make an SFTP connection to a remote machine through jump server to transfer files?

我想知道是否有办法通过跳转服务器使用 SFTP 将文件发送到远程计算机。 正如您在下图中看到的,首先需要 SSH 连接,然后是 SFTP 连接。

我的主要问题出现在 SSH 连接之后,我的工作区发生了变化,我无法检索成功执行 SFTP 所需的文件。 我试过以下代码:

ssh jump-server-user@ip-jump-server 'echo "put /source/files /remote/files" | sftp -v remote-machine-user@ip-remote-machine'

但是不行。

我已经尝试使用 SFTP 连接执行像 pwd 这样的简单命令并且它有效所以我认为这里的问题是工作区如何变化。

可能会有一个更简单的解决方案,但我无法在跳转服务器-远程计算机连接上使用 SSH,而且我无法将本地文件存储在跳转服务器中以便稍后将它们发送到远程计算机。

如果您有最近的 OpenSSH (8.0) 本地,您可以使用 -J (jump) switch:

sftp -J jump-server-user@ip-jump-server remote-machine-user@ip-remote-machine

对于旧版本(但至少 7.3),您可以使用 ProxyJump directive:

sftp -o ProxyJump=jump-server-user@ip-jump-server remote-machine-user@ip-remote-machine

还有其他选项,例如 ProxyCommand 或端口转发,您甚至可以在更旧版本的 OpenSSH 上使用它们。这些都包含在 Does OpenSSH support multihop login?