python
  • shell
  • ssh
  • 2016-10-14 130 views 1 likes 
    1

    我是一个初学者尝试做SSH编写一个基本的代码,我已经试过各种无法调试这一点,我的代码如下:Python脚本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

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

    +1

    你不是应该打印stdout.readlines()? – gplayer

    +0

    价值进入输出,然后我打印输出 –

    +0

    它仍然会挂断,只是试图 –

    回答

    0

    你不需要做readlines(stdin。您可以直接打印。 readlines()希望打开一个文件并从文件中读取。而stdin,stdout,stderr不是文件,而是一个字符串块(或在paramiko通道中使用的字符串缓冲区)。如果您检查stdin,stdout,stderr的类型,您会发现<class 'paramiko.channel.ChannelFile'>,它们不完全是文件,而是类似文件的对象,用于将缓冲区存储在paramiko通道中。

    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 
    
    +0

    是Pabitra我明白,但这会返回你这样的事情: –

    +0

    +0

    是的,这是paramiko channelfile,而不是一个实际的文件。所以,同样的,你不能使用'readlines()'方法。 –

    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() 
    
    +0

    感谢您的编辑,不幸的是只有stdout.readlines()存在问题! ,它还真的挂了代码 –

    +0

    ?生病屏幕截图我的输出 – thesonyman101

    +0

    https://s14.postimg.org/x92zgbuch/hmmmmmmmmm.png – thesonyman101

    相关问题