2017-02-27 130 views
1

即時連接一臺linux服務器與sshclient。然後,即時通過telnet在這臺服務器上連接cisco路由器。我連接服務器並執行telnet命令完美,但在第二或第三telnet命令代碼得到stucked和犯規扔error.Here是我的代碼部分:paramiko exec_command在幾個命令後掛起

def __init__(self): 
     self.pre_client=paramiko.SSHClient() 
     self.pre_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     sellf.pre_client.connect("server",username="user",password="password") 
     self.client=self.pre_client.invoke_shell() 
def connect(self,ip): 
    o=self.client.recv(1024) 
    print o 
    self.client.exec_command("telnet %s\n"%(ip)) 
    while True: 
     o=self.client.recv(1024) 
     print o 
     #EXECUTE COMMAND ON ROUTER 
     self.client.exec_command("exit\n") 
     if 'exit' in o: 
      break 

爲什麼會卡在這個命令?我該如何處理它?

回答

0

我想我需要查看更多代碼才能找到問題所在。如果您沒有需要使用Paramiko頻道的具體原因,如果您僅使用Paramiko客戶端,生活對您來說可能會輕鬆許多。這是我的一箇舊腳本粗糙的片段:

def ssh_connect(usr, pswds, host): 

    # Open Connection - auto add policy 
    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

    # Retry with multiple passwords 
    for pswd in pswds: 
     try: 
      ssh.connect(host, username=usr, password=pswd) 
      return ssh 
     except: 
      pass 
    else: 
     print("Could not login to: " + host) 
     return None 


def send_command(conn, command): 
    try: 
     stdin, stdout, stderr = conn.exec_command(command) 
     if stdout: 
      for str in stdout: 
       sys.stdout.write("\t%s" % str) 
      return True 
     if stderr: 
      for str in stderr: 
       sys.stderr.write("\t%s" % str) 
      return False 
     else: 
      print("\n") 
     return True 

    except paramiko.ssh_exception.SSHException as e: 
     print(e.message) 
     return False 

,當然還有,叫他們:

conn = ssh_connect(login, passwords, host) 
send_command(conn, command) 
+0

當我打印我觀察到我的命令不正確打印輸出。例如,如果我發送退出命令它打印如: ex -it 但答覆打印正確。 İs它realeted我的問題? – zeto

+0

這是第一臺主機還是第二臺telnet'd主機? –

+0

即時通訊發送退出命令結束會話的遠程登錄。 – zeto