我写了一个小脚本来为sshfs提供密码,但由于某些原因,sshfs没有抓取密码。 有什么指针吗? (PS我知道ssh密钥更好/更安全,但我工作的政治会阻止在目标服务器上设置基于密钥的身份验证 - 叹息......)。 要终止密码,我试过\\ r \\ n \\ r \\ n \\ r ...
提示:本站收集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
-阿比
在 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.