繁体   English   中英

在期望脚本中的密码提示符处返回而不是发送密码

Hitting a return at password prompt in expect script instead of sending password

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图在 bash 中有一个期望脚本来登录路由器,执行命令并将 output 存储在文本文件中。

#!/usr/bin/bash
FQDN=$1
LogFile=/tmp/Router_${FQDN}.txt
> $LogFile
expect -d  <<EOF > $LogFile
set timeout 20
set FQDN [lindex $argv 0]
set Username "user"
set Password "***$$$"
spawn ssh $Username@$FQDN
expect "*assword:"
send "$Password\r"
expect "#"
send "some command\r"
expect "#"
send "exit\r"
sleep 1
exit
expect eof
EOF
cat $LogFile

我收到以下错误消息。

system personnel  =\r\r\n= may provide the evidence of such monitoring to law enforcement officials.    =\r\r\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==\r\r\npassword: "
send: sending "\n" to { exp6 }

expect: does "" (spawn_id exp6) match glob pattern "#"? no
password:
Enter old password:

根据错误,脚本似乎正在点击 {return} 键“\r”,该键不会在密码提示时发送。

一旦我 ssh 我没有退货。 不知道我哪里出错了。


这是我的期望脚本,它工作正常。 只有当我在 bash 脚本中对此进行编码时,它才会失败。

#!/usr/bin/expect -f

set timeout 20
set FQDN [lindex $argv 0]
set Username "user"
set Password "***$$$"
spawn ssh -o "StrictHostKeyChecking no" $Username@$FQDN
expect "*assword: "
send "$Password\r"
expect "#"
send "some command\r"
expect "#"
send "exit\r"
sleep 1
exit

-阿比

1 个回复

在 here-doc 中, $Username$Password等变量正在由 shell 扩展,因此它们不被视为Expect扩展的文字。 由于没有在任何地方设置这些 shell 变量,因此它们正在扩展到 null 字符串。 结果,它正在执行ssh @$FQDN并发送一个空密码。

您需要转义$以便Expect可以处理它们。

您也不需要在 Expect 脚本中set FQDN行,因为您为此使用了 shell 变量。

#!/usr/bin/bash
FQDN=$1
LogFile=/tmp/Router_${FQDN}.txt
> $LogFile
expect -d  <<EOF > $LogFile
set timeout 20
set Username "user"
set Password "***$$$"
spawn ssh \$Username@$FQDN
expect "*assword:"
send "\$Password\r"
expect "#"
send "some command\r"
expect "#"
send "exit\r"
sleep 1
exit
expect eof
EOF
cat $LogFile

或者您可以将它们设置为 shell 变量,就像FQDN一样。

#!/usr/bin/bash
FQDN=$1
Username=user
Password="***$$$"
LogFile=/tmp/Router_${FQDN}.txt
> $LogFile
expect -d  <<EOF > $LogFile
set timeout 20
spawn ssh $Username@$FQDN
expect "*assword:"
send "$Password\r"
expect "#"
send "some command\r"
expect "#"
send "exit\r"
sleep 1
exit
expect eof
EOF
cat $LogFile
1 sshfs在expect脚本中没有使用密码

我写了一个小脚本来为sshfs提供密码,但由于某些原因,sshfs没有抓取密码。 有什么指针吗? (PS我知道ssh密钥更好/更安全,但我工作的政治会阻止在目标服务器上设置基于密钥的身份验证 - 叹息......)。 要终止密码,我试过\\ r \\ n \\ r \\ n \\ r ...

2 在expect脚本中输入sudo密码

我在bash脚本中有一个期望代码,就像这样 在执行another_script.sh期间,我被提示输入sudo密码,但我不能,因为我很期待。 为了让我能够输入sudo密码并让脚本继续运行,我该怎么办? 我不想在脚本中保存密码然后将其传递给expect,但我希望能够输入密码。 ...

3 即使密码在脚本中,SFTP也会提示输入密码

我正在尝试使用SFTP将文件从一台服务器传输到远程服务器。 客户端尚未准备好密钥设置,因此我在该论坛上经历了与SFTP相关的其他问题,并尝试了所有问题。 但对于我来说仍然无法正常工作。 我的剧本:- ...

2013-05-04 03:26:48 3 28658   sftp
4 使用Expect脚本隐藏密码

我使用脚本登录到电源代理,并通过网络连接了ssh。 据我所知,所有其他信息都会被跟踪。 我对此表示同意。 我的问题是如何隐藏密码,如下所示: 我尝试将密码存储在/home/casper/.password ,然后在其上执行chmod 400,然后将其放入{send "/home ...

5 Ansible 如何使用 expect 回答密码重置提示?

我在使用 expect 来响应剧本中的密码更改提示时遇到了问题。 我不确定我的实际问题是期望还是采购 env 文件 我收到的错误与 env_vars 文件的来源有关,但我在其他地方使用了这种模式,没有问题。 除了可能设置 /usr/bin/expect arg 之外,我不确定是什么导致了这种情况 ...

2020-07-28 07:41:41 3 258   ansible
6 使用Expect的密码提示不起作用

我需要从键盘接受一个密码,该密码包含至少一个数字,至少一个大写字母,至少一个小写字母和可选符号#&-我编写了以下代码。 它总是超时,但是没有检测到密码...谁能帮忙 我已经编辑了代码,现在只有在第一次尝试以正确的格式输入密码时才可以使用...如果第一次尝试输入的格式不正确,则期望将等待 ...

8 在 Expect 中询问可能缓存的密码

我想做一些类似的事情 来自期待。 此命令在终端上运行良好,可以返回缓存的密码(如果它已经存在)或提示输入然后缓存它。 但是,我还没有想出一种方法让它与expect交互。 不产生与之交互的输出,并且 说": no such file or directory...这意味着产生的进程甚至没有 ...

9 如何向Perl的Expect.pm开始的命令发送密码?

我有以下脚本, 现在我的问题是我不知道如何使用Expect在$cmd执行后发送密码,是时候输入密码了。 由于我们使用HPUX, $stdin在这种情况下不起作用。 感谢任何指导和样本,阅读Expect文档不会对我产生任何影响。 ...

10 使用Expect向VPN连接发送密码

我正在尝试使用Expect将密码发送到我的VPN连接,但是密码发送不正确。 我使用以下脚本: 我收到错误消息:“ SNX:连接异常终止。” 这意味着密码不正确 尽管如果我手动输入密码来输入cmd,它仍然可以工作。 谢谢 ... ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM