如何从只能通过 SSH 连接到另一台主机的主机下载文件?

如何从只能通过 SSH 连接到另一台主机的主机下载文件?

我想将文件从办公室计算机下载到笔记本电脑。

我可以通过 SSH 将我的办公室计算机连接到组织服务器,然后从服务器通过 SSH 连接到我的办公室计算机。

组织服务器接受的唯一命令是 ssh、ssh1 和 ssh2。

如何通过服务器将文件从我的办公室(远程)计算机下载到我的笔记本电脑(本地)计算机中?

答案1

如果您有最新的 OpenSSH (8.0)本地,您可以使用-J(跳转)开关:

scp -J user@intermediate user@target:/path

对于旧版本(但至少 7.3),您可以使用ProxyJump指示,或者在命令行上:

scp -o ProxyJump=user@intermediate user@target:/path

或在ssh_config文件中,如 @Ángel 的答案所示。


还有其他选项,例如ProxyCommand端口转发,您甚至可以在旧版本的 OpenSSH 上使用它们。这些内容涵盖在OpenSSH 支持多跳登录吗?

答案2

前面的答案提到了如何使用 ProxyJump 指令(在 OpenSSH 7.3 中添加)通过中间服务器(通常称为堡垒主机)进行连接,但只是将其作为命令行参数提及。

除非它是您将来不会连接的机器,否则最好将其配置在~/.ssh/config.

我会放置一个如下文件:

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

如果您使用的是不支持 ProxyJump 的早期版本的 OpenSSH,您可以将其替换为等效版本:

ProxyCommand ssh -W %h:%p bastion-machine

如果您本地的 ssh 版本是非常古老的版本,不支持-W

ssh bastion-machine nc %h %p

尽管最后一项要求已nc安装堡垒机。

ssh 的优点在于您可以配置文件上的每个目标,并且它们会很好地堆叠。因此,您最终会office-machine在所有工具(ssh、scp、sftp...)上使用主机名,因为它们是直接连接,并且它们将根据 ssh_config 找出如何连接。您还可以使用通配符,例如Host *.internal.company.local使所有主机都以通过特定堡垒的方式结尾,并且它将适用于所有主机。正确配置后,进行一跳连接或二十跳连接之间的唯一区别是连接时间较慢。

答案3

有时我们可以只使用管道。那个时间就是今天。

ssh -A user@host1 ssh user@host2 cat filename > filename

你也可以上传

ssh -A user@host1 ssh user@host2 cat \\\> filename < filename

是的,还有其他涉及代理等的解决方案,但知道如何做到这一点很有用。

答案4

有一个古老的协议叫做调制解调器:现在很少有程序支持它,但是当它工作时,它会非常方便。

首先检查您的笔记本电脑的终端程序是否支持ZMODEM。 (例如,您可以配置 iTerm2(在 Mac 上)以支持 ZMODEM。示例脚本可用这里.)

在您的办公室机器上,运行:sudo apt install lrzsz

现在您所要做的就是 ssh 到您的办公室机器,然后运行sz (filename)​​.该文件将通过您的终端下载。

相关内容