最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python模塊之paramiko實例代碼

 更新時間:2018年01月31日 08:37:25   作者:songfreeman  
這篇文章主要介紹了python模塊之paramiko,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是python模塊之paramiko的相關用法,具體實現(xiàn)代碼如下,一起來看看。

paramiko模塊提供了ssh及sft進行遠程登錄服務器執(zhí)行命令和上傳下載文件的功能。這是一個第三方的軟件包,使用之前需要安裝。

1 基于用戶名和密碼的 sshclient 方式登錄

# 建立一個sshclient對象
ssh = paramiko.SSHClient()
# 允許將信任的主機自動加入到host_allow 列表,此方法必須放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 調(diào)用connect方法連接服務器
ssh.connect(hostname='192.168.2.129', port=22, username='super', password='super')
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('df -hl')
# 結(jié)果放到stdout中,如果有錯誤將放到stderr中
print(stdout.read().decode())
# 關閉連接
ssh.close()

2 基于用戶名和密碼的 transport 方式登錄

方法1是傳統(tǒng)的連接服務器、執(zhí)行命令、關閉的一個操作,有時候需要登錄上服務器執(zhí)行多個操作,比如執(zhí)行命令、上傳/下載文件,方法1則無法實現(xiàn),可以通過如下方式來操作

# 實例化一個transport對象
trans = paramiko.Transport(('192.168.2.129', 22))
# 建立連接
trans.connect(username='super', password='super')

# 將sshclient的對象的transport指定為以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans
# 執(zhí)行命令,和傳統(tǒng)方法一樣
stdin, stdout, stderr = ssh.exec_command('df -hl')
print(stdout.read().decode())

# 關閉連接
trans.close()

3 基于公鑰密鑰的 SSHClient 方式登錄

# 指定本地的RSA私鑰文件,如果建立密鑰對時設置的有密碼,password為設定的密碼,如無不用指定password參數(shù)
pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')
# 建立連接
ssh = paramiko.SSHClient()
ssh.connect(hostname='192.168.2.129',
      port=22,
      username='super',
      pkey=pkey)
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('df -hl')
# 結(jié)果放到stdout中,如果有錯誤將放到stderr中
print(stdout.read().decode())
# 關閉連接
ssh.close()

以上需要確保被訪問的服務器對應用戶.ssh目錄下有authorized_keys文件,也就是將服務器上生成的公鑰文件保存為authorized_keys。并將私鑰文件作為paramiko的登陸密鑰

4 基于密鑰的 Transport 方式登錄

# 指定本地的RSA私鑰文件,如果建立密鑰對時設置的有密碼,password為設定的密碼,如無不用指定password參數(shù)
pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')
# 建立連接
trans = paramiko.Transport(('192.168.2.129', 22))
trans.connect(username='super', pkey=pkey)

# 將sshclient的對象的transport指定為以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans

# 執(zhí)行命令,和傳統(tǒng)方法一樣
stdin, stdout, stderr = ssh.exec_command('df -hl')
print(stdout.read().decode())

# 關閉連接

##### 傳文件 SFTP ###########

# 實例化一個trans對象# 實例化一個transport對象
trans = paramiko.Transport(('192.168.2.129', 22))
# 建立連接
trans.connect(username='super', password='super')

# 實例化一個 sftp對象,指定連接的通道
sftp = paramiko.SFTPClient.from_transport(trans)
# 發(fā)送文件
sftp.put(localpath='/tmp/11.txt', remotepath='/tmp/22.txt')
# 下載文件
# sftp.get(remotepath, localpath)
trans.close()

5 實現(xiàn)輸入命令立馬返回結(jié)果的功能

以上操作都是基本的連接,如果我們想實現(xiàn)一個類似xshell工具的功能,登錄以后可以輸入命令回車后就返回結(jié)果:

import paramiko
import os
import select
import sys

# 建立一個socket
trans = paramiko.Transport(('192.168.2.129', 22))
# 啟動一個客戶端
trans.start_client()

# 如果使用rsa密鑰登錄的話
'''
default_key_file = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
prikey = paramiko.RSAKey.from_private_key_file(default_key_file)
trans.auth_publickey(username='super', key=prikey)
'''
# 如果使用用戶名和密碼登錄
trans.auth_password(username='super', password='super')
# 打開一個通道
channel = trans.open_session()
# 獲取終端
channel.get_pty()
# 激活終端,這樣就可以登錄到終端了,就和我們用類似于xshell登錄系統(tǒng)一樣
channel.invoke_shell()
# 下面就可以執(zhí)行你所有的操作,用select實現(xiàn)
# 對輸入終端sys.stdin和 通道進行監(jiān)控,
# 當用戶在終端輸入命令后,將命令交給channel通道,這個時候sys.stdin就發(fā)生變化,select就可以感知
# channel的發(fā)送命令、獲取結(jié)果過程其實就是一個socket的發(fā)送和接受信息的過程
while True:
  readlist, writelist, errlist = select.select([channel, sys.stdin,], [], [])
  # 如果是用戶輸入命令了,sys.stdin發(fā)生變化
  if sys.stdin in readlist:
    # 獲取輸入的內(nèi)容
    input_cmd = sys.stdin.read(1)
    # 將命令發(fā)送給服務器
    channel.sendall(input_cmd)

  # 服務器返回了結(jié)果,channel通道接受到結(jié)果,發(fā)生變化 select感知到
  if channel in readlist:
    # 獲取結(jié)果
    result = channel.recv(1024)
    # 斷開連接后退出
    if len(result) == 0:
      print("\r\n**** EOF **** \r\n")
      break
    # 輸出到屏幕
    sys.stdout.write(result.decode())
    sys.stdout.flush()

# 關閉通道
channel.close()
# 關閉鏈接
trans.close()

6 支持tab自動補全

import paramiko
import os
import select
import sys
import tty
import termios

'''
實現(xiàn)一個xshell登錄系統(tǒng)的效果,登錄到系統(tǒng)就不斷輸入命令同時返回結(jié)果
支持自動補全,直接調(diào)用服務器終端

'''
# 建立一個socket
trans = paramiko.Transport(('192.168.2.129', 22))
# 啟動一個客戶端
trans.start_client()

# 如果使用rsa密鑰登錄的話
'''
default_key_file = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
prikey = paramiko.RSAKey.from_private_key_file(default_key_file)
trans.auth_publickey(username='super', key=prikey)
'''
# 如果使用用戶名和密碼登錄
trans.auth_password(username='super', password='super')
# 打開一個通道
channel = trans.open_session()
# 獲取終端
channel.get_pty()
# 激活終端,這樣就可以登錄到終端了,就和我們用類似于xshell登錄系統(tǒng)一樣
channel.invoke_shell()

# 獲取原操作終端屬性
oldtty = termios.tcgetattr(sys.stdin)
try:
  # 將現(xiàn)在的操作終端屬性設置為服務器上的原生終端屬性,可以支持tab了
  tty.setraw(sys.stdin)
  channel.settimeout(0)

  while True:
    readlist, writelist, errlist = select.select([channel, sys.stdin,], [], [])
    # 如果是用戶輸入命令了,sys.stdin發(fā)生變化
    if sys.stdin in readlist:
      # 獲取輸入的內(nèi)容,輸入一個字符發(fā)送1個字符
      input_cmd = sys.stdin.read(1)
      # 將命令發(fā)送給服務器
      channel.sendall(input_cmd)

    # 服務器返回了結(jié)果,channel通道接受到結(jié)果,發(fā)生變化 select感知到
    if channel in readlist:
      # 獲取結(jié)果
      result = channel.recv(1024)
      # 斷開連接后退出
      if len(result) == 0:
        print("\r\n**** EOF **** \r\n")
        break
      # 輸出到屏幕
      sys.stdout.write(result.decode())
      sys.stdout.flush()
finally:
  # 執(zhí)行完后將現(xiàn)在的終端屬性恢復為原操作終端屬性
  termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

# 關閉通道
channel.close()
# 關閉鏈接
trans.close()

總結(jié)

以上就是本文關于python模塊之paramiko實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • python方法如何實現(xiàn)字符串反轉(zhuǎn)

    python方法如何實現(xiàn)字符串反轉(zhuǎn)

    這篇文章主要介紹了python方法如何實現(xiàn)字符串反轉(zhuǎn)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • pycharm遠程連接服務器運行pytorch的過程詳解

    pycharm遠程連接服務器運行pytorch的過程詳解

    這篇文章主要介紹了在Linux環(huán)境下使用Anaconda管理不同版本的Python環(huán)境,并通過PyCharm遠程連接服務器來運行PyTorch的過程,包括安裝PyTorch、CUDA以及配置PyCharm遠程開發(fā)環(huán)境的詳細步驟,需要的朋友可以參考下
    2025-02-02
  • python爬蟲泛濫的解決方法詳解

    python爬蟲泛濫的解決方法詳解

    在本篇文章里小編給大家整理了關于python爬蟲泛濫的解決方法詳解內(nèi)容,需要的朋友們可以學習參考下。
    2020-11-11
  • python使用Tkinter顯示網(wǎng)絡圖片的方法

    python使用Tkinter顯示網(wǎng)絡圖片的方法

    這篇文章主要介紹了python使用Tkinter顯示網(wǎng)絡圖片的方法,涉及Python操作圖片的相關技巧,需要的朋友可以參考下
    2015-04-04
  • wxPython學習之主框架實例

    wxPython學習之主框架實例

    這篇文章主要介紹了wxPython學習之主框架應用實例,以一個基礎的彈出窗體實例講述了wxPython主框架應用程序的實現(xiàn)方法,需要的朋友可以參考下
    2014-09-09
  • Python實現(xiàn)讀取TXT文件數(shù)據(jù)并存進內(nèi)置數(shù)據(jù)庫SQLite3的方法

    Python實現(xiàn)讀取TXT文件數(shù)據(jù)并存進內(nèi)置數(shù)據(jù)庫SQLite3的方法

    這篇文章主要介紹了Python實現(xiàn)讀取TXT文件數(shù)據(jù)并存進內(nèi)置數(shù)據(jù)庫SQLite3的方法,涉及Python針對txt文件的讀取及sqlite3數(shù)據(jù)庫的創(chuàng)建、插入、查詢等相關操作技巧,需要的朋友可以參考下
    2017-08-08
  • python隊列queue模塊詳解

    python隊列queue模塊詳解

    這篇文章主要為大家詳細介紹了python隊列queue模塊的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • yolov5使用flask部署至前端實現(xiàn)照片\視頻識別功能

    yolov5使用flask部署至前端實現(xiàn)照片\視頻識別功能

    初學者在使用YOLO和Flask構(gòu)建應用時,往往需要實現(xiàn)上傳圖片和視頻的識別功能,本文介紹了如何在Flask框架中實現(xiàn)這一功能,包括文件上傳、圖片放大查看、視頻識別以及識別后的文件下載,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • Pandas中DataFrame對象轉(zhuǎn)置(交換行列)

    Pandas中DataFrame對象轉(zhuǎn)置(交換行列)

    本文主要介紹了Pandas中DataFrame對象轉(zhuǎn)置(交換行列),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python合并重疊矩形框

    Python合并重疊矩形框

    這篇文章主要介紹了Python合并重疊矩形框,循環(huán)+遞歸,依次判斷兩個框是否有重疊,下面具體實現(xiàn)過程需要的小伙伴可以參考一下
    2022-03-03

最新評論

镶黄旗| 哈巴河县| 木里| 盖州市| 郓城县| 临高县| 海晏县| 会昌县| 渑池县| 通海县| 泰安市| 长岛县| 东明县| 大邑县| 新沂市| 九寨沟县| 逊克县| 大庆市| 莱西市| 涡阳县| 林州市| 通化县| 台北县| 镇雄县| 孟津县| 西乡县| 安达市| 肥东县| 朔州市| 咸阳市| 确山县| 镇江市| 威海市| 张家港市| 沙田区| 海口市| 天长市| 时尚| 泌阳县| 琼中| 井陉县|