通过SSH从服务器telnet

时间:2016-08-10 18:14:40

标签: python ssh telnet

我正在使用python中的parmiko对服务器进行ssh。从那里,我需要telnet到几个设备并捕获输出。我能够ssh然后telnet到只有一个设备,但不能从一个循环telnet多个设备。请建议我如何做到这一点。 我使用以下

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)

当我不使用if语句并直接给ip时,它的工作正常。但我需要从同一台服务器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作为用户名和密码,这是正确的凭据,但它显示为授权失败。我哪里错了?请帮帮我们!

2 个答案:

答案 0 :(得分: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 :(得分:0)

对此迟到的回答,对不起。 对我而言,您的用户和密码看起来只有前导空格。你需要改变

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

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