linux ssh scp 使用跳板机 访问 远程服务器
处于防火墙内部的主机往往需要通过跳板机才能访问互联网上的远程服务器。如下图所示:
+--------------------+ +---------------------+ +------------------+
| | | | | |
| YOU(本地主机) |------>+ HOST1(跳板机) +---->+ HOST2(远程主机)|
| | | | | |
+--------------------+ +---------------------+ +------------------+
你通过HOST1作为跳板机,访问远程主机HOST2
单跳板机
通过 ssh 的 -J
参数可以指定跳板机,比如
ssh -J host1 host2
若需要指定用户名和端口号则可以扩充为:
ssh -J user1@host1:port1 user2@host2:port2
多跳板机
若访问远程主机需要经过多个跳板机,则将多个跳板机的信息用逗号(,)来连接,比如
ssh -J user1@host1:port1,user2@host2:port2 user3@host3:port3
将跳板机信息存入 ssh_config中
从OpenSSH7.3开始,我们可以通过 ssh_config
中的 ProxyJump
指令指定跳板机,比如
Host host3
HostName XXX.XXX.XXX.XXX
ProxyJump user1@host1:port1,user2@host2:port2
这样以后要访问host3,只需要直接 ssh host3
就行了,无需指定跳板机信息
SCP通过跳板机登录远程服务器
既然可以SSH通过跳板服务器登录远程服务器,那如果我们使用SCP进行上传下载是否也可以使用相同的方式连接呢。
摸索了一下,发现还真的可以,格式如下:
scp -P endpoint_server_port -o 'ProxyJump user1@jump_server_ip_or_name -p port' file.txt user2@endpoint_server_ip_or_name:~
举个例子就是:
scp -P 22 -o 'ProxyJump user@1.2.3.4 -p 22' file.txt user2@5.6.7.8:~
省略一些参数就是:
scp -o 'ProxyJump user@1.2.3.4' file.txt user2@5.6.7.8:~
其余跟普通scp命令一致,没啥特别的。
下载目录
scp -o 'ProxyJump user1@host1' -r user2@host2:/opt/dir ~/dir
-r 递归复制整个目录
这种方法除了适用我上述说的本地无法直接访问目的服务器的方法之外,还能作为一个中转节点对文件上传下载进行加速,比如说,本地下载目的服务器上一个大文件,而本地到目的服务器网络并不是很理想,就可以找一个中转服务器加速本地到目的服务器之间的网络连接。
还没有评论,来说两句吧...