開發堡壘機以前,先來學習Python的paramiko模塊,該模塊基於SSH用於鏈接遠程服務器並執行相關操做python
安裝paramiko模塊bash
pip3 install paramiko
基於用戶密碼方式服務器
import paramiko # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname="10.0.0.200", port=22, username='root', password='1') # 執行命令 # stdin:標準輸入(就是你輸入的命令);stdout:標準輸出(就是命令執行結果);stderr:標準錯誤(命令執行過程當中若是出錯了就把錯誤打到這裏),stdout和stderr僅會輸出一個 stdin, stdout, stderr = ssh.exec_command('df') # 獲取命令結果 result = (stdout.read().decode('utf-8')) # 這個有問題,若是執行的命令是錯誤的,會不顯示錯誤,能夠修改一下,先判斷stdout有沒有值,若是輸出沒有,就顯示錯誤 print(result) # 關閉鏈接 ssh.close()
基於公鑰密鑰鏈接ssh
import paramiko # 指定私鑰路徑 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='10.0.0.171', port=22, username='root', pkey=private_key) # 執行命令 stdin, stdout, stderr = ssh.exec_command('df') # 獲取命令結果 result = stdout.read() print(result.decode()) # 關閉鏈接 ssh.close()