Bash 脚本,发送 "logout" 命令在 ssh 会话期间被跳过

Bash Scripting, send "logout" command being skipped during ssh session

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

/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 脚本编写来说有点新,但似乎 expect 在执行时不会立即看到“$_host>”并跳过它?感谢任何反馈。

我认为 \r(carrige return)应该是 \n(输入/换行)?

send "logout\r"; -> 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"

根本不要在这里使用 expect。即使您 必须 从变量中获取密码,为此目的使用 sshpass 也会避免混合使用两种不同的语言(bash 和 TCL)。

SSHPASS="$_pass" sshpass -e "$_host" "sh arp | inc $_host2"