SSH脚本到Python

时间:2016-10-14 06:08:17

标签: python shell ssh

我是初学者,尝试用SSH编写基本代码,我已经尝试过所有无法调试的东西,我的代码如下:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print ("1")
ssh.connect('196.5.5.6', username='abc', password='abc')
print ("2")
stdin, stdout, stderr = ssh.exec_command('show version')
print ("3")
output= stdout.readlines()
print ("4")
print(output)

我得到的输出是1
2
3
在4,它被卡在某处,有问题,我无法获取数据,请帮助任何人。代码只在输出步骤挂起。解决方案完全相同。

2 个答案:

答案 0 :(得分:0)

您不需要readlines(上的stdin}。您可以直接打印。 readlines()期望打开文件并从文件中读取。而stdinstdoutstderr不是文件,而是字符串块(或paramiko通道中使用的字符串缓冲区)。如果您检查stdinstdoutstderr的类型,您会发现<class 'paramiko.channel.ChannelFile'>,这些文件不完全是文件,但是文件类似于创建用于存储缓冲区的对象帕拉米科频道。

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print 1
ssh.connect('196.5.5.6', username='abc', password='abc')
print 2
stdin, stdout, stderr = ssh.exec_command('show version')
print 3
output= stdin
print 4
print(output)
print '---', stdout
print '---==', stderr

答案 1 :(得分:0)

你应该输入命令试试这个

import paramiko 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print ("1")
ssh.connect('ip', username='user', password='pass')
print ("2")
stdin, stdout, stderr = ssh.exec_command('show version')
print ("3")
stdin,stdout,stderr = ssh.exec_command("ls /")
print stdout.readlines()