0

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

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

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

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

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

这是我很久以来的第一篇文章,如果我不清楚,对不起,我会在线回复或澄清。

4

1 回答 1

1

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

下面的示例是作为一个函数构建的,但显示了如何完成您想要的……这假设您将在 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

希望这可以帮助。

于 2013-07-16T17:03:24.707 回答