我想将文件从办公室计算机下载到笔记本电脑。
我可以通过SSH将办公室计算机连接到组织服务器,然后通过SSH从服务器连接到办公室计算机。
组织服务器接受的唯一命令是ssh,ssh1和ssh2。
如何通过服务器从办公室(远程)计算机下载文件到笔记本计算机(本地)?
我想将文件从办公室计算机下载到笔记本电脑。
我可以通过SSH将办公室计算机连接到组织服务器,然后通过SSH从服务器连接到办公室计算机。
组织服务器接受的唯一命令是ssh,ssh1和ssh2。
如何通过服务器从办公室(远程)计算机下载文件到笔记本计算机(本地)?
Answers:
前面的答案提到了如何使用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
,使所有主机的结局都经过一个特定的堡垒,它将应用于所有主机。一旦正确配置,进行一跳连接或进行二十跳连接之间的唯一区别就是连接速度较慢。
如果您有最新的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的支持多跳登录?
ssh -J userA@orgserv userB@officecomp cat remote/path > local/path
scp
不支持-J
,它可能仍然足够支持该ProxyJump
选项。请尝试使用该选项的其他答案之一。
ssh
问题的答案,这些问题建议config
在简单的命令行选项足以完成任务的情况下针对特定主机修改您的主机。
-J user@intermediate
每次需要连接时都使用它。
有时我们可以只使用管道。那个时间是今天。
ssh -A user@host1 ssh user@host2 cat filename > filename
您也可以上传
ssh -A user@host1 ssh user@host2 cat \\\> filename < filename
是的,还有其他涉及代理的解决方案等,但是了解如何做到这一点很有用。
cat
!
用户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个跳转服务器从Intranet服务器进行复制。
scp user@server.intranet.company:/home/user/ ./*
我之所以这样,是因为不再需要使用scp指定跳转服务器
scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt
-3
选项被描述为“通过本地主机传输两个远程主机之间的副本”。虽然我相信这个问题规定本地主机无法访问“ remote2”。
-3
。但这假设您可以从中间计算机重新连接到第一台计算机。
-J
/ 相比,我看不出有任何优势JumpHost
。相反,它具有@Joe提到的限制。