2016-08-10 4 views
3

私はPythonでparmikoを使ってサーバにsshをやっています。そこから、私はいくつかのデバイスにtelnetし、出力をキャプチャする必要があります。 sshを実行してから、telnetで1台のデバイスにしか接続できませんが、ループから複数のデバイスをtelnetで呼び出すことはできません。私にこれを行う方法を提案してください。 私は、次のサーバからのSSHによるtelnet

私はif文を使用して、直接IP、その作業良いを与えていないです
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) 

を使用しています。しかし、私は同じサーバーから複数のデバイスをtelnetする必要があります。お返事をありがとうございます!

#! /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()

SSHすることができますが、私はSSHサーバからのtelnetをしていたときに、そののように資格情報のprimenmsとprimenms123を入力:私は今、次のコードを使用してい

ユーザー名とパスワードは正しい資格情報ですが、認証としての表示が失敗しました。どこが間違っていますか?みんな助けて!

答えて

1

あなたはおそらく代わりにforループを使用する必要があります。

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

理想的には、あなたがして、コマンドを実行したいと思います。そして、あなたは、次の例のようにそれを使用することができ

ssh.exec_command(cmd) 

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

abc.txtの内容を知らずにそこに他のsshコマンドも必要かもしれません。

+1

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

を変更する必要があり、らは、ループ内でなければなりません。 –

+0

"abc.txt"には、sshサーバ内からtelnetしたいIPアドレスのリストが入っています。また、ループ内でssh.exec_command(cmd)を使用しているときに、適切な資格情報を入力していても、認証に失敗したことがプログラムに表示されます。 – alisha

+0

ループの中にいないときにtelnetコマンドをどのように使用していますか?それがprintステートメントだけであれば、私はそれを使うと言うでしょう。 –

0

遅くてこれは、申し訳ありません。 あなたのユーザーとパスワードの先頭にスペースがあるように見えます。あなたは `ssh.exec_command(CMD)`、また

stdin.write('''primenms 
primenms123 
terminal length 0 
show platform 
exit 
ls 
''') 
関連する問題