paramiko 批量上传 下载 和批量执行命令脚本分享
一:批量执行命令
1 [root@80sa script]# cat ssh.py 2 #!/usr/bin/env python 3 #coding:utf-8 4 5 import paramiko 6 7 file = open("iplist.txt","r") 8 all = file.readlines() 9 cmd = raw_input("Please input cmd:") 10 for ip in all: 11 print ip, 12 port = 51022 13 username = "zhangly" 14 password = "123456" 15 16 #创建SSH连接日志文(只保留前一次连接的详细日志 以前的日志会自动被覆盖) 17 paramiko.util.log_to_file('/script/ssh_connect_last.log') 18 ssh = paramiko.SSHClient() 19 20 #读取know_host 21 ssh.load_system_host_keys() 22 23 #允许连接不在know_hosts文件中的主机 24 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 25 26 #建立SSH连接并执行命令 27 ssh.connect(ip,port,username,password) 28 stdin,stdout,stderr = ssh.exec_command(cmd) 29 30 #打印标准输出 31 print stdout.read(), 32 print "-"*70 33 ssh.close()
二:批量上传下载
1 [root@80sa script]# cat get.py 2 #!/usr/bin/env python 3 #coding:utf-8 4 5 import paramiko,sys 6 import os 7 import datetime 8 9 def public(): 10 """Public is a public function。""" 11 print "="*70 12 13 14 local_dir = '/tmp' 15 remote_dir = '/tmp/upload' 16 17 file = open("iplist.txt","r") 18 all = file.readlines() 19 20 for ip in all: 21 print ip, 22 port = 51022 23 username = "zhangly" 24 password = "123456" 25 26 t = paramiko.Transport((ip,port)) 27 t.connect(username=username,password=password) 28 sftp = paramiko.SFTPClient.from_transport(t) 29 files = sftp.listdir(remote_dir) 30 print files 31 32 try: 33 for f in files: 34 #print "-"*70 35 #print f, 36 public() 37 print "Beginning to download file from %s %s" % (ip,datetime.datetime.now()) 38 39 #os.path.join(remote_dir,f)将分离的各个部分组成一个路径 40 print "Downloading file:",os.path.join(remote_dir,f) 41 sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f)) 42 #sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f)) 43 print "Download file sucess %s" % datetime.datetime.now() 44 #print "#"*70 45 except: 46 public() 47 print "Download error,Give up other download!" 48 sys.exit() 49 t.close()
1 [root@80sa script]# cat upload.py 2 #!/usr/bin/env python 3 #coding:utf-8 4 5 import paramiko,sys 6 import os 7 import datetime 8 9 def public(): 10 """public is a public function。""" 11 print "="*70 12 13 14 local_dir = '/tmp/upload/' 15 remote_dir = '/tmp/upload/' 16 17 file = open("iplist.txt","r") 18 all = file.readlines() 19 20 for ip in all: 21 print ip, 22 port = 51022 23 username = "zhangly" 24 password = "123456" 25 26 t = paramiko.Transport((ip,port)) 27 t.connect(username=username,password=password) 28 sftp = paramiko.SFTPClient.from_transport(t) 29 files = os.listdir(local_dir) 30 print files 31 32 try: 33 for f in files: 34 #print f, 35 public() 36 print "Beginning to upload file from %s %s" % (ip,datetime.datetime.now()) 37 print "Uploading file:",os.path.join(local_dir,f) 38 sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f)) 39 print "Upload file sucess %s" % datetime.datetime.now() 40 except: 41 public() 42 print "Upload error,Give up other upload!" 43 sys.exit() 44 t.close()
生产环境最新调试批量下载脚本:
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import paramiko,sys 5 import os,sys 6 import datetime 7 8 def public(): 9 """Public is a public function""" 10 print "="*70 11 12 #debug = sys.argv[1] 13 #local_dir = '/data/log/' 14 remote_dir = '/data/logs/Debuglog' 15 iplist_dir = '/data/log/iplist.txt' 16 17 file = open(iplist_dir,"r") 18 all = file.readlines() 19 20 for ip in all: 21 ip = ip.strip() 22 #print ip, 23 if os.path.exists(ip): 24 print """%s directory is already exist!"""%(ip) 25 else: 26 print ip,"%s directory will be created"%(ip) 27 os.makedirs(ip), 28 29 port = 510 30 username = "zhangly" 31 password = "www.80sa.org" 32 33 t = paramiko.Transport((ip,port)) 34 t.connect(username=username,password=password) 35 sftp = paramiko.SFTPClient.from_transport(t) 36 files = sftp.listdir(remote_dir) 37 print files 38 39 try: 40 for f in files: 41 #print "-"*70 42 #print f, 43 public() 44 print "Beginning to download remote log file from %s %s" % (ip,datetime.datetime.now()) 45 46 print "Downloading remote log file:",os.path.join(remote_dir,f),"to local directory %s" % ip 47 sftp.get(os.path.join(remote_dir,f),os.path.join(ip,f)) 48 #sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f)) 49 print "Download remote log file sucess %s" % datetime.datetime.now() 50 #print "#"*70 51 except: 52 public() 53 print "Download error,Give up other download!" 54 sys.exit() 55 t.close()
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步