ทั้งหมดได้ระบุไว้แล้ว (แนะนำ) โดยใช้paramikoและฉันแค่แชร์รหัส python (API อาจพูดได้) ที่จะช่วยให้คุณดำเนินการหลายคำสั่งในครั้งเดียว
ในการดำเนินการคำสั่งบนโหนดต่างๆให้ใช้: Commands().run_cmd(host_ip, list_of_commands)
คุณจะเห็นสิ่งที่ต้องทำหนึ่งรายการซึ่งฉันเก็บไว้เพื่อหยุดการดำเนินการหากคำสั่งใด ๆ ไม่สามารถดำเนินการได้ฉันไม่รู้ว่าจะทำอย่างไร กรุณาแบ่งปันความรู้ของคุณ
import os
import sys
import select
import paramiko
import time
class Commands:
def __init__(self, retry_time=0):
self.retry_time = retry_time
pass
def run_cmd(self, host_ip, cmd_list):
i = 0
while True:
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host_ip)
break
except paramiko.AuthenticationException:
print("Authentication failed when connecting to %s" % host_ip)
sys.exit(1)
except:
print("Could not SSH to %s, waiting for it to start" % host_ip)
i += 1
time.sleep(2)
if i >= self.retry_time:
print("Could not connect to %s. Giving up" % host_ip)
sys.exit(1)
for command in cmd_list:
print "> " + command
stdin, stdout, stderr = ssh.exec_command(command)
while not stdout.channel.exit_status_ready():
if stdout.channel.recv_ready():
rl, wl, xl = select.select([ stdout.channel ], [ ], [ ], 0.0)
if len(rl) > 0:
tmp = stdout.channel.recv(1024)
output = tmp.decode()
print output
ssh.close()
return
def main(args=None):
if args is None:
print "arguments expected"
else:
mytest = Commands()
mytest.run_cmd(host_ip=args[0], cmd_list=args[1])
return
if __name__ == "__main__":
main(sys.argv[1:])
ขอบคุณ!