我想将文件从办公室计算机下载到笔记本电脑。
我可以通过 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
是的,还有其他涉及代理等的解决方案,但知道如何做到这一点很有用。