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"
基本上我连接到远程主机,验证,运行 命令,注销。但是正在跳过注销命令。
/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"