2016-08-10 2 views
3

Ich mache ssh zu einem Server mit Parmiko in Python. Von dort muss ich zu mehreren Geräten telnet und die Ausgabe erfassen. Ich bin in der Lage, SSH und dann telnet zu nur einem Gerät, aber nicht telnet mehrere Geräte aus einer Schleife. Bitte schlage mir vor, wie es geht. Ich bin mit den folgendenTelnet über SSH vom Server

import paramiko 
import telnetlib 

ip = '' 
port = 42705 
username = '' 
password = '' 

ssh=paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(ip,port,username,password) 

f=open("abc.txt", "r") 
x=f.readlines() 
i=1 
if i < 100: 
    print i 
    cmd = "telnet " + x[i] 
    print cmd 
    i=i+1 


stdin, stdout, stderr = ssh.exec_command(cmd) 
stdin.write(''' 
terminal length 0 
show platform 
exit 
''') 

outlines = stdout.readlines() 
resp = ''.join(outlines) 
print(resp) 

, wenn ich nicht if-Anweisung verwenden und ip direkt zu geben, seine Arbeit gut. Aber ich muss mehrere Geräte vom selben Server telnet. Danke für deine Antwort!

ich jetzt den folgenden Code verwenden:

#! /usr/bin/python 

import sys 
import paramiko 


ip='' 
port=42705 
username='' 
password='' 
f1=open("abc.txt", 'r') 
devices=f1.readlines() 

for device in devices: 
    device = device.rstrip() 
    print device 
    command = "telnet " + device 
    ssh = paramiko.SSHClient() 
    print command 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(ip, port, username, password) 
    stdin, stdout, stderr = ssh.exec_command(command) 
    stdin.write(''' 
    primenms 
    primenms123 
    terminal length 0 
    show platform 
    exit 
    ls 
    ''') 
    outlines = stdout.readlines() 
    resp = ''.join(outlines) 
    print(resp) 
    ssh.close() 

f1.close()

Es ist in der Lage zu ssh, aber wenn ich telnet von SSH-Server mache, seine Anmeldeinformationen primenms und primenms123 Eingabe als Benutzername und Passwort, das sind die korrekten Anmeldeinformationen, aber es ist als Autorisierung fehlgeschlagen. Wo gehe ich falsch? Bitte hilf mir Jungs!

Antwort

1

Sie sollten wahrscheinlich eine for Schleife stattdessen werden:

for i in f.readlines(): 
    cmd = "telnet {0}".format(i) 
    print cmd 

Im Idealfall möchten Sie würden die Befehle mit auszuführen:

ssh.exec_command(cmd) 

Dann können Sie es wie das folgende Beispiel verwenden:

for i in f.readlines(): 
    cmd = "telnet {0}".format(i) 
    ssh.exec_command(cmd) 

Ohne zu wissen, was innerhalb abc.txt Sie ist Möglicherweise benötigen Sie dort auch andere ssh-Befehle.

+1

Auch 'ssh.exec_command (cmd)', et al, sollte innerhalb der Schleife ändern. –

+0

"abc.txt" enthält nur die Liste der IP-Adressen, die ich aus dem ssh-Server telnet möchte. Wenn ich ssh.exec_command (cmd) innerhalb der Schleife verwende, zeigt das Programm mir Autorisierung fehlgeschlagen, obwohl ich die richtigen Anmeldeinformationen eingeben. – alisha

+0

Wie verwenden Sie den Telnet-Befehl, wenn Sie nicht in Ihrer Schleife sind? Wenn es nur durch die print-Anweisung ist, würde ich sagen, benutze das einfach. –

0

späte Antwort darauf, sorry. Für mich sieht es so aus, als ob Ihr Benutzer und Passwort nur führende Leerzeichen haben. Sie müssen

stdin.write(''' 
    primenms 
    primenms123 
    terminal length 0 
    show platform 
    exit 
    ls 
    ''') 

zu

stdin.write('''primenms 
primenms123 
terminal length 0 
show platform 
exit 
ls 
''')