python paramiko連接ssh實現命令
paramiko
paramiko是一個用於做遠程控制的模塊,使用該模塊可以對遠程服務器進行命令或文件操作,值得一說的是,fabric和ansible內部的遠程管理就是使用的paramiko來現實。
安裝
pip install paramiko
模塊使用
執行命令—用戶名+密碼
#!/usr/bin/env python #coding:utf-8 import paramiko # 建立一個sshclient對象 ssh = paramiko.SSHClient() # 允許將信任的主機自動加入到host_allow 列表,此方法必須放在connect方法的前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 調用connect方法連接服務器 ssh.connect('192.168.1.108', 22, 'alex', '123') # 執行命令 stdin, stdout, stderr = ssh.exec_command('df') # 結果放到stdout中,如果有錯誤將放到stderr中 print(stdout.read().decode('utf-8')) # 關閉連接 ssh.close();
paramiko\ecdsakey.py:164: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
self.ecdsa_curve.curve_class(), pointinfoparamiko\kex_ecdh_nist.py:39: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
m.add_string(self.Q_C.public_numbers().encode_point())paramiko\kex_ecdh_nist.py:96: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
self.curve, Q_S_bytesparamiko\kex_ecdh_nist.py:111: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
hm.add_string(self.Q_C.public_numbers().encode_point())
原因
paramiko 2.4.2 依賴 cryptography,而最新的cryptography==2.5裡有一些棄用的API。
解決
刪掉cryptography,安裝2.4.2,就不會報錯瞭。
pip uninstall cryptography
pip install cryptography==2.4.2
執行命令 -秘鑰
import paramiko private_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('主機名 ', 端口, '用戶名', key) stdin, stdout, stderr = ssh.exec_command('df') print(stdout.read().decode("utf-8")) ssh.close()
上傳下載文件—用戶名密碼
import os,sys import paramiko t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='derek',password='123') sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/tmp/test.py','/tmp/test.py') t.close() import os,sys import paramiko t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='derek',password='123') sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/tmp/test.py','/tmp/test2.py') t.close()
上傳下載文件-用戶名秘鑰
import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='derek',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/tmp/test3.py','/tmp/test3.py') t.close() import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='derek',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/tmp/test3.py','/tmp/test4.py') t.close()
以上就是python paramiko連接ssh實現命令的詳細內容,更多關於python paramiko連接ssh的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python基於paramiko庫遠程執行 SSH 命令,實現 sftp 下載文件
- 使paramiko庫執行命令時在給定的時間強制退出功能的實現
- python 第三方庫paramiko的常用方式
- python 遠程執行命令的詳細代碼
- Python使用paramiko連接遠程服務器執行Shell命令的實現