我正在寻找一种通过SSH连接使用Ant输入密码的方法。
根据我的阅读,Ant有SSHExec和SSHSession我可以用来打开ssh连接,但是没有提供一种方法来为通过ssh连接运行的命令输入密码。
这个过程通常是手工完成的,到目前为止,我已经构建了一个自动化的ant脚本。总的来说,我要做的是:
ssh user@address
Password:password
someCommand parameter
Password: [?]
moreCommands
通常我会在这里手动输入密码,但我找不到通过Ant或Bash来做到这一点的方法。有没有办法用Ant做到这一点?
这是我很长一段时间内的第一篇文章,如果我不清楚,很抱歉,在线回复或澄清。
答案 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
希望这有帮助。