背景:有一些服务器因为安全策略的关系,不能本地 ssh 直接访问,需要先访问跳板机,再从跳板机访问目标机器。如果我们要把本地文件上传到目标服务器,可以怎么做呢?
法一:最通俗的做法,通过 scp 命令,先将文件从本地同步到跳板机的目录中,再在跳板机上使用 scp 命令同步到目标服务器;
法二:了解 ssh 隧道(端口转发)用法的童鞋,会在本地使用如下命令分配一个监听端口 2120:
ssh -N -f -L 2120:目标机IP:22 root@跳板机IP -p 跳板机端口
再使用 scp 命令与目标服务器进行文件的上传下载操作
scp -r -P 2120 ~/Documents/iTool/appletest.tar.bz2 root@127.0.0.1:/tmp
法三:这是运维童鞋向我介绍的方法。我们工作机是 Mac,习惯使用 iTerm作为命令行工具。可以基于 lrzsz 工具,再利用脚本拓展 iTerm 功能,将远程上传下载的操作过程更加简便,傻瓜式。
脚本出处:https://github.com/mmastrac/iterm2-zmodem
找到iTerm2的配置项:iTerm2的Preferences-> Profiles -> Default -> Advanced -> Triggers;至于配置细节,脚本项目的 ReadMe 中已经描述得非常清楚了,这里原样拷贝如下:
Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked
Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked
实现的效果是(首先本地远程登录目标机):
上传:定位到某一目标机目录,输入“rz”,即会弹出本地文件选择框,将你选择的文件上传。
下载:定位到目标机目录,输入“sz filename1 filename2 … filenameN”,即会弹出本地选择框,你选择一个本地目录之后,文件将下载到该目录中。
以上,亲测好用。