摘要:模塊為的縮寫,由的網絡小組所制定為建立在應用層基礎上的安全協議。是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用該模塊,可以方便的進行連接和協議進行文件傳輸。
paramiko模塊
SSH 為 Secure Shell 的縮寫,由 IETF 的網絡小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題.
paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平臺通過SSH從一個平臺連接到另外一個平臺。利用該模塊,可以方便的進行ssh連接和sftp協議進行sftp文件傳輸。
遠程密碼連接#基于ssh,用于連接遠程服務器做操作:遠程執行命令,上傳或下載文件 import paramiko #創建一個ssh對象 client = paramiko.SSHClient() #2.解決問題:首次連接,會出現 # Are you sure you want to continue connecting (yes/no)? yes # 自動選擇yes # 允許連接不在know_hosts文件中的主機 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #3.連接服務器 client.connect(hostname="172.25.254.19",port=22,username="root",password="westos") #4.執行操作 stdin,stdout,stderr = client.exec_command("hostname")#標準輸入,標準輸出,標準錯誤輸出。 #Execute a command on the SSH server. A new `.Channel` is opened and # the requested command is executed. The command"s input and output # streams are returned as Python ``file``-like objects representing # stdin, stdout, and stderr. #5.獲取命令的執行結果 res = stdout.read().decode("utf-8")#使結果具有可讀性 print(res) #6.斷開連接 client.close()批量連接
批量連接host.txt文件中的主機,返回執行結果
格式:172.25.254.1:22:root:westos
import paramiko with open("host.txt") as f: #保證host.txt文件在當前目錄下 hostinfos = f.readlines() #列表形式,["172.25.254.1:22:root:westos ", "172.25.254.2:22:root:westos ", "172.25.254.3:22:root:westos ", "172.25.254.19:22:root:westos "] for hostinfo in hostinfos: hostinfo = hostinfo.strip() #去掉空格,字符串格式,172.25.254.2:22:root:westos print("正在連接%s主機" %(hostinfo.split(":")[0])) hostname,port,username,passwd = hostinfo.split(":") try: client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=hostname,port=port,username=username,password=passwd) stdin,stdout,stderr = client.exec_command("hostname") res = stdout.read().decode("utf-8") print("結果為:",res) except Exception as e : print("Connection is failed,the reason is :",e) finally: client.close() print("連接結束")基于公鑰連接
免密登錄遠程主機
首先在需要連接的主機上生成一對公鑰和私鑰,本機獲取到需要連接的主機的私鑰時,就可以通過公私鑰配對,登陸遠程主機。
這里需要id_rsa存放你所連接的主機的私鑰
import paramiko from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException def conn(cmd,hostname,port=22,username="root"): client = paramiko.SSHClient() private_key = paramiko.RSAKey.from_private_key_file("id_rsa")#id_rsa存放私鑰 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: client.connect(hostname=hostname, port=port,username=username,pkey=private_key) except NoValidConnectionsError as e: print("...連接失敗...") except AuthenticationException as e: print("...密碼錯誤...") else: stdin, stdout, stderr = client.exec_command(cmd) result = stdout.read().decode("utf-8") print(result) finally: client.close() if __name__=="__main__": for count in range(13,20): hostname = "172.25.254.%s" %(count) print("正在連接主機:",hostname) conn("hostname",hostname) print("...連接結束...")基于用戶名密碼上傳下載文件
sftp是Secure File Transfer Protocol的縮寫,安全文件傳送協議。可以為傳輸文件提供一種安全的網絡的加密方法。
import paramiko tran = paramiko.Transport("172.25.254.19",22) tran.connect(username="root",password="westos") sftp = paramiko.SFTPClient.from_transport(tran) #class SFTPClient(BaseSFTP, ClosingContextManager) #SFTP client object. # Used to open an SFTP session across an open SSH `.Transport` and perform # remote file operations. # Instances of this class may be used as context managers. sftp.put("/home/kiosk/PycharmProjects/day18/07_pratice.py","/mnt/practice.py") sftp.get("/mnt/passwd","hallo") tran.close()paramiko再封裝
使paramiko模塊執行自己想要的操作
import paramiko import os from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException, SSHException class SshRrmote(object): def __init__(self,cmd,hostname,port,username,passwd): self.hostname = hostname self.passwd = passwd self.cmd = cmd self.username = username self.port = port def run(self): """默認調用的內容""" # cmd hostname # put local_file remote_file # get remote_file local_file cmd_str = self.cmd.split()[0] # cmd # 類的反射, 判斷類里面是否可以支持該操作? if hasattr(self, "do_" + cmd_str): # do_cmd getattr(self, "do_" + cmd_str)() else: print("目前不支持該功能") def do_cmd(self): client = paramiko.SSHClient() try: client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=self.hostname,port=int(self.port),username=self.username,password=self.passwd) except NoValidConnectionsError as e: print("...連接失敗...") except AuthenticationException as e: print("...密碼錯誤...") else: cmd = " ".join(self.cmd.split()[1:]) stdin, stdout, stderr = client.exec_command(cmd) result = stdout.read().decode("utf-8") print("執行結果",result) finally: print("斷開%s的連接" %(self.hostname)) client.close() def do_get(self): #有待改進,因為連接多個主機時,會覆蓋文件 print("開始下載") try: trans = paramiko.Transport(self.hostname,int(self.port)) trans.connect(username=self.username,password=self.passwd) print("hello") except SSHException as e: print("連接失敗") else: sftp = paramiko.SFTPClient.from_transport(trans) cmd = self.cmd.split()[1:] if len(cmd)==2: sftp.get(cmd[0],cmd[1]) print("下載文件%s成功,并保存為%s" %(cmd[0],cmd[1])) else: print("參數有誤") trans.close() def do_put(self): # put /tmp/passwd /tmp/passwd # 將本機的/tmp/passwd文件上傳到遠程主機的/tmp/passwd; print("開始上傳") #注意你使用的用戶是否為kiosk try: trans = paramiko.Transport(self.hostname, int(self.port)) trans.connect(username=self.username, password=self.passwd) except SSHException as e: print("連接失敗") else: sftp = paramiko.SFTPClient.from_transport(trans) cmd = self.cmd.split()[1:] if len(cmd) == 2: sftp.put(cmd[0],cmd[1]) print("上傳文件%s成功,并保存為%s" %(cmd[0], cmd[1])) else: print("參數有誤") trans.close() #1.選擇要操作的主機組:mysql,web,ftp # 主機信息怎么存?將不同的主機信息存放在不同的文件中 #2.根據選擇的主機組,顯示包含的主機IP/主機名 #3.讓用戶確認信息,選擇需要批量執行的命令 # -cmd shell命令 # -put 本地文件 遠程文件 # -get 遠程文件 本地文件 def main(): groups = [file.rstrip(".conf") for file in os.listdir("conf")] print("主機組顯示".center(50,"*")) [print(" ",item) for item in groups] choiceGroup = input("請選擇批量操作的主機組(eg:web):") with open("conf/"+choiceGroup+".conf") as f: info = f.readlines() print("批量執行腳本".center(50, "*")) while True: cmd = input(">>").strip() if cmd: if cmd =="exit": print("連接執行結束") break for item in info: item=item.strip() print(item.split(":")[0].center(50,"-")) hostname,port,username,passwd = item.split(":") ssh = SshRrmote(cmd,hostname,port,username,passwd) ssh.run() main()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42458.html
摘要:是一個用于做遠程控制的模塊,使用該模塊可以對遠程服務器進行命令或文件操作,值得一說的是,和內部的遠程管理就是使用的來現實。 paramiko paramiko是一個用于做遠程控制的模塊,使用該模塊可以對遠程服務器進行命令或文件操作,值得一說的是,fabric和ansible內部的遠程管理就是使用的paramiko來現實。 1、下載安裝 pycrypto,由于 paramiko 模塊內部...
摘要:協程實現連接在網絡通信中,每個連接都必須創建新線程或進程來處理,否則,單線程在處理連接的過程中,無法接受其他客戶端的連接。所以我們嘗試使用協程來實現服務器對多個客戶端的響應。 協程實現TCP連接 在網絡通信中,每個連接都必須創建新線程(或進程) 來處理,否則,單線程在處理連接的過程中, 無法接受其他客戶端的連接。所以我們嘗試使用協程來實現服務器對多個客戶端的響應。與單一TCP通信的構架...
摘要:是建立可靠連接,并且通信雙方都可以以流的形式發送數據。相對,則是面向無連接的協議。測試結果用兩個命令行分別啟動服務器和客戶端測試開啟服務端完成一次通信 UDP TCP是建立可靠連接, 并且通信雙方都可以以流的形式發送數據。 相對TCP, UDP則是面向無連接的協議。使用UDP協議時, 不需要建立連接, 只需要知道對方的IP地址和端口號, 就可以直接發數據包。 但是, 能不能到達就不知道...
摘要:是基于實現的遠程安全連接,支持認證及密鑰方法。利用函數發送到,通過函數獲取回顯。如下全局屬性設定對象的作用是定義的全局設定,支持多個屬性及自定義屬性。相比確實簡化了不少。出現異常時,發出警告,繼續執行,不要終止。 paramiko paramiko是基于Python實現的SSH2遠程安全連接,支持認證及密鑰方法。可以實現遠程命令執行,文件傳輸,中間SSH代理等功能,相對于Pexpect...
摘要:數據傳輸方式輸入類控件表單元素也稱表單控件,按照填寫方式分為輸入類和下拉菜單類。按鈕的名字按鈕上顯示的文本重置菜單列表控件下拉菜單可以節省頁面空間。是單標簽,用來定義下拉菜單中的選項。表示初始被選中的選項。 當用戶熟悉了靜態網頁制作后就能感受到它的功能單一,會想建立具有交互性的動態網站。動態網站經常用到的一個元素就是表單。表單是HTML的一個重要組成部分,是網站管理員與用戶之間溝通的橋...
閱讀 2078·2023-04-25 17:57
閱讀 1284·2021-11-24 09:39
閱讀 2482·2019-08-29 16:39
閱讀 3311·2019-08-29 13:44
閱讀 3116·2019-08-29 13:14
閱讀 2313·2019-08-26 11:36
閱讀 3809·2019-08-26 11:00
閱讀 948·2019-08-26 10:14