基本上我连接到远程主机,验证,运行命令,注销。但是正在跳过注销命令。
/usr/bin/expect << EOD
spawn ssh $_host
expect "Password: ";
send "$_pass\r";
expect "$_host>";
send "sh arp | inc $_host2\r";
expect "$_host>";
send "logout\r";
EOD
echo "blah blah"
我得到的是arp命令的预期输出,但是,blah blah将进入远程主机的终端。似乎正在跳过注销命令,对于bash脚本来说有点新,但似乎期望不会立即看到&#34; $ _ host&gt;&#34;执行时跳过它?感谢任何反馈。
答案 0 :(得分:0)
我相信\r
(carrige return)应该是\n
(输入/换行)?
send "logout\r";
- &gt; send "logout\n";
如果这会有所帮助 - 我会在整个脚本中替换它..
暗示:
/usr/bin/expect << EOD
match_max 1000000
spawn ssh $_host
expect "Password: ";
send "$_pass\n";
expect "$_host>";
send "sh arp | inc $_host2\n";
expect "$_host>";
send "logout\n";
EOD
echo "blah blah"
答案 1 :(得分:0)
根本不在这里使用expect
。即使您必须从变量中获取密码,使用sshpass
来避免混合使用两种不同的语言(bash和TCL)。
SSHPASS="$_pass" sshpass -e "$_host" "sh arp | inc $_host2"