2

我正在尝试编写一个 shell 脚本 (Bash) 以登录到 SonicWall 防火墙设备并发出命令来执行设备规则集的自动备份。我更喜欢在 Bash 中执行此操作,但我会接受 python、perl、except 或 applescript 解决方案。如果不能在 bash 中完成,请提及。

问题:

1.) 防火墙上的 SSH 服务器是自定义的,用户名和密码必须在发出后指定

$ ssh server.com

所以无论你发出什么用户名,例如

$ ssh admin@server.com

SSH 服务器在之后仍然显示用户名和密码框

2.) SSH 服务器很小,我不能使用公钥

我尝试使用here-document,但它不起作用,并导致立即“连接被远程主机关闭”。

我需要执行的命令采用以下形式:

export preferences ftp "ftp.server.com" "user1" "mypassword" "output.exp"

连接给了我这个:

$ ssh admin@server.com


Copyright (c) 2010 SonicWALL, Inc. 

User:    

发出用户名后,它会显示密码提示:

User:user1
Password:

我尝试了here-document无济于事。

$ 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 来输入命令,但这也不起作用。

手动输入命令就可以了。

对此的任何帮助将不胜感激。

4

4 回答 4

3

正如其他人所建议的那样,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 \"$password\r\"
expect \"#\"
send \"cd $dest_dir\r\"
expect \"#\"
send \"chmod +x $server_side_script $other_script\r\"
expect \"#\"
send \"./$device_side_script\r\"
expect \"#\"
send \"cat results_file\r\" 
expect \"#\"
send \"exit\r\"
")

# Output or do something with the results
echo "$expect_sh"
于 2013-01-03T21:43:12.607 回答
1

您可以使用原始的 ssh 会话自动化expect,这里有一篇很好的文章详细讨论它:http: //solar1.net/drupal/automating%20SSH%20with%20expect或 Python 模块pexepecthttp://linux.byexamples。 com/archives/346/python-how-to-access-ssh-with-pexpect/

于 2013-01-03T21:28:43.237 回答
0

我不是 BASH 专家,但我不得不做一些交互式密码提示给我带来问题的事情。

基本上,您的脚本需要等待被要求输入登录凭据,并在提示登录时传递它们,一旦登录,您就可以发出命令。

我建议查看产生“预期”会话。基本上在您的脚本中,您使用的期望基本上是说“我希望看到密码:在响应中,当我这样做时,我需要传递以下数据”。

这是帮助解释它的维基页面http://en.wikipedia.org/wiki/Expect

如果你在周围搜索一下,你会发现很多帮助。

于 2013-01-03T21:30:13.840 回答
0

那对我不起作用。

我必须在启动时将变量传递给脚本。

示例启动脚本 login2.sh,带有三个参数:

-bash-4.1$ ./login2.sh Jan2**** HIE_SUPER 10.244.112.182

于 2016-12-02T02:23:46.937 回答