一、Centos安裝Paramiko
1、安裝組件 yum install openssl openssl-devel python-dev pycrypto -y yum install zlib-devel zlib (必須安裝,不安裝會報錯) 安裝zlib-devel需要對python3.5進行重新編譯安裝: cd /usr/local/src/Python-3.5.1 ./configure make & make install
2、安裝setuptools-19.6: wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 tar -zxvf setuptools-19.6.tar.gz cd setuptools-19.6 python3 setup.py build python3 setup.py install
3、安裝paramiko
下載:http://pan.baidu.com/s/1dFKYNq5 密碼:y2ml tar zxvf paramiko-1.14.0.tar.gz cd paramiko-1.14.0 python3 setup.py build sudo python3 setup.py install
4、報這個錯的話: ImportError: No module named 'cryptography' 安裝cryptography: pip3 install cryptography
沒有pip3的話在usr/local/Python3.5.1/bin/目錄找
二、Paramiko的使用:
1、基於賬號密碼的登錄:
import paramiko #創建SSH對象 ssh = paramiko.SSHClient() #允許不在know_host文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #連接服務器 ssh.connect(hostname='192.168.71.3',port=22,username='root',password='zedata') #獲取命令結果 stdin,stdout,stderr = ssh.exec_command('df -h') print(stdout.read().decode()) #輸出結果 print(stderr.read().decode()) #輸出錯誤結果
ssh.close()
2、基於公鑰的連接:
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='192.168.71.2', port=22, username='root', pkey=private_key) #注若遇到TypeError: connect() got an unexpected keyword argument 'key' 這個錯誤,將key改為pkey。 # 執行命令 stdin, stdout, stderr = ssh.exec_command('df') # 獲取命令結果 print(stdout.read().decode()) # 關閉連接 ssh.close()
3、基於用戶名密碼上傳下載
import paramiko transport = paramiko.Transport(('192.168.71.3',22)) transport.connect(username='root',password='123') sftp = paramiko.SFTPClient.from_transport(transport) # 將location.py 上傳至服務器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 將remove_path 下載到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
4、基於公鑰密鑰上傳下載
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') transport = paramiko.Transport(('192.168.71.3', 22)) transport.connect(username='root', pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport) # 將location.py 上傳至服務器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 將remove_path 下載到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
Paramiko升級(Centos):
注:有時候paramiko的版本低會出現這個報錯:paramiko.SSHException: Incompatible ssh peer (no acceptable kex algorithm)
pip install --upgrade pip
pip install paramiko --upgrade
