簡介
使用開源的Paramiko,我們就可以用Python代碼中通過SSH協議對遠程服務器執行操作,不需要手敲ssh命令,從而實現自動化運維。
ssh是一個協議,OpenSSH是其中一個開源實現,paramiko庫,實現了SSHv2協議(底層使用cryptography)。
項目文檔:點我跳轉
擴展:ssh協議,OpenSSH
上手
1、安裝
pip install paramiko
2、導入模塊
import paramiko
3、使用
def initSshClinet(): ''' 初始化,SSH連接賬號密碼登錄服務器 :return: sshClinet ''' ip = ""#服務器ip地址 sshClinet = paramiko.SSHClient() sshClinet.set_missing_host_key_policy(paramiko.AutoAddPolicy()) sshClinet.connect(ip, 22, userName, pw, timeout=360) return sshClinet
def exeCommond(commond): ''' 執行shell命令 ''' stdin, stdout, stderr = sshClient.exec_command(command) outStr = stdout.readlines() print("/n".join(outStr))
def sftpUploadFile(localPath, remotePath): #獲取SFTP實例 sftp = sshClinet.open_sftp() #執行上傳動作 sftp.put(localPath, remotePath)
def sftpDownloadFile(localPath, remotePath): #獲取SFTP實例 sftp = sshClinet.open_sftp() #執行下載動作 sftp.get(localPath, remotePath)
末尾記得要關閉連接
sshClient.close()
也可以使用私鑰登錄:
# 配置私人密鑰文件位置private = paramiko.RSAKey.from_private_key_file('/Users/ch/.ssh/id_rsa')#實例化SSHClientclient = paramiko.SSHClient() #自動添加策略,保存服務器的主機名和密鑰信息,如果不添加,那么不再本地know_hosts文件中記錄的主機將無法連接client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #連接SSH服務端,以用戶名和密碼進行認證client.connect(hostname='10.0.0.1',port=22,username='root',pkey=private)
學習
paramiko包含兩個核心組件:SSHClient和SFTPClient。
SSHClient的作用類似于Linux的ssh命令,是對SSH會話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于執行遠程命令。 SFTPClient的作用類似與Linux的sftp命令,是對SFTP客戶端的封裝,用以實現遠程文件操作,如文件上傳、下載、修改文件權限等操作。名詞 | 解釋 |
---|---|
Channel | 是一種類Socket,一種安全的SSH傳輸通道 |
Transport | 是一種加密的會話,使用時會同步創建了一個加密的Tunnels(通道),這個Tunnels叫做Channel |
Session | 是client與Server保持連接的對象,用connect()/start_client()/start_server()開始會話 |
新聞熱點
疑難解答