期望在包含特殊字符

时间:2018-02-21 15:27:58

标签: bash ssh expect

我想编写一个小的expect脚本和另一个bash脚本来节省在ssh连接中输入密码的工作量。

以下是脚本:

// ssh.exp, the real workhorse
#!/usr/bin/expect -f
# usage: ./ssh.exp host user pass

set host [lrange $argv 0 0]
set user [lrange $argv 1 1]
set pass [lrange $argv 2 2]

spawn ssh $user@$host
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

// the bash script to call it
#!/bin/bash

host='my.host.com'
user='someuser'
pass='Qwerty389$'

./ssh.exp $host $user $pass

但是,当测试脚本运行时,ssh服务器总是抱怨密码不正确。

我试图逃离美元符号,如pass='Qwerty389\$',但无济于事。

将调试语句exp_internal 1放入expect脚本,它显示发送的密码是:

send: sending "{Qwerty389$}\r" to { exp6 }  // without escaping $
send: sending "{Qwerty389\$}\r" to { exp6 } // escaping $ in password

不确定为什么期望将密码围绕传递给它的密码。我确认如果密码中没有美元符号,就不会有括号。

任何帮助?

0 个答案:

没有答案