我在python中使用paramiko和线程模块开发脚本。我想在单个ssh会话中执行多个命令。原因是,如果会话在执行第一个命令后断开连接,则旧配置(命令)将不会保存,因此我必须从头开始重新执行。
我的问题是,有没有办法可以简化这段代码?
import threading
import paramiko
class AllowAnythingPolicy(paramiko.MissingHostKeyPolicy):
def missing_host_key(self, client, hostname, key):
return
client = paramiko.SSHClient()
client.set_missing_host_key_policy(AllowAnythingPolicy())
client.connect('10.3.4.2', username='admin', password='g@defsl') # password='')
def read_until_EOF(fileobj):
s = fileobj.readline()
while s:
print (s.strip())
s = fileobj.readline()
out1 = client.exec_command('alicreate "fesxa_p1", "10:00:00:00:00:00:00:80"')[1]
out2 = client.exec_command('zonecreate "fesxa", "fesxa_p1;"')[1]
out3 = client.exec_command('cfgsave')[1]
out4 = client.exec_command('yes')[1]
out5 = client.exec_command('cfgenable "active_config1"')[1]
out6 = client.exec_command('yes')[1]
out7 = client.exec_command('exit')[1]
thread1 = threading.Thread(target=read_until_EOF, args=(out1,))
thread2 = threading.Thread(target=read_until_EOF, args=(out2,))
thread3 = threading.Thread(target=read_until_EOF, args=(out3,))
thread4 = threading.Thread(target=read_until_EOF, args=(out4,))
thread5 = threading.Thread(target=read_until_EOF, args=(out4,))
thread6 = threading.Thread(target=read_until_EOF, args=(out4,))
thread7 = threading.Thread(target=read_until_EOF, args=(out4,))
thread1.start()
thread2.start()
thread3.start()
thread4.start()
thread5.start()
thread6.start()
thread7.start()
thread1.join()
thread2.join()
thread3.join()
thread4.join()
thread5.join()
thread6.join()
thread7.join()
print (threading.Thread)
client.close()
答案 0 :(得分:0)
在我看来,线程在这里并不是真正正确的方法。线程通常用于您希望并发运行的情况,并且通常由于各种原因,正在运行的事情可能会或可能不会按照它们开始的顺序完成。 由于您将配置应用于设备,并且顺序很重要,因此线程确实不合适。您可能应该只使用 Paramiko 并按顺序运行命令并在每个命令后检查会话的状态,或者甚至考虑使用类似 pexpect 的东西。