欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python操作遠程服務器 paramiko模塊詳細介紹

 更新時間:2019年08月07日 10:12:58   作者:BengDou_Do&Think  
這篇文章主要介紹了Python操作遠程服務器 paramiko模塊詳細介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

paramiko模塊是基于Python實現(xiàn)的SSH遠程安全連接,可以提供在遠程服務器上執(zhí)行命令、上傳文件到服務器或者從指定服務器下載文件的功能。

paramiko模塊安裝方法

paramiko模塊不是python自帶的標準庫,需要自行下載安裝,建議使用pip自動安裝。方法如下:

(1)配置pip命令和鏡像源路徑。如果已配置,跳過。

(2)執(zhí)行pip install paramiko進行安裝。出現(xiàn)successful字樣表示安裝完成。

paramiko常用函數(shù)介紹

SSHclient類

(1)ssh遠程連接服務器,格式為:connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, ...)。其中hostname表示主機IP,port表示ssh服務端口號,默認是22,username和password表示登錄用戶名和密碼,timeout表示設置連接超時時長。

(2)遠程主機沒有本地主機密鑰或HostKeys對象時的連接方法。格式為:set_missing_host_key_policy(policy)。其中policy

參數(shù)常見取值有3種,分別如下:

  • AutoAddPolicy:自動添加主機名及主機密鑰到本地的known_hosts,不依賴load_system_host_key的配置。即新建立ssh連接時不需要再輸入yes或no進行確認。最為常用。
  • WarningPolicy 用于記錄一個未知的主機密鑰的python警告。并接受,功能上和AutoAddPolicy類似,但是會提示是新連接。
  • RejectPolicy 自動拒絕未知的主機名和密鑰,依賴load_system_host_key的配置。此為默認選項

(3)遠程執(zhí)行命令,函數(shù)格式:exec_command(command, bufsize=-1, timeout=None, get_pty=False, environment=None),該命令的輸入與輸出流為標準輸入、標出輸出、標準錯誤輸出。

(4)在遠程服務器上生成新的交互式shell。函數(shù)格式為:invoke_shell(term='vt100', width=80, height=24, width_pixels=0, height_pixels=0, environment=None)。

上述只是介紹了SSHclient類常用的幾個函數(shù)。SSHclient類函數(shù)詳細介紹參考SSHClient

SFTPClient類

(1)創(chuàng)建一個已連通的SFTP客戶端通道,格式為:from_transport(cls,t)

(2)將本地文件上傳到服務器,格式為:put(localpath, remotepath, callback=None, confirm=True)

(3)從服務器下載文件到本地,格式為:get(remotepath, localpath, callback=None)

(4)在服務器上創(chuàng)建目錄,格式為:mkdir()

(5)在服務器上刪除目錄,格式為:remove()

(6)在服務器上重命名目錄,格式為:rename()

(7) 查看服務器文件狀態(tài),格式為:stat()

(8)列出服務器目錄下的文件,格式為:listdir()

paramiko常用場景

(1)在遠程服務器執(zhí)行命令,并獲取命執(zhí)行命令輸出結果

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.1', port=22, username='root', password='Aa12345!')
stdin, stdout, stderr = ssh.exec_command('df -k')
print stdout.read()
ssh.close()

(2)在遠程服務器執(zhí)行命令,并獲取執(zhí)行命令的結果碼

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.1', port=22, username='root', password='Aa12345!')
stdin, stdout, stderr = ssh.exec_command('df -k')
channel = stdout.channel
ret = channel.recv_exit_status()
if ret == 0:
  print stdout.read()
else:
  print stderr.read()

(3)在遠程服務器執(zhí)行命令,需要生成子進程并交互執(zhí)行命令

import paramiko,time
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.1', port=22, username='root', password='Aa12345!')
interact = conn.invoke_shell()
stdin, stdout, stderr = ssh.exec_command('df -k')
interact = conn.invoke_shell()
interact.send("sed -i '/192.168.0.2/d' /root/.ssh/known_hosts" + '\n')
time.sleep(1)
interact.send('ssh root@172.16.128.2' + '\n')
time.sleep(2)
interact.send('yes' + '\n')
time.sleep(2)
interact.send('Aa12345!' + '\n')
time.sleep(2)
interact.send('df -k!' + '\n')
result = interact.recv(65535)
print result

(4)上傳文件到遠程服務器

import paramiko
scp = paramiko.Transport(('192.168.0.1',22))
scp.connect(username='root',password='Aa12345!')
sftp=paramiko.SFTPClient.from_transport(scp)
local_path = "D:\\temp\\cc.txt"
remote_path = "/tmp/cc.txt"
sftp.put(local_path, remote_path)
scp.close()

(5)從遠程服務器下載文件

import paramiko
scp = paramiko.Transport(('192.168.0.1',22))
scp.connect(username='root',password='Aa12345!')
sftp=paramiko.SFTPClient.from_transport(scp)
remote_path = "/tmp/aaaa.txt"
local_path = "D:\\temp\\aaaa.txt"
sftp.get(remote_path, local_path)
scp.close()

paramiko使用完整實例

import paramiko
def ssh_con(ip, username, password):
  try:
    con = paramiko.SSHClient()
    con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    con.connect(ip=ip, username=username, password=password, timeout=5)
  except:
    return None
  else:
    return con
def exec_cmd(conn, cmd):
  interact = conn.invoke_shell()
  interact.send(cmd)
  result = interact.recv(65535)
  return result  
def exec_cmd2(conn,cmd):
  stdin, stdout, stderr = conn.exec_command(cmd)
  channel = stdout.channel
  ret = channel.recv_exit_status()
  if ret == 0:
    return (ret, stdout.read())
  else:
    return (ret, stderr.read())
if __name__ == '__main__':
  ip = '192.168.0.1'
  user = 'root'
  passwd = 'root'
  con = ssh_con(ip, user, passwd)
  if not con:
    print "Connect %s fail,please check." % (ip,)
  cmd = 'df -k'
  ret, result = exec_cmd2(con,cmd)
  print result

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解Python的Django框架中Manager方法的使用

    詳解Python的Django框架中Manager方法的使用

    這篇文章主要介紹了Python的Django框架中Manager方法的使用,包括修改初始Manager QuerySets和增加額外的Manager方法等操作,需要的朋友可以參考下
    2015-07-07
  • torchtext入門教程必看,帶你輕松玩轉文本數(shù)據(jù)處理

    torchtext入門教程必看,帶你輕松玩轉文本數(shù)據(jù)處理

    這篇文章主要介紹了torchtext入門教程必看,帶你輕松玩轉文本數(shù)據(jù)處理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中range()與xrange()用法分析

    python中range()與xrange()用法分析

    這篇文章主要介紹了python中range()與xrange()用法,結合實例形式分析了range()與xrange()使用與效率上的區(qū)別,需要的朋友可以參考下
    2016-09-09
  • python求最大連續(xù)子數(shù)組的和

    python求最大連續(xù)子數(shù)組的和

    這篇文章主要介紹了python求最大連續(xù)子數(shù)組的和,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • python全棧要學什么 python全棧學習路線

    python全棧要學什么 python全棧學習路線

    在本文中小編給大家整理了關于python全棧要學什么以及python全棧學習路線的知識點內容,需要的朋友們參考下。
    2019-06-06
  • 什么是python的id函數(shù)

    什么是python的id函數(shù)

    在本篇文章里小編給大家分享了關于python里id函數(shù)的基礎知識點,需要的朋友們可以一起學習下。
    2020-06-06
  • Python中命名元組Namedtuple的使用詳解

    Python中命名元組Namedtuple的使用詳解

    Python支持一種名為“namedtuple()”的容器字典,它存在于模塊“collections”中,下面就跟隨小編一起學習一下Namedtuple的具體使用吧
    2023-09-09
  • python實現(xiàn)批量移動文件

    python實現(xiàn)批量移動文件

    這篇文章主要為大家詳細介紹了python實現(xiàn)批量移動文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 如何使用 Python和 FFmpeg 批量截圖視頻到各自文件夾中

    如何使用 Python和 FFmpeg 批量截圖視頻到各自文件夾中

    wxPython 提供了一個簡單易用的界面,而 FFmpeg 則負責處理視頻幀的提取,這個工具不僅對視頻編輯工作有幫助,也為批量處理視頻文件提供了極大的便利,這篇文章主要介紹了使用 Python和 FFmpeg 批量截圖視頻到各自文件夾中,需要的朋友可以參考下
    2024-08-08
  • 淺析python中的迭代與迭代對象

    淺析python中的迭代與迭代對象

    在本文總小編給大家整理了關于python之中的迭代與迭代對象的相關基礎知識點內容,需要的朋友們學習下。
    2018-10-10

最新評論