如何使用expect自动输入SSH密码?

时间:2016-09-22 10:38:16

标签: bash shell ssh expect

我知道与此相关的风险,但我仍然想这样做。

我试图遵循其他答案,但没有成功。

基本上我只想在启动时打开ssh隧道。所以我正在创建一个脚本,我可以将其作为 cron作业进行系统启动

到目前为止,脚本看起来像这样:

#!/usr/bin/expect -f
spawn java -jar client.jar </dev/null &>/dev/null &

spawn ssh -fN -i /home/my_user/.ssh/id_rsa -R 20001:localhost:22 other_user@other_host
expect "*passphrase*"
send "my passphrase\r"

我得到的结果是,java进程都没有继续运行(如果它甚至根本没有启动),并且SSH连接都没有保持活动状态(如果它甚至连启动,并且密码被正确插入, send命令。)

我在这里做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

  1. 对于 spawn java :Expect spawn无法理解<&>&。您可以使用Tcl的exec命令,因为您没有与Java命令交互。

    exec java -jar client.jar < /dev/null >& /dev/null &

  2. 对于 spawn ssh :正如Dinesh指出的那样,您必须添加expect eof或者它不等待ssh退出的过程。

答案 1 :(得分:-1)

最好尝试 autoexpect ,这应该有用。

使用

 sudo yum install expect

或      sudo apt-get install expect

安装完成后。输入命令autoexpect

它会显示如下信息:

  

Autoexpect started, file is script.exp

在此之后,只需手动执行活动,然后为您编写脚本。

这是一个例子 Automating-with-Expect-Scripts