-2

我在将 ssh 的 shell 脚本写入 cisco ASA 并将命令输出存储在文本文件中时遇到问题。

1.脚本中不需要密钥交换,因为它不是第一次登录。2.从我的centOS服务器它应该使用ssh usr@serverip登录到cisco ASA,运行“en”,发送en密码,然后运行一些命令说“显示版本”并将输出存储到我服务器中的文本文件中。我尝试了shell脚本和expect的使用,都没有成功。请帮忙。

提前非常感谢。

4

4 回答 4

2

这是一个用 python 编写的小代码,可以为您完成工作。Python 默认安装在您的 CentOS 中。只需将文件名中的代码保存为 .py 并使用“python .py”运行它。让我知道这是否有帮助。

import pexpect


try:

hostname= 'yourhostname/ip of firewall'
username= 'your username'
commandTorun = 'Enter your command here'
password= 'your password'
enable= 'your enable password'

ssh = 'ssh ' + username + '@' +hostname

s=pexpect.spawn(ssh)

s.expect('word')
s.sendline(password)
s.expect('>');
s.sendline('en')
s.expect('word')
s.sendline(enable)
s.expect('#')
s.sendline('configure terminal')
s.expect('#')
s.sendline('pager 0')
s.expect('#')
s.sendline(commandTorun)

s.expect('#')
output =  s.before
#You can save the output however you want here. I am printing it to the CLI.

s.sendline('exit')
s.expect('#')
s.sendline('exit')
s.expect(pexpect.EOF)
print output

except Exception, e:
print "The Script failed to login"
print str(e)
于 2015-02-20T05:56:32.670 回答
0

我对 CentOS 不熟悉,但我在 Windows 上使用 Plink(PuTTY 的命令行版本)完成了这项工作。 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html(编辑:刚刚检查过,它似乎 plink 作为 .rpm 文件存在并且在存储库中可用。提供的链接也有源代码如果手动编译是你的事。)

选项 -m 允许您指定命令脚本,-ssh 强制使用 ssh 协议,-l 是远程用户,-pw 是远程密码。

这是命令:

plink.exe -ssh -l user -pw pass -m "path_to_script/script.txt" ip_of_asa > outputfile.txt

在 script.txt 文件中,您只是一个命令列表,包括启用命令和硬编码密码:

en
enable_password
show ver
 
 
exit

请注意,如果有多页,那里有空格可以获取完整的“显示版本”。输出使用“>”将输出重定向到文件。

希望这可以帮助!

于 2013-04-19T23:20:08.230 回答
0

这行得通。

#!/usr/bin/expect
set remote_server [lrange $argv 0 0]
set timeout 10
spawn ssh -M username@$remote_server
while 1 {
  expect {
    "no)?"      {send "yes\r"}
    "denied" {
                log_file /var/log/expect_msg.log
                send_log "Can't login to $remote_server. Check username and password\n";
                exit 1
             }
    "telnet:" {
                log_file /var/log/expect_msg.log
                send_log "Can't connect to $remote_server via SSH or Telnet. Something went definitely wrong\n";
                exit 2
              }
    "failed" {
                log_file /var/log/expect_msg.log
                send_log "Host $remote_server exists. Check ssh_hosts file\n";
                exit 3
             }
    timeout {
                log_file /var/log/expect_msg.log
                send_log "Timeout problem. Host $remote_server doesn't respond\n";
                exit 4
            }
    "refused" {
                log_file /var/log/expect_msg.log
                send_log "Host $remote_server refused to SSH. That is insecure.\n"
                log_file
                spawn telnet $remote_server
              }
    "sername:" {send "username\r"}
    "assword:" {send "password\r"}
    ">"        {enable}
    "#"        {break}
  }
}
send "terminal length 0\r"
expect "#"
send "show running-config\r"
log_file /opt/config-poller/tmp/poller.trash/$remote_server
expect "#"
send "exit\n"; exit 0
于 2013-04-22T11:13:33.537 回答
0

如果您通过本地计算机访问路由器,则可以创建一个期望脚本并在本地计算机上配置 tftp。剧本会是这样的。

#!/usr/bin/expect-f
spawn telnet Router_IP
expect "word"
sent "password"
expect "word"
sent "copy running-config tftp://$tftp/$config\n\n" #edit this line wrt system's tftp configurations.
expect "word"
send "\n"
于 2018-02-02T12:32:50.713 回答