如何在脚本中使用telnet?

时间:2019-05-26 19:02:26

标签: bash scripting telnet

我需要在必须先进行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;

2 个答案:

答案 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_messh 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
'