文章插圖

文章插圖
如果現在需要在 Linux 服務器上執行一系列命令(比如搭建 LNMP 環境)我應該會第一時間想到想辦法寫個 Shell 腳本 , 然后扔上去執行以下看看結果 。
【遠程快捷鍵命令 遠程控制的快捷鍵】然而一貫懶惰的我并不想這么去執行 Shell 和一些重復命令 。所以俺尋思可以有個方法本地直接在服務器端執行腳本 , 尋思生異端 , 這時候有某大技霸告訴我有個叫 paramiko 的 Python 庫 , 從此開啟我新世界的大門 。
paramiko 實現了 SSHv2 協議(底層使用 cryptography ) , 包含兩個核心組件:SSHClient 和 SFTPClient。SSHClient 是對 SSH 會話的封裝 , 用于執行遠程命令 , SFTPClient 是對 SFTP 客戶端的封裝 , 用以實現遠程文件操作 。
這里先舉兩個列子你應該就明白怎么用了 , 終于開始正片了 。
# -*- coding: utf-8 -*-import paramikoclient = paramiko.SSHClient()# 實例化SSHClientclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 自動添加策略 , 保存服務器的主機名和密鑰信息 , 如果不添加 , 那么不再本地know_hosts文件中記錄的主機將無法連接client.connect(hostname='192.168.23.134', port=22, username='ftoz', password='123456')# 連接SSH服務端 , 以用戶名和密碼進行認證# 打開一個Channel并執行命令stdin, stdout, stderr = client.exec_command('ls')# stdout 為正確輸出 , stderr為錯誤輸出 , 同時是有1個變量有值# 打印執行結果print(stdout.read().decode('utf-8'))# 關閉SSHClientclient.close()輸出:client = paramiko.SSHClient() , client.set_missing_host_key_policy(paramiko.AutoAddPolicy())你可以理解為固定姿勢 。client.connect(hostname='192.168.1.105', port=22, username='ftoz',password='123456')這里就是你的linux變量依次為地址、端口(總共65535個端口 , 不過ssh默認是22端口)、登錄名、密碼 。stdin, stdout, stderr = client.exec_command('df -h ')這里就是核心你需要做的shell命令 , 這三個變量不用按照這種姿勢 , 你可以隨意 , 不過按照順序你知道里面裝的什么數據就行(重點在輸出和錯誤) 。connect():這個是實現遠程服務器連接和認證的 , 參數有:hostname 連接的目標主機port=SSH_PORT 指定端口username=None 驗證的用戶名password=None 驗證的用戶密碼pkey=None 私鑰方式用于身份驗證key_filename=None 一個文件名或文件列表 , 指定私鑰文件timeout=None 可選的tcp連接超時時間allow_agent=True, 是否允許連接到ssh代理 , 默認為True 允許look_for_keys=True 是否在~/.ssh中搜索私鑰文件 , 默認為True 允許compress=False, 是否打開壓縮 。set_missing_host_key_policy():這個是設置遠程服務器沒有在know_hosts文件中記錄時的應對策略 。(可以理解為避免報錯) , 參數有:AutoAddPolicy 自動添加主機名及主機密鑰到本地HostKeys對象 , 不依賴load_system_host_key的配置 。即新建立ssh連接時不需要再輸入yes或no進行確認WarningPolicy 用于記錄一個未知的主機密鑰的python警告 。并接受 , 功能上和AutoAddPolicy類似 , 但是會提示是新連接RejectPolicy 自動拒絕未知的主機名和密鑰 , 依賴load_system_host_key的配置 。此為默認選項exec_command():這是寫你需要執行的命令的接下來你就可以拿出輸出做一些該干嘛(ke)干嘛(pa)的事情了 , 這里先舉這個簡單的列子 。2020 精選 阿里/騰訊等一線大廠 面試、簡歷、進階、電子書 私聊我回復「資料」免費獲取SFTPClient 常用方法:
t = paramiko.Transport(('192.168.23.134', 22))# 獲取Transport實例t.connect(username='ftoz', password='123456')# 連接SSH服務端 , 使用passwordsftp = paramiko.SFTPClient.from_transport(t)sftp.put("F:S12312.txt","/home/ftoz/zxc12312.txt")#執行上傳動作sftp.get("/home/ftoz/zxc12312.txt", "F:S12312.txt")#執行下載動作t.close()SFTPCLient 作為一個 sftp 的客戶端對象 , 根據 ssh 傳輸協議的 sftp 會話 , 實現遠程文件操作 , 如上傳、下載、權限、狀態from_transport(cls,t) 創建一個已連通的SFTP客戶端通道put(localpath, remotepath, callback=None, confirm=True) 將本地文件上傳到服務器 參數confirm:是否調用stat()方法檢查文件狀態 , 返回ls -l的結果get(remotepath, localpath, callback=None) 從服務器下載文件到本地mkdir() 在服務器上創建目錄remove() 在服務器上刪除目錄rename() 在服務器上重命名目錄stat() 查看服務器文件狀態listdir() 列出服務器目錄下的文件最后養成隨關閉的好習慣 client.close() 。- 遠程無線監控攝像頭需要網絡嗎 攝像頭能遠程監控嗎
- mac蘋果電腦怎么截圖快捷鍵 蘋果電腦怎么截圖快捷鍵,鍵盤上沒有shift
- eclipse中多行注釋的快捷鍵 eclipse怎么用快捷鍵注釋多行代碼
- excel保存快捷鍵是多少 excel2010另存為快捷鍵
- 遠程命令執行漏洞怎么處理 遠程命令執行漏洞web
- 重啟資源管理器快捷鍵 重啟資源管理器有什么影響
- 表格打勾怎么打快捷鍵 word表格打勾怎么打
- 電腦遠程命令單詞 電腦遠程命令是什么
- 電腦運行輸入什么命令看配置 電腦用命令看配置
- windows查詢端口占用命令 windows查看端口號被占用的命令
