ssh 文件传输:你应该掌握的几种命令行工具

这篇文章主要分享一下我使用过的 ssh 传输文件的进阶路程,从 scp -> lrzsz -> trzsz,希望能给你带来一些帮助~

scp

scp 命令可以用于在 linux 系统之间复制文件,具体的语法可以参考下图

其实使用起来也还比较方便, 比如下面的例子,share目录下有一个1.txt文件,如果要使用 scp 命令来传到服务器上的话,需要执行 scp 1.txt root@服务器ip:/home/share注意将@后的地址替换成你自己的服务器 ip,分号后的路径是你要上传到的服务器目录

下载文件也可以使用 scp 来操作,比如我们的服务器上有一个 test.js文件,我们想把它下载到本地,那么可以执行这行命令 scp root@服务器ip:/home/share/test.js . 就可以了

用了一段时间后发现,scp 存在一些不便利的地方,比如我现在正在服务器上查看文件,这时想要把日志文件下载到本机,就要再开一个 shell,然后复制文件目录,再执行 scp 命令,太麻烦了,不适合我~

lrzsz

第二个要介绍的是 lrzsz 命令,我使用的终端工具是 iterm2, 所以需要进行一些配置才能使用,具体的步骤如下

本地安装 lrzsz命令

bash 复制代码
brew install lrzsz

进入 /usr/local/bin目录下,新增下面两个文件

iterm2-send-zmodem.sh

sh 复制代码
#!/bin/bash
# Author: Matt Mastracci ([email protected])
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required 
# Remainder of script public domain

osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
	FILE=$(osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script ("echo "&(quoted form of POSIX path of thefile as Unicode text)&"")")
else
	FILE=$(osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script ("echo "&(quoted form of POSIX path of thefile as Unicode text)&"")")
fi
if [[ $FILE = "" ]]; then
	echo Cancelled.
	# Send ZModem cancel
	echo -e \x18\x18\x18\x18\x18
	sleep 1
	echo
	echo # Cancelled transfer
else
	/opt/homebrew/bin/sz "$FILE" --escape --binary --bufsize 4096
	sleep 1
	echo
	echo # Received "$FILE"
fi

iterm2-recv-zmodem.sh

sh 复制代码
#!/bin/bash
# Author: Matt Mastracci ([email protected])
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required 
# Remainder of script public domain

osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
	FILE=$(osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script ("echo "&(quoted form of POSIX path of thefile as Unicode text)&"")")
else
	FILE=$(osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script ("echo "&(quoted form of POSIX path of thefile as Unicode text)&"")")
fi

if [[ $FILE = "" ]]; then
	echo Cancelled.
	# Send ZModem cancel
	echo -e \x18\x18\x18\x18\x18
	sleep 1
	echo
	echo # Cancelled transfer
else
	cd "$FILE"
	/opt/homebrew/bin/rz --rename --escape --binary --bufsize 4096 
	sleep 1
	echo
	echo
	echo # Sent -> $FILE
fi

然后打开 iterm2 的配置,Profiles -> Defualt -> Advanced -> Triggers -> Edit -> 新增

第一条是用于下载文件的命令 sz

bash 复制代码
Regular expression:**B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh

第二条是用于接受文件的命令 rz

bash 复制代码
Regular expression:**B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh

结果如下图

操作完成后本地就配置好了,接下来再到服务器上去安装 lrzsz命令,我使用的是 centOS 服务器,可以执行 yum install lrzsz就好了

等执行完毕后,就可以在服务器上上传和下载文件了,比如上传文件,在服务器上输入 rz命令后,会自动弹出文件选择框,然后选择你要传输的文件就可以了

传输成功显示应该是这样的

在使用了一段时间后,我又发现了一些不爽的点,比如:上传、下载大文件时,没法看进度,而且感觉速度也比较慢,另外不支持 tmux 终端等。经过一番查找,发现了trzsz命令。

trzsz

项目地址:trzsz.github.io/。trzsz 是一个简单的文件传输工具,而且兼容 tmux,一看介绍,这不就是我想要的吗?果断安装尝试一下

本地安装 trzsz命令

bash 复制代码
brew install trzsz

服务器安装 trzsz命令,这里我使用的是 python 来安装

bash 复制代码
python3 -m pip install --upgrade trzsz

这样就好了,然后在使用 ssh 的时候在命令前加上 trzsz就可以了

比如:

bash 复制代码
trzsz ssh roo@服务器ip

进入服务器后,我们可以使用 trz命令来上传文件,执行后,同样会自动弹出文件选择框,然后选择你要上传的文件就可以了,这里我选择了一个 jdk 的大文件

然后就能看到上传进度了

下载文件也很简单,直接输入 tsz 文件名,然后选择本地要保存的目录就可以了。

总结

本篇文章记录了我使用 ssh 传输文件的命令行工具进阶过程,后续如果我发现更好用的工具也会同步更新,如果你对这方面感兴趣的话~可以点个关注哦。

相关推荐
x-cmd2 天前
[250401] OpenAI 向免费用户开放 GPT-4o 图像生成功能 | Neovim 0.11 新特性解读
人工智能·gpt·文生图·openai·命令行·neovim
Bigger6 天前
Mac 命令行及 Linux 使用指南与示例
linux·前端·命令行
x-cmd8 天前
x-cmd install | Wuzz - Web 开发与安全测试利器,交互式 HTTP 工具
前端·网络协议·安全·http·浏览器·测试·命令行
ZhongyiChen12 天前
Git 是实现 Windows 之 Linux 开发环境的利器
git·操作系统·命令行
itachi-uchiha16 天前
Huawei 鲲鹏(ARM/Aarch64)服务器安装KVM虚拟机(非桌面视图)
kvm·命令行·无桌面
Bigger20 天前
终端美化神器——打造高颜值命令行输出
前端·node.js·命令行
Aska_Lv23 天前
生产redis数据出问题了_shell脚本刷redis数据
后端·命令行
我不叫王小红25 天前
还在用默认的主题?通过 Oh my push 美化你的 Powershell
shell·命令行
江禾藜1 个月前
rgin命令行工具--一键生成gin框架的开发脚手架
go·gin·命令行
沢田纲吉2 个月前
Linux 学习加油站(1)
linux·操作系统·命令行