美文网首页
macOs中iterm2使用expect远程lrzsz无法使用解

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

作者: 莴牛 | 来源:发表于2022-06-09 16:23 被阅读0次

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了。

相关文章

网友评论

      本文标题:macOs中iterm2使用expect远程lrzsz无法使用解

      本文链接:https://www.haomeiwen.com/subject/fyymmrtx.html