Ant SSH输入多个密码

时间:2013-07-16 14:29:36

标签: bash ant ssh passwords

我正在寻找一种通过SSH连接使用Ant输入密码的方法。

根据我的阅读,Ant有SSHExec和SSHSession我可以用来打开ssh连接,但是没有提供一种方法来为通过ssh连接运行的命令输入密码。

这个过程通常是手工完成的,到目前为止,我已经构建了一个自动化的ant脚本。总的来说,我要做的是:

ssh user@address
Password:password
someCommand parameter 
Password: [?]
moreCommands

通常我会在这里手动输入密码,但我找不到通过Ant或Bash来做到这一点的方法。有没有办法用Ant做到这一点?

这是我很长一段时间内的第一篇文章,如果我不清楚,很抱歉,在线回复或澄清。

1 个答案:

答案 0 :(得分:1)

我不确定Ant,但是既然你提到了Bash,我可以建议使用expect吗?

以下示例是作为一个函数构建的,但展示了如何完成您想要的...这假设您将在SSH命令行上运行一个命令(例如启动远程脚本)。

exp_comm ()
{
    # Remotely execute an SSH command on another server
    SVR="$1"
    USR="$2"
    PSW="$3"
    TGT="$4"
    ARG="$5"

    /usr/bin/expect <<- EOF 1>>stdout.out 2>>stderr.err
    set timeout 60
    spawn ssh ${USR}@${SVR} '${TGT}' ${ARG}
    expect "*assword:"
    send -- "${PSW}\r"
    expect eof
    EOF
    return $?
}

这样称呼:

exp_comm "server" "userid" "password" "/tmp/testscript.sh" "'One Big Arg1'"
exp_comm "server" "userid" "password" "/tmp/testscript.sh" "Arg1 Arg2 Arg3"

您可以修改以运行多个命令,并进入更复杂的“智能”命令,通过更改spawn ssh行删除目标脚本和参数,然后使用expect执行其他操作。类似的东西:

/usr/bin/expect <<- EOF 1>>stdout.out 2>>stderr.err
    set timeout 60
    spawn ssh ${USR}@${SVR}
    expect "*assword:"
    send -- "${PASS}\r"
    expect "*>"
    send -- "command1\r"
    expect "*>"
    send -- "command2\r"
    expect eof
    EOF

希望这有帮助。