2014-03-19 68 views
2

我試圖通過ssh執行一些命令。當強制命令打開時,paramiko不起作用

import paramiko 
client = paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
private_key = paramiko.RSAKey.from_private_key_file("/home/kalombo/identity") 
client.connect(hostname=host, username=username, pkey=private_key) 
stdin, stdout, stderr = client.exec_command('pwd', timeout=5) 
for line in stdout: 
    print '... ' + line.strip('\n') 
client.close() 

如果ssh服務器有一個強制命令選項,那麼當超時過期時,腳本停止並且什麼也不做。有一個調試日誌。你可以注意到「Force command」行:

DEBUG:paramiko.transport:starting thread (client mode): 0xb6d1bb4cL 
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_6.0p1) 
DEBUG:paramiko.transport:kex algos:[u'ecdh-sha2-nistp256', u'ecdh-sha2-nistp384', u'ecdh-sha2-nistp521', u'diffie-hellman-group-exchange-sha256', u'diffie-hellman-group-exchange-sha1', u'diffie-hellman-group14-sha1', u'diffie-hellman-group1-sha1'] server key:[u'ssh-rsa', u'ssh-dss', u'ecdsa-sha2-nistp256'] client encrypt:[u'aes128-ctr', u'aes192-ctr', u'aes256-ctr', u'arcfour256', u'arcfour128', u'aes128-cbc', u'3des-cbc', u'blowfish-cbc', u'cast128-cbc', u'aes192-cbc', u'aes256-cbc', u'arcfour', u'[email protected]'] server encrypt:[u'aes128-ctr', u'aes192-ctr', u'aes256-ctr', u'arcfour256', u'arcfour128', u'aes128-cbc', u'3des-cbc', u'blowfish-cbc', u'cast128-cbc', u'aes192-cbc', u'aes256-cbc', u'arcfour', u'[email protected]'] client mac:[u'hmac-md5', u'hmac-sha1', u'[email protected]', u'hmac-sha2-256', u'hmac-sha2-256-96', u'hmac-sha2-512', u'hmac-sha2-512-96', u'hmac-ripemd160', u'[email protected]', u'hmac-sha1-96', u'hmac-md5-96'] server mac:[u'hmac-md5', u'hmac-sha1', u'[email protected]', u'hmac-sha2-256', u'hmac-sha2-256-96', u'hmac-sha2-512', u'hmac-sha2-512-96', u'hmac-ripemd160', u'[email protected]', u'hmac-sha1-96', u'hmac-md5-96'] client compress:[u'none', u'[email protected]'] server compress:[u'none', u'[email protected]'] client lang:[u''] server lang:[u''] kex follows?False 
DEBUG:paramiko.transport:Ciphers agreed: local=aes128-ctr, remote=aes128-ctr 
DEBUG:paramiko.transport:using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-ctr, remote aes128-ctr; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none 
DEBUG:paramiko.transport:Switch to new keys ... 
DEBUG:paramiko.transport:Adding ssh-rsa host key for 8.8.8.8: 54c2349797979732dda94989530c1f4 
DEBUG:paramiko.transport:Trying SSH key 7d834324323429b09824eb 
DEBUG:paramiko.transport:userauth is OK 
INFO:paramiko.transport:Authentication (publickey) successful! 
DEBUG:paramiko.transport:Debug msg: Forced command. 
DEBUG:paramiko.transport:Debug msg: Port forwarding disabled. 
DEBUG:paramiko.transport:Debug msg: X11 forwarding disabled. 
DEBUG:paramiko.transport:Debug msg: Agent forwarding disabled. 
DEBUG:paramiko.transport:Debug msg: Pty allocation disabled. 
DEBUG:paramiko.transport:[chan 1] Max packet in: 34816 bytes 
DEBUG:paramiko.transport:[chan 1] Max packet out: 32768 bytes 
INFO:paramiko.transport:Secsh channel 1 opened. 
DEBUG:paramiko.transport:[chan 1] Sesch channel 1 request ok 

如果我禁用該選項一切正常。爲什麼會發生?我該如何解決它?

+0

正在執行的代替pwd的命令是什麼?也許執行時間太長。 – ScoPi

回答

0
DEBUG:paramiko.transport:Debug msg: Forced command. 

有沒有辦法解決這個問題。如果服務器配置了強制的密鑰命令,則使用該密鑰打開的任何會話都將導致服務器忽略您請求的命令並調用強制命令。

不知道服務器運行的是什麼命令,沒有辦法知道它爲什麼掛起。強制命令可能正在等待來自遠程SSH客戶端的輸入,在這種情況下,它將無限期地等待。

強制命令可以通過環境變量「SSH_ORIGINAL_COMMAND」訪問客戶端請求的原始命令。強制命令可以檢查此變量並調用客戶端請求的命令,但強制命令必須記住此功能。