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 (matthew@mastracci.com)
# 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 (matthew@mastracci.com)
# 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 传输文件的命令行工具进阶过程,后续如果我发现更好用的工具也会同步更新,如果你对这方面感兴趣的话~可以点个关注哦。

相关推荐
vortex56 天前
Windows 电源管理和 Shutdown 命令详解
windows·stm32·命令行
Hello阿尔法9 天前
最强文本编辑器 Vim 常用命令集锦
linux·敏捷开发·命令行
77xxx11 天前
mac在iTerm2中安装zsh
mac·命令行
Lethehong12 天前
保姆级教程 | 在Ubuntu上部署Claude Code Plan Mode全过程
linux·命令行
一只叫煤球的猫15 天前
让版本控制变简单:Jujutsu (jj、git威力加强版) 使用手册
git·程序员·命令行
止观止17 天前
快速了解命令行界面(CLI)的行编辑模式
emacs·命令行·vi·快捷键·cli·行编辑
IT成长日记1 个月前
【自动化运维神器Ansible】playbook命令行变量定义全流程解析
运维·自动化·ansible·变量·命令行·playbook
爱吃猪排1 个月前
基于 Paddle Inference 3.0 的高性能 OCR 服务实现
人工智能·命令行
GetcharZp1 个月前
终端丑拒?效率低?是时候让 Oh My Zsh 唤醒你的 Ubuntu 了!
ubuntu·命令行
不简说1 个月前
有Trae助力1天时间用Node搞了个SSH命令行工具!解放双手~
开源·node.js·命令行