我有一个期望脚本,需要登录到远程系统并执行命令。这个脚本除了向root帐户提供密码之外。根密码包含一个美元符号,我似乎无法工作。这里是我已经证实了这项工作提供凭证,其密码不包含美元符号代码时
#!/usr/bin/expect
set timeout 3
set username "root"
set password "Pas$word"
set hostname [lindex $argv 0]
log_user 0
send_user "\n#####\n# $hostname\n#####\n"
spawn ssh -q -o StrictHostKeyChecking=no [email protected]$hostname
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $hostname\n"; exit 1 }
"*assword"
}
send "$password\r"
expect {
timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1}
"*\$ "
}
send_user "\nPassword is correct\n"
expect "$ " { send "ls" }
,但我不能让它使用root帐户工作。它总是会产生Login failed. Password incorrect
超时错误。更改密码不是一个选项。我曾尝试在密码定义供应\
转义字符,像这样:
set password "Pas\$word"
我也得到了相同的结果...什么我做错了任何想法?
感谢
编辑 正如我所说的。我已经试图逃避$角色。但要澄清,我添加脚本时启动,以验证正确的变量包含口令的密码打印语句......下面是变化:
set password "Pas\$word"
...
send_user "\n#####\n# $hostname\n#####\n"
send_user "Using password: $password\n"
...
这里是控制台输出:
[email protected]:~$ ./ssh_ls.sh 192.168.5.93
#####
# 192.168.5.93
#####
Using password: Pas$word
Login failed. Password incorrect.
摆脱随时随地可以使用一组引号的。检查我的答案。 –
我想'set password {Pas $ word}'应该就足够了。用'expect -d ssh-ls.sh'运行你的脚本来查看后台发生了什么。 –