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

问题描述 投票:0回答:1

我有很多设备需要测试。为此,我需要通过 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)
python python-3.x ssh paramiko
1个回答
2
投票

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


如果您仅重复

SSHClient.exec_command
呼叫,则您仍在使用相同的连接。

对于

exec_command
的内部结构,请参阅我的回答:
Paramiko 上的 exec_command 和使用 invoke_shell() 发送有什么区别?


如果您重复整个代码,包括

SSHClient.connect
,显然您每次都会再次登录。

© www.soinside.com 2019 - 2024. All rights reserved.