有一个漂亮的小工具叫做
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/