2

Python スクリプトを使用して cisco スイッチに telnet で接続しています。コードは次のようになります。

#!/usr/bin/python
import getpass
import sys
import telnetlib

HOST = "10.203.4.1"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ")
tn.write(user + "\n")
if password:
  tn.read_until("Password: ")
  tn.write(password + "\n")

tn.write("vt100\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()

スクリプトを実行した後、ハングアップします。どうすればこれを解決できますか?

4

5 に答える 5

2

トリガーを確認する必要があります: https://trigger.readthedocs.org/en/latest/

これは、cisco ルーター/スイッチなどのネットワーク デバイスとやり取りするための自動化ツールキットです。

from trigger.cmds import Commando

class ShowClock(Commando):
    """Execute 'show clock' on a list of Cisco devices."""
    vendors = ['cisco']
    commands = ['show clock']

if __name__ == '__main__':
    device_list = ['foo1-abc.net.aol.com', 'foo2-xyz.net.aol.com']
    showclock = ShowClock(devices=device_list)
    showclock.run() # Commando exposes this to start the event loop

    print '\nResults:'
    print showclock.results

詳細については、ドキュメントを確認してください: https://trigger.readthedocs.org/en/latest/

于 2013-10-30T01:16:08.993 に答える
1

より簡単な解決策は次のとおりです。

import pexpect
import getpass

HOST = "10.203.4.1"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

child = pexpect.spawn ('telnet '+HOST)
child.expect ('Username: ')
child.sendline (user)
child.expect ('Password: ')
child.sendline (password)
# If the hostname of the router is set to "deep"
# then the prompt now would be "deep>"
routerHostname = "deep" #example - can be different
child.expect (routerHostname+'>')
child.sendline ('enable')

等。

于 2013-10-30T01:03:44.170 に答える
0

まずはtelnet以外での利用をご検討ください。SSH は優れた代替品です。次に、この pythonic を作成するには、pexpect というライブラリを使用して、まさにこのことを行います。最後の行では、コマンド .interact() を使用して再び制御を取得します。

于 2013-10-30T01:03:42.730 に答える