macOs中iterm2使用expect远程lrzsz无法使用解决方案

lrzsz 原理

官方介绍:https://www.ohse.de/uwe/software/lrzsz.html

  • 下载文件
    在服务器上执行 sz(Send by ZMODEM),先在终端上输出 **B00000000000000,然后客户端在终端发送指令,表示拒绝,还是接收(接收的话,就在客户端运行 rz 指令与服务端交互)

  • 上传文件
    在服务器上执行 rz(Receive by ZMODEM),先在终端上输出 rz waiting to receive.**B0100000023be50,然后客户端发送指令,表示取消,还是上传(上传的话,在客户端运行 sz 命令与服务端交互)。

可以看到在上述流程中,对 Terminal 的要求就是,遇到特殊指令,触发对应的操作(执行本地命令)

由于 macOS 自带的 Terminal.app 不支持这个,所以网上大部分教程都是使用 iTerm2

安装lrzsz

brew install lrzsz

# 此时iterm2还不能使用rz、sz命令,必须安装两个脚本
cd /usr/local/bin
wget https://raw.githubusercontent.com/RobberPhex/iterm2-zmodem/master/iterm2-recv-zmodem.sh
wget https://raw.githubusercontent.com/RobberPhex/iterm2-zmodem/master/iterm2-send-zmodem.sh

# 赋予这两个文件可执行权限
chmod 755 /usr/local/bin/iterm2-*

设置 Iterm2 的 Tirgger 特性

# 拷贝以下键值复制进去即可
rz waiting to receive.\*\*B0100
\*\*B00000000000000
/usr/local/bin/iterm2-send-zmodem.sh
/usr/local/bin/iterm2-recv-zmodem.sh
image.png

问题升级

正常配置完成之后,我们使用ssh远程命令登录服务器就可以使用rz、sz命令,但是生产服务器我们常常会使用expect脚本登录,使用过程中发现无法使用rz、sz命令,解决方案如下
本地写个通用脚本如下,例如/tmp/expect.sh,并赋予可执行权限,expect脚本介绍

vi /tmp/expect.sh

# 脚本内容如下
#!/bin/sh
export LC_CTYPE=en_US
#expect脚本所在位置
filepath=$1
if [ -f $filepath ]; then
    expect $filepath
fi

# 修改文件可执行权限
chmod -R 755 /tmp/expect.sh

远程服务器expect脚本

vi /tmp/ssh.sh

# 脚本内容如下
#!/usr/bin/expect
set user root
set host 192.168.1.1
set password root@123

spawn ssh -A $user@$host
expect "*assword:*"
send "$password\r"

interact
expect eof
image.png

如图配置好,就可以远程服务器并使用rz、sz了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容