Bash Scripting,发送"注销"在ssh会话期间跳过命令

时间:2017-05-22 19:36:42

标签: bash ssh expect

基本上我连接到远程主机,验证,运行命令,注销。但是正在跳过注销命令。

/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;执行时跳过它?感谢任何反馈。

2 个答案:

答案 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"