如何使用paramiko保持ssh会话未过期?

J.W*_*ang 9 python ssh switching paramiko python-2.7

我打算使用paramiko在远程主机上运行几个命令,但运行命令后ssh会话关闭.
下面列出的代码:

from paramiko import SSHClient  
import paramiko  
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, 22, user, passwd, timeout=3)
stdin, stdout, stderr = ssh.exec_command('uname -a')
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以阻止ssh会话结束?或帕拉米科的任何替代品?

更新:当连接到Linux服务器时,
我能够继续调用exec_command我的Macbook,但是exec_command当连接到交换机并升级时,ssh会话在Linux服务器上自动关闭
SSHException: paramiko.ssh_exception.SSHException: SSH session not active

>>> print ssh.get_transport()  
>>> <paramiko.Transport at 0xf00216d0L (unconnected)>  
>>> print ssh.get_transport().is_active()  
>>> False  
>>> print ssh.get_transport().is_authenticated()  
>>> False
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以让paramiko ssh会话始终保持活动状态?

paramiko调试模式信息返回如下:

启动线程(客户端模式):0x2657e10L
连接(版本1.99,客户端Comware-5.20)
kex algos:[u'diffie-hellman-group-exchange-sha1',u'diffie-hellman-group14-sha1',u'diffie- hellman-group1-sha1']服务器密钥:[u'ssh-rsa']客户端加密:[u'aes128-cbc',u'3des-cbc',u'des-cbc']服务器加密:[u'aes128 -cbc',u'3des-cbc',u'des-cbc']客户端mac:[u'hmac-sha1',u'hmac-sha1-96',u'hmac-md5',u'hmac-md5 -96']服务器mac:[u'hmac-sha1',u'hmac-sha1-96',u'hmac-md5',u'hmac-md5-96']客户端压缩:[u'none']服务器压缩:[u'none']客户端lang:[u'']服务器lang:[u''] kex跟随?False
Ciphers同意:local = aes128-cbc,remote = aes128-cbc
using kex diffie-hellman-group14- SHA1; 服务器密钥类型ssh-rsa; 密码:本地aes128-cbc,远程aes128-cbc; mac:local hmac-sha1,remote hmac-sha1; 压缩:本地无,远程无
切换到新密钥...
userauth可以
认证(密码)成功!
[chan 0]最大数据包:32768字节
[chan 1]最大数据包:32768字节
[chan 0]最大数据包输出:32496字节
Secsh通道0打开.
Secsh channel 2 open FAILED:
资源不足:资源不足
[chan 0] Sesch channel 0 request ok
[chan 0] EOF sent(0)

Lar*_*gas 1

我看到你正在使用timeout我看到您在连接调用中

\n\n
ssh.connect(host, 22, user, passwd, timeout=3)\n
Run Code Online (Sandbox Code Playgroud)\n\n

从文档中:

\n\n
\n

timeout (float) \xe2\x80\x93 TCP 连接的可选超时(以秒为单位)

\n
\n\n

在我的一个脚本中,我只是这样做:

\n\n
ssh = paramiko.SSHClient()\nssh.connect(host, username=settings.user)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会保持连接打开,直到我打电话

\n\n
ssh.close()\n
Run Code Online (Sandbox Code Playgroud)\n

  • 此超时仅适用于连接 (2认同)