我试图编写一个shell脚本(Bash)来登录到SonicWall防火墙设备并发出命令来执行设备规则集的自动备份。我更喜欢在Bash中这样做,但我也接受python、perl、except或applescript解决方案。如果不能在bash中完成,请提及。
问题:
1)。防火墙上的SSH服务器是自定义的,必须在发出
后指定用户名和密码。$ ssh server.com
所以无论你的用户名是什么,例如
$ ssh admin@server.com
SSH服务器仍然在
后面显示用户名和密码框2)。SSH服务器很小,我不能使用公钥
我尝试使用这里的文档,但它不工作,它导致立即"连接被远程主机关闭"。
我需要执行的命令是这样的:
export preferences ftp "ftp.server.com" "user1" "mypassword" "output.exp"
连接给了我这个:
$ ssh admin@server.com
Copyright (c) 2010 SonicWALL, Inc.
User:
发出用户名后,会显示密码提示:
User:user1
Password:
我试了一下这里的文档,但无济于事。
$ ssh server <<+
user1
mypassword
export preferences ftp "ftp.server.com" "user1" "mypassword" "output.exp"
exit
+
Pseudo-terminal will not be allocated because stdin is not a terminal.
Connection to 10.1.1.1 closed by remote host.
我尝试使用echo来管道命令,但这也不工作。
手动输入命令就可以了。
如果有任何帮助,我将不胜感激。
正如其他人所建议的,expect
可能是您想在这里使用的。
下面是一个关于如何从bash
开始使用它的简短示例:
login=root
IP=127.0.01
password=helloworld
# +whatever variables you need to use
# Run the expect script from bash
expect_sh=$(expect -c "
spawn ssh $login@$IP
expect "password:"
send "$passwordr"
expect "#"
send "cd $dest_dirr"
expect "#"
send "chmod +x $server_side_script $other_scriptr"
expect "#"
send "./$device_side_scriptr"
expect "#"
send "cat results_filer"
expect "#"
send "exitr"
")
# Output or do something with the results
echo "$expect_sh"
您可以使用原始的expect
自动执行ssh会话,这里有一篇详细讨论它的好文章:http://solar1.net/drupal/automating%20SSH%20with%20expect或Python模块pexepect
: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/
我不是BASH专家,但我必须做一些交互式密码提示导致我的问题。
基本上,您的脚本需要等待被要求输入登录凭据,并在提示时传递它们以便登录,一旦登录,您可以发出命令。
我建议看看刷出"期望"会话。基本上在你的脚本中,你使用expect基本上说"我希望看到密码:在响应中,当我这样做时,我需要传递以下数据"。
这里是wiki页面,帮助解释http://en.wikipedia.org/wiki/Expect
如果你谷歌一下,你会发现很多帮助。
这对我不起作用。
我必须在启动时将变量传递给脚本。
示例启动脚本login2.sh,有三个参数:
bash - 4.1美元。/login2.sh Jan2 * * * * HIE_SUPER 10.244.112.182