python
  • shell
  • ssh
  • 2016-10-14 179 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

    相關問題