日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python ssh 執行shell命令的示例

瀏覽:108日期:2022-07-09 14:33:02

# -*- coding: utf-8 -*-import paramikoimport threadingdef run(host_ip, username, password, command): ssh = paramiko.SSHClient() try: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host_ip, 22, username, password) print(’===================exec on [%s]=====================’ % host_ip) stdin, stdout, stderr = ssh.exec_command(command, timeout=300) out = stdout.readlines() for o in out: print (o.strip(’n’)) except Exception as ex: print(’error, host is [%s], msg is [%s]’ % (host_ip, ex.message)) finally: ssh.close()if __name__ == ’__main__’: # 將需要批量執行命令的host ip地址填到這里 # eg: host_ip_list = [’IP1’, ’IP2’] host_ip_list = [’147.116.20.19’] for _host_ip in host_ip_list: # 用戶名,密碼,執行的命令填到這里 run(_host_ip, ’tzgame’, ’tzgame@1234’, ’df -h’) run(_host_ip, ’tzgame’, ’tzgame@1234’, ’ping -c 5 220.181.38.148’)

pycrypto,由于 paramiko 模塊內部依賴pycrypto,所以先下載安裝pycrypto

pip3 install pycryptopip3 install paramiko

(1)基于用戶名和密碼的連接

import paramiko# 創建SSH對象ssh = paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(hostname=’c1.salt.com’, port=22, username=’GSuser’, password=’123’)# 執行命令stdin, stdout, stderr = ssh.exec_command(’ls’)# 獲取命令結果result = stdout.read()# 關閉連接ssh.close()

(2)基于公鑰秘鑰連接

import paramikoprivate_key = paramiko.RSAKey.from_private_key_file(’/home/auto/.ssh/id_rsa’)# 創建SSH對象ssh = paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(hostname=’c1.salt.com’, port=22, username=’wupeiqi’, key=private_key)# 執行命令stdin, stdout, stderr = ssh.exec_command(’df’)# 獲取命令結果result = stdout.read()# 關閉連接ssh.close()

SFTPClient:

用于連接遠程服務器并進行上傳下載功能。

(1)基于用戶名密碼上傳下載

import paramikotransport = paramiko.Transport((’hostname’,22))transport.connect(username=’GSuser’,password=’123’)sftp = paramiko.SFTPClient.from_transport(transport)# 將location.py 上傳至服務器 /tmp/test.pysftp.put(’/tmp/location.py’, ’/tmp/test.py’)# 將remove_path 下載到本地 local_pathsftp.get(’remove_path’, ’local_path’)transport.close()

(2)基于公鑰秘鑰上傳下載

import paramikoprivate_key = paramiko.RSAKey.from_private_key_file(’/home/auto/.ssh/id_rsa’)transport = paramiko.Transport((’hostname’, 22))transport.connect(username=’GSuser’, pkey=private_key )sftp = paramiko.SFTPClient.from_transport(transport)# 將location.py 上傳至服務器 /tmp/test.pysftp.put(’/tmp/location.py’, ’/tmp/test.py’)# 將remove_path 下載到本地 local_pathsftp.get(’remove_path’, ’local_path’)transport.close()

下面是多線程執行版本

#!/usr/bin/python#coding:utf-8import threadingimport subprocessimport osimport syssshport = 13131log_path = ’update_log’output = {}def execute(s, ip, cmd, log_path_today): with s: cmd = ’’’ssh -p%s root@%s -n '%s' ’’’ % (sshport, ip, cmd) ret = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output[ip] = ret.stdout.readlines()if __name__ == '__main__': if len(sys.argv) != 3: print 'Usage: %s config.ini cmd' % sys.argv[0] sys.exit(1) if not os.path.isfile(sys.argv[1]): print 'Usage: %s is not file!' % sys.argv[1] sys.exit(1) cmd = sys.argv[2] f = open(sys.argv[1],’r’) list = f.readlines() f.close() today = datetime.date.today() log_path_today = ’%s/%s’ % (log_path,today) if not os.path.isdir(log_path_today): os.makedirs(log_path_today) threading_num = 100 if threading_num > len(list): threading_num = len(list) s = threading.Semaphore(threading_num) for line in list: ip = line.strip() t = threading.Thread(target=execute,args=(s, ip,cmd,log_path_today)) t.setDaemon(True) t.start() main_thread = threading.currentThread() for t in threading.enumerate(): if t is main_thread: continue t.join() for ip,result in output.items(): print '%s: ' % ip for line in result: print ' %s' % line.strip() print 'Done!'

以上腳本讀取兩個參數,第一個為存放IP的文本,第二個為shell命令

執行效果如下

python ssh 執行shell命令的示例

# -*- coding:utf-8 -*-import requestsfrom requests.exceptions import RequestExceptionimport os, timeimport refrom lxml import etreeimport threadinglock = threading.Lock()def get_html(url): response = requests.get(url, timeout=10) # print(response.status_code) try: if response.status_code == 200: # print(response.text) return response.text else: return None except RequestException: print('請求失敗') # return Nonedef parse_html(html_text): html = etree.HTML(html_text) if len(html) > 0: img_src = html.xpath('//img[@class=’photothumb lazy’]/@data-original') # 元素提取方法 # print(img_src) return img_src else: print('解析頁面元素失敗')def get_image_pages(url): html_text = get_html(url) # 獲取搜索url響應內容 # print(html_text) if html_text is not None: html = etree.HTML(html_text) # 生成XPath解析對象 last_page = html.xpath('//div[@class=’pages’]//a[last()]/@href') # 提取最后一頁所在href鏈接 print(last_page) if last_page: max_page = re.compile(r’(d+)’, re.S).search(last_page[0]).group() # 使用正則表達式提取鏈接中的頁碼數字 print(max_page) print(type(max_page)) return int(max_page) # 將字符串頁碼轉為整數并返回 else: print('暫無數據') return None else: print('查詢結果失敗')def get_all_image_url(page_number): base_url = ’https://imgbin.com/free-png/naruto/’ image_urls = [] x = 1 # 定義一個標識,用于給每個圖片url編號,從1遞增 for i in range(1, page_number): url = base_url + str(i) # 根據頁碼遍歷請求url try: html = get_html(url) # 解析每個頁面的內容 if html:data = parse_html(html) # 提取頁面中的圖片url# print(data)# time.sleep(3)if data: for j in data: image_urls.append({ ’name’: x, ’value’: j }) x += 1 # 每提取一個圖片url,標識x增加1 except RequestException as f: print('遇到錯誤:', f) continue # print(image_urls) return image_urlsdef get_image_content(url): try: r = requests.get(url, timeout=15) if r.status_code == 200: return r.content return None except RequestException: return Nonedef main(url, image_name): semaphore.acquire() # 加鎖,限制線程數 print(’當前子線程: {}’.format(threading.current_thread().name)) save_path = os.path.dirname(os.path.abspath(’.’)) + ’/pics/’ try: file_path = ’{0}/{1}.jpg’.format(save_path, image_name) if not os.path.exists(file_path): # 判斷是否存在文件,不存在則爬取 with open(file_path, ’wb’) as f:f.write(get_image_content(url))f.close()print(’第{}個文件保存成功’.format(image_name)) else: print('第{}個文件已存在'.format(image_name)) semaphore.release() # 解鎖imgbin-多線程-重寫run方法.py except FileNotFoundError as f: print('第{}個文件下載時遇到錯誤,url為:{}:'.format(image_name, url)) print('報錯:', f) raise except TypeError as e: print('第{}個文件下載時遇到錯誤,url為:{}:'.format(image_name, url)) print('報錯:', e)class MyThread(threading.Thread): '''繼承Thread類重寫run方法創建新進程''' def __init__(self, func, args): ''' :param func: run方法中要調用的函數名 :param args: func函數所需的參數 ''' threading.Thread.__init__(self) self.func = func self.args = args def run(self): print(’當前子線程: {}’.format(threading.current_thread().name)) self.func(self.args[0], self.args[1]) # 調用func函數 # 因為這里的func函數其實是上述的main()函數,它需要2個參數;args傳入的是個參數元組,拆解開來傳入if __name__ == ’__main__’: start = time.time() print(’這是主線程:{}’.format(threading.current_thread().name)) urls = get_all_image_url(5) # 獲取所有圖片url列表 thread_list = [] # 定義一個列表,向里面追加線程 semaphore = threading.BoundedSemaphore(5) # 或使用Semaphore方法 for t in urls: # print(i) m = MyThread(main, (t['value'], t['name'])) # 調用MyThread類,得到一個實例 thread_list.append(m) for m in thread_list: m.start() # 調用start()方法,開始執行 for m in thread_list: m.join() # 子線程調用join()方法,使主線程等待子線程運行完畢之后才退出 end = time.time() print(end-start) # get_image_pages(https://imgbin.com/free-png/Naruto)

以上就是python ssh 執行shell命令的示例的詳細內容,更多關于python ssh 執行shell命令的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩99| 日韩中文字幕区一区有砖一区 | 中文欧美日韩| 激情视频一区二区三区| 久久精品国内一区二区三区水蜜桃| 美女视频网站久久| 精品日本视频| 国产 日韩 欧美一区| 中文字幕在线视频久| av高清不卡| 99久精品视频在线观看视频| 亚州av乱码久久精品蜜桃| 99在线精品视频在线观看| 蜜臀av一区二区三区| 免费人成黄页网站在线一区二区 | 午夜电影一区| 日韩av一区二区在线影视| 国产日韩欧美三区| 久久99性xxx老妇胖精品| 国产在线一区不卡| 久久人人精品| 国产精品三上| 欧美日韩亚洲一区二区三区在线| 国产精品手机在线播放| 国产成人免费视频网站视频社区| 在线成人动漫av| 视频一区二区三区在线| 日韩精品亚洲专区| 精品一区二区三区免费看| 日韩视频网站在线观看| 99视频+国产日韩欧美| 欧美日韩一区二区三区四区在线观看| 高潮久久久久久久久久久久久久| 国产精品原创| 99国产精品私拍| 欧美日韩精品一区二区三区视频| 成人精品视频| 久久国产精品99国产| 精品一区二区三区视频在线播放| 国产精品av久久久久久麻豆网| 亚洲精品激情| 黄色aa久久| 亚洲一区二区网站| 国产色99精品9i| 深夜视频一区二区| 亚洲美女久久| 精品一区二区三区的国产在线观看| 国产一区视频在线观看免费| 亚洲精品在线国产| 成人片免费看| 日韩欧美高清一区二区三区| 日韩精品电影| 日本欧美韩国一区三区| 群体交乱之放荡娇妻一区二区| 亚洲毛片网站| 日本免费一区二区三区四区| 日韩中出av| 日韩国产激情| 日韩va亚洲va欧美va久久| 99久久视频| 涩涩涩久久久成人精品| 日韩欧美不卡| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 日韩精品不卡一区二区| 亚洲香蕉久久| 国产aa精品| 亚洲一区欧美| 国产精品字幕| 国产探花一区二区| 亚洲免费成人| 成人国产精品久久| 亚洲性视频在线| 久久久影院免费| 国产精品www.| 亚洲视频国产| 日本韩国欧美超级黄在线观看| 91国内精品| 蜜桃视频欧美| 动漫av一区| 日本久久二区| 国产视频一区在线观看一区免费| 福利一区和二区| 奇米色欧美一区二区三区| 欧美日韩中文字幕一区二区三区 | 日本在线成人| 蜜桃视频欧美| 日韩欧美二区| 精品久久久网| 欧美日韩中出| 亚洲精品四区| 国产亚洲一区在线| 四虎4545www国产精品| 麻豆视频观看网址久久| 日本色综合中文字幕| 国产婷婷精品| 蜜臀久久99精品久久一区二区 | 欧美日韩一二三四| a天堂资源在线| 久久久国产精品网站| 91精品福利观看| 天堂va欧美ⅴa亚洲va一国产| 中文日韩在线| 午夜精品婷婷| 久久精品国产www456c0m| 国产aa精品| 精品视频在线一区二区在线| 国产日韩一区| 日本视频在线一区| 亚洲精品乱码| 亚洲影院天堂中文av色| 久久精品播放| 日韩欧美少妇| 亚洲成人av观看| 成人羞羞在线观看网站| 国产一区二区三区日韩精品| 免费在线欧美黄色| 国产精品videosex极品| 日韩av字幕| 国产毛片精品久久| 国产欧美日韩精品一区二区三区| 91九色综合| 欧美亚洲三区| 国产精品久av福利在线观看| 国产精选一区| 国产精品久久久久av蜜臀| 欧美日韩亚洲三区| 欧美黄页在线免费观看| 久久精品一本| 在线天堂中文资源最新版| 丝袜诱惑一区二区| 久久精品国产亚洲夜色av网站| 欧美久久精品一级c片| 黄色亚洲在线| 久久亚洲欧洲| 日韩综合小视频| 日本成人在线一区| 国产精品一区二区精品| 国产福利资源一区| 精品一区二区三区免费看| 91视频一区| 97在线精品| 在线成人直播| 亚洲精品亚洲人成在线观看| 国产精品永久| 丁香六月综合| 欧美日韩国产精品一区二区亚洲| 香蕉视频成人在线观看| 免费人成在线不卡| 国产图片一区| 日韩欧美三级| 国产日韩综合| 国产欧美自拍| 欧美男人天堂| 亚洲欧美日韩一区在线观看| 日产欧产美韩系列久久99| 日本精品国产| 精品中文在线| se01亚洲视频| 玖玖玖国产精品| 欧美亚洲tv| 欧美精品资源| 四虎精品一区二区免费| 欧美激情一区| 色婷婷久久久| 日本一区免费网站| 国产va免费精品观看精品视频| 亚洲高清成人| 日韩av一区二区在线影视| 91视频精品| 爽好久久久欧美精品| 日日摸夜夜添夜夜添国产精品| 美女在线视频一区| 欧洲激情综合| 国产精品入口久久| 亚洲精品.com| 日韩国产欧美三级| 亚洲va在线| 欧美有码在线| 久久中文字幕av| 欧美天堂一区| 亚洲一级黄色| 国产欧美一区二区精品久久久| 粉嫩av一区二区三区四区五区 | 久久国产亚洲精品| 欧美中文日韩| 精品国产中文字幕第一页| 亚洲经典在线| 精品一区二区三区视频在线播放 | 日韩欧美高清一区二区三区| 中文字幕色婷婷在线视频| 日韩中文字幕一区二区三区| 精品美女视频 | 久久精品国产99国产| 亚洲一区二区成人| 日韩成人精品一区| 亚洲aa在线| 精品中文字幕一区二区三区av| 欧美一区久久| 久热re这里精品视频在线6| 国产精品hd|