python工具編寫之paramiko實現SSH遠端連線

來源:互聯網
上載者:User

標籤:直接   timeout   miss   set   hosts   列印   int   上傳   代碼   

用戶端實現有三種方式:

1:用帳號密碼登陸

1.1直接使用SSHClient對象的exec_command()在服務端執行命令:

代碼實現:

import paramiko
import sys

def Usage():
    print "[Usage]./SSH_Client.py ip port command"


try:
    ip=sys.argv[1]
    port=int(sys.argv[2])
    command=sys.argv[3]
except:
    Usage()    


user="root"
passwd="root"
#執行個體化SSHClient
client=paramiko.SSHClient()
#自動添加策略,儲存伺服器的主機名稱和密鑰資訊
#用ssh串連遠程主機時,第一次串連時會提示是否繼續進行遠端連線,選擇yes 這句話會自動選擇yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#串連SSH服務端,以使用者名稱和密碼進行認證
client.connect(ip,port,username=user,password=passwd)
#開啟一個Channel 並執行命令
stdin,stdout,stderr=client.exec_command(command)
#列印執行結果 若有錯誤 stderr.read()就不為空白
if stderr.read()=="":
    for i in stdout.readlines():
        print i
client.close()

1.2執行個體化SSHClient的對象再得到一個Transport對象,以Transport對象的exec_command()在服務端執行命令

import sys
import paramiko

def Usage():
    print "[Usage]./SSH_Client.py ip port command"


try:
    ip=sys.argv[1]
    port=int(sys.argv[2])
    command=sys.argv[3]
except:
    Usage()    

# reload(sys)
# sys.setdefaultencoding(‘utf-8‘)    
user="root"
passwd="root"
#執行個體化SSHClient
client=paramiko.SSHClient()
#自動添加策略,儲存伺服器的主機名稱和密鑰資訊
#用ssh串連遠程主機時,第一次串連時會提示是否繼續進行遠端連線,選擇yes 這句話會自動選擇yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#串連SSH服務端,以使用者名稱和密碼進行認證
client.connect(ip,port,username=user,password=passwd)
#執行個體化Transport 建立session會話
ssh_session=client.get_transport().open_session()
if ssh_session.active:
    ssh_session.exec_command(command)
    print ssh_session.recv(4096)
client.close()              

2:用密鑰進行登陸

import paramiko
import sys

def Usage():
    print "[Usage]./SSH_Client.py ip port command"


try:
    ip=sys.argv[1]
    port=int(sys.argv[2])
    command=sys.argv[3]
except:
    Usage()    

user="root"

#執行個體化SSHClient
client=paramiko.SSHClient()
#指定用來解密的私密金鑰的路徑,需要手動產生
pkey_file = ‘/home/.ssh/id_rsa‘   
#使用私密金鑰解密
key = paramiko.RSAKey.from_private_key_file(pkey_file)    
#load_system_host_keys用於指定對方主機存放本機公開金鑰的位置,預設不加參數的話是將這個位置設定為~/.ssh/known_hosts
client.load_system_host_keys()
#自動添加策略,儲存伺服器的主機名稱和密鑰資訊
#用ssh串連遠程主機時,第一次串連時會提示是否繼續進行遠端連線,選擇yes 這句話會自動選擇yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#串連SSH服務端,以使用者名稱和密碼進行認證
client.connect(ip,port,username=user,key_filename=key,timeout=6)
#開啟一個Channel 並執行命令
stdin,stdout,stderr=client.exec_comment(command)
#列印執行結果 若有錯誤 stderr.read()就不為空白
if stderr.read()=="":
    print stdout.readlines()
client.close()

實現上傳下載:

import paramiko
#擷取Transport執行個體  參數為tuple
tran = paramiko.Transport(("192.168.72.130",22))
#串連SSH服務端
tran.connect(username ="root", password ="root")
#擷取SFTP執行個體
sftp = paramiko.SFTPClient.from_transport(tran)
#設定上傳的本地/遠程檔案路徑
#執行上傳動作
sftp.put("C:/7.der","/tmp/7.der")
sftp.get(‘/root/test.py‘,‘F:/test.py‘)
tran.close()

實現過程中出現的問題:

import paramiko時出現UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe9 in position 0: ordinal not in range(128) 錯誤

解決辦法:在python 安裝路徑下Lib\site.py 添加如下代碼:

import sys

reload(sys)

sys.setdefaultencoding(‘gbk‘)

經過測試 設定編碼為utf-8還是匯入不成功 設定為gbk可以成功匯入

登陸所要的密鑰需要手動產生:可以參考

http://blog.sina.com.cn/s/blog_7ae2408501018xsj.html

http://blog.csdn.net/fdipzone/article/details/47327183

 

python工具編寫之paramiko實現SSH遠端連線

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.