2017-02-27 97 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