我需要在必须先进行SSH然后必须进行telnet的系统中进行连接。然后,我可以开始执行一些命令。 我正在为telnet部分苦苦挣扎。你能告诉我怎么做吗?除了产生以外,还有其他选择吗?谢谢
#!/bin/bash
cat command.sh | sshpass -p 'passowrd' ssh -q -o StrictHostKeyChecking=no root@pc1;
然后输入我的命令。sh
#!/bin/bash
spawn telnet pc_modem
expect "login:"
send "root"
expect "Password:"
send "youyou"
cliclient GetMonitoringData;
答案 0 :(得分:0)
在这种情况下,shebang无效*。您正在将脚本文件的内容传递给ssh以逐行执行,就好像每一行都是单独的命令,这些命令将由Shell而不是expect
解释。
尝试将command.sh
更改为以下内容:
# no shebang here
/bin/expect -f - <<<'spawn telnet pc_modem
expect "login:"
send "root"
expect "Password:"
send "youyou"
cliclient GetMonitoringData;'
这会将expect
脚本作为 here字符串发送到期望的STDIN。如果您在expect
脚本中使用变量,则可能需要更改引号或转义符,具体取决于它们是shell变量还是TCL变量以及替换发生的位置。
*当文件被标记为可执行文件并通过使用文件名调用文件来运行时,内核使用shebang来选择程序来解释文件的内容。通过显式命名解释器(例如sh run_me
或ssh user@host run_me_there
)运行文件时,shebang不会播放。
答案 1 :(得分:0)
我找到了答案,并且效果很好:
/bin/expect <<<'spawn telnet pc_modem
expect "login:"
send "root\r"
expect "Password: ";
send "youyou\r"
send "yourcommand1\r"
send "yourcommand2\r"
expect eof
'