Yohai Magan Asked: 2019-08-26 04:05:27 +0800 CST2019-08-26 04:05:27 +0800 CST 2019-08-26 04:05:27 +0800 CST 如何从只能通过 SSH 连接到另一台主机的主机下载文件? 772 我想从我的办公室电脑下载文件到我的笔记本电脑。 我可以通过 SSH 将我的办公室机器连接到组织服务器,然后从服务器通过 SSH 连接到我的办公室机器。 组织服务器接受的唯一命令是 ssh、ssh1 和 ssh2。 如何通过服务器将文件从我的办公室(远程)机器下载到我的笔记本电脑(本地)机器中? ssh scp 8 个回答 Voted Martin Prikryl 2019-08-26T04:55:17+08:002019-08-26T04:55:17+08:00 如果您在本地有最近的 OpenSSH (8.0) ,您可以使用-J(jump) 开关: scp -J user@intermediate user@target:/path 对于旧版本(但至少为 7.3),您可以在命令行上使用ProxyJump指令: scp -o ProxyJump=user@intermediate user@target:/path 或在ssh_config文件中,正如@Ángel 的回答所示。 还有其他选项,例如ProxyCommand或端口转发,您甚至可以在更旧版本的 OpenSSH 上使用它们。OpenSSH是否支持多跳登录? Best Answer Ángel 2019-08-26T16:21:54+08:002019-08-26T16:21:54+08:00 前面的答案提到了如何使用 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,让所有主机都以这样的方式结束,并通过特定的堡垒,它将适用于所有主机。一旦配置正确,进行一跳连接或二十跳连接之间的唯一区别就是连接时间较慢。 Joshua 2019-08-27T08:00:52+08:002019-08-27T08:00:52+08:00 有时我们可以只使用管道。那个时间就是今天。 ssh -A user@host1 ssh user@host2 cat filename > filename 你也可以上传 ssh -A user@host1 ssh user@host2 cat \\\> filename < filename 是的,还有其他涉及代理等的解决方案,但知道如何做到这一点很有用。 RalfFriedl 2019-08-26T05:33:32+08:002019-08-26T05:33:32+08:00 使用ProxyJump配置: ProxyJump 将 一个或多个跳转代理指定为 [user@]host[:port] 或 ssh URI。多个代理可以用逗号分隔并按顺序访问。设置此选项将导致 ssh(1) 连接到目标主机,方法是首先与指定的 ProxyJump 主机建立 ssh(1) 连接,然后从那里建立到最终目标的 TCP 转发。 scp -o ProxyJump=user@intermediate user@target:/path jick 2019-08-28T08:45:01+08:002019-08-28T08:45:01+08:00 有一个古老的协议叫做ZMODEM:现在很少有程序支持它,但是当它工作时,它会非常方便。 首先检查您的笔记本电脑的终端程序是否支持 ZMODEM。(例如,您可以配置 iTerm2(在 Mac 上)以支持 ZMODEM。此处提供示例脚本。) 在您的办公机器上,运行:sudo apt install lrzsz 现在您所要做的就是 ssh 到您的办公室机器,然后运行sz (filename). 该文件将通过您的终端下载。 Lukáš Viktora 2019-09-10T07:07:25+08:002019-09-10T07:07:25+08:00 用户ssh下的配置:~/.ssh/config Host * UserKnownHostsFile=/dev/null StrictHostKeyChecking=no ServerAliveInterval 300 ServerAliveCountMax 2 ForwardAgent yes Host jump server HostName server.company.org User root Host jump1 server1 HostName server1.dmz.company.org User root ProxyJump jump Host jump2 server2 HostName server.dmz2.company.org User root ProxyJump jump1 Host *.intranet.company.org User user ProxyJump jump2 您现在可以直接从内网服务器复制到3跳转服务器。 scp [email protected]:/home/user/ ./* 我更喜欢这个,因为不再需要使用 scp 指定跳转服务器 wuseman 2019-08-28T08:04:03+08:002019-08-28T08:04:03+08:00 通过 SCP -3: scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt Martin Verdejo 2020-07-14T17:51:41+08:002020-07-14T17:51:41+08:00 这对我有用: scp -o 'ProxyJump user@intermediate' user@target:/fiepath . .末尾的表示目标下载路径为当前文件夹
如果您在本地有最近的 OpenSSH (8.0) ,您可以使用
-J
(jump) 开关:对于旧版本(但至少为 7.3),您可以在命令行上使用
ProxyJump
指令:或在
ssh_config
文件中,正如@Ángel 的回答所示。还有其他选项,例如
ProxyCommand
或端口转发,您甚至可以在更旧版本的 OpenSSH 上使用它们。OpenSSH是否支持多跳登录?前面的答案提到了如何使用 ProxyJump 指令(在 OpenSSH 7.3 中添加)通过中间服务器(通常称为堡垒主机)进行连接,但仅将其作为命令行参数提及。
除非它是您将来不会连接的机器,否则最好将其配置为
~/.ssh/config
.我会放一个像这样的文件:
如果您使用的是不支持 ProxyJump 的早期版本的 OpenSSH,则可以将其替换为等效版本:
如果您的本地 ssh 版本是不支持的非常古老的版本
-W
:尽管最后一个需要
nc
安装堡垒机。ssh 的美妙之处在于您可以在文件上配置每个目标,它们会很好地堆叠。因此,您最终
office-machine
会在所有工具(ssh、scp、sftp...)上使用主机名,因为它们是直接连接的,它们将根据 ssh_config 确定如何连接。您还可以使用通配符Host *.internal.company.local
,让所有主机都以这样的方式结束,并通过特定的堡垒,它将适用于所有主机。一旦配置正确,进行一跳连接或二十跳连接之间的唯一区别就是连接时间较慢。有时我们可以只使用管道。那个时间就是今天。
你也可以上传
是的,还有其他涉及代理等的解决方案,但知道如何做到这一点很有用。
使用
ProxyJump
配置:有一个古老的协议叫做ZMODEM:现在很少有程序支持它,但是当它工作时,它会非常方便。
首先检查您的笔记本电脑的终端程序是否支持 ZMODEM。(例如,您可以配置 iTerm2(在 Mac 上)以支持 ZMODEM。此处提供示例脚本。)
在您的办公机器上,运行:
sudo apt install lrzsz
现在您所要做的就是 ssh 到您的办公室机器,然后运行
sz (filename)
. 该文件将通过您的终端下载。用户ssh下的配置:
~/.ssh/config
您现在可以直接从内网服务器复制到3跳转服务器。
scp [email protected]:/home/user/ ./*
我更喜欢这个,因为不再需要使用 scp 指定跳转服务器
通过 SCP -3:
这对我有用:
.
末尾的表示目标下载路径为当前文件夹