expect下使用rz-sz

rz和sz是lrzsz的提供的一个在xNIX下上传下载的工具。基于zmodem协议。但是不是所有ssh客户端都支持。比如putty, windows terminal都不支持。

但是mac下的iterm2是支持的。

https://github.com/intnet/iTerm2-rzszmodem

基本上就按照这个就可以了。我记得我之前也是这样做,然后就没有问题的,不过这次却完全不行,再小的文件都不行,使用 -e 参数也不行。

然后再ps看了下,进程确实在执行,但是就是等了好久也没有效果。

由于我自己一般因为都登录跳板机来进行的,而跳板机又都有MFA二次认证的,为了方便就写了一个expect脚本来进行了。

1
alias jump="expect /Users/timo/.ssh/jump.sh"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/expect
set mfa [exec python3 /Users/timo/.ssh/pyopt.py]
set timeout 20
trap {
set rows [stty rows]
set cols [stty columns]
stty rows $rows columns $cols < $spawn_out(slave,name)

} WINCH
spawn ssh [email protected] -pXXXX
expect "*MFA auth*"
send "$mfa\r"
expect "Opt*"
interact
1
2
3
4
# -*- coding: utf-8 -*-
import pyotp
totp = pyotp.TOTP('MFA-CODE')
print (totp.now())

为了验证一下,那就手动ssh到跳板机试试,发现这次就可以正常rz sz了。那看来就是expect的问题,可我又必须用expect啊。

发现可以把expect脚本包装成sh脚本来执行,这样就可以了。

1
2
3
4
5
#!/bin/bash
filepath=$1
if [ -f $filepath ]; then
expect $filepath
fi
1
alias jump="/Users/timo/.ssh/expect.sh /Users/timo/.ssh/jump.sh"

然后再source一下,再测试一遍发现完全正常了。