Paramiko是否重用一个会话或为每个exec_command调用打开一个新会话?

时间:2019-06-21 18:47:54

标签: python python-3.x ssh paramiko

我有许多设备需要测试。为此,我需要通过SSH执行命令。我正在使用Python和Paramiko。这是问题。每次我通过SSH运行命令时,Paramiko是否会打开一个新的SSH会话并创建一个新进程,或者一直保持打开状态直到关闭它?这很重要,因为我将必须运行数千个测试。每次打开一个新的会话将花费几秒钟。如果我可以节省数千次测试的时间,则可以节省大量时间。

如果它不能使会话保持打开状态,该如何保持它打开以便我无需每次登录即可执行命令,甚至可能吗?如果Paramiko无法实现,我可以使用其他模块吗?

我发现了this,但它们似乎都是Paramiko的包装纸,或者它们已经过时了。

她是我要执行的命令的示例:

hostname = '192.168.3.4'    
port = 22
username = 'username'
password = 'mypassword'
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
command = 'ls -lah'
(stdin, stdout, stderr) = s.exec_command(command)
(stdin, stdout, stderr) = s.exec_command(command)
(stdin, stdout, stderr) = s.exec_command(command)
(stdin, stdout, stderr) = s.exec_command(command)

1 个答案:

答案 0 :(得分:0)

这取决于您对每个命令重复执行代码的哪一部分。


如果仅重复SSHClient.exec_command呼叫,则您仍在使用相同的连接。

有关exec_command的内部信息,请参见我的回答:
What is the difference between exec_command and send with invoke_shell() on Paramiko?


如果重复整个代码,包括SSHClient.connect,显然您每次都在重新登录。