scripting - 帮我用expect通过ssh驱动Zmodem

标签 scripting ssh interactive expect zmodem

有一个漂亮的小工具叫做
zssh这使得使用lszrz使用传输文件的实用程序
zmodem
通过现有的 ssh
联系。出奇的方便……不过好像应该
能够使用 expect 完成同样的事情.我得到了
这么远……

#!/usr/bin/expect -f

spawn ssh $argv
set ssh_spawn_id $spawn_id
send_user "ssh is: $ssh_spawn_id\n"

interact -o "\030B0000" {
    send_user "\nStarting zmodem receive.\n"

    spawn rz -v
    set rz_spawn_id $spawn_id
    send_user "rz is: $rz_spawn_id\n"

    while {1} {
        expect {
            eof break

            -i $rz_spawn_id -re .+ {
                send -raw -i $ssh_spawn_id $expect_out(buffer)
            }
            -i $ssh_spawn_id -re .+ {
                send -raw -i $rz_spawn_id $expect_out(buffer)
            }
        }
    }

    send_user "\nFinished zmodem receive.\n"
    set spawn_id $ssh_spawn_id
}

本次启动 rz看到一个 ZRQINIT 后框架,它显然连接rz到 ssh session ,但它不起作用。 rz说:
Retry 0: Bad CRCe.**B0100000023be50
Retry 0: Bad CRC**B0600000023d984
Retry 0: Bad CRC**B0600000023d984

……等等。

有没有办法使这项工作?谢谢!

最佳答案

我发现使用 -e/--escape (escape all control characters) 发送方的选项有助于解决启动 zmodem 连接的一些问题。

例如:

发送文件:

sz -e somefile.ext

接收文件:
rz -e

这对于通过 IPMI sol (serial-over-lan) 链接传输文件非常方便。

iterm2-zmodem在 OSX 和 Linux 上的 Konsole 上与 Zmodem 集成。

关于scripting - 帮我用expect通过ssh驱动Zmodem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018479/

相关文章:

java - fork 两个交互式 bash 进程会导致父进程停止或第二个 bash 进入后台

ssh - 在 Docker 镜像上设置 ssh 公钥

azure - SSH 到 aks Windows 节点 : azureuser@(windows node internal ip address)'s password

legend - Altair - 交互式图例仅显示选定的元素

javascript - 通过 Javascript 显示或隐藏 PDF 中的元素

python - Paramiko exec_command 失败, 'NoneType' 对象不可迭代

bash:jq 选择中的日期比较和结果导向

python - 将批处理代码转换为 python 脚本

javascript - 使用 Ant scriptfilter 计算行数

linux - 当由 cron 运行时,shell 脚本中使用的环境变量在日志文件中显示为空白