日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python操作遠(yuǎn)程服務(wù)器 paramiko模塊詳細(xì)介紹

系統(tǒng) 1819 0

前言

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

paramiko模塊安裝方法

paramiko模塊不是python自帶的標(biāo)準(zhǔn)庫(kù),需要自行下載安裝,建議使用pip自動(dòng)安裝。方法如下:

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

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

paramiko常用函數(shù)介紹

SSHclient類(lèi)

(1)ssh遠(yuǎn)程連接服務(wù)器,格式為:connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, ...)。其中hostname表示主機(jī)IP,port表示ssh服務(wù)端口號(hào),默認(rèn)是22,username和password表示登錄用戶(hù)名和密碼,timeout表示設(shè)置連接超時(shí)時(shí)長(zhǎng)。

(2)遠(yuǎn)程主機(jī)沒(méi)有本地主機(jī)密鑰或HostKeys對(duì)象時(shí)的連接方法。格式為:set_missing_host_key_policy(policy)。其中policy

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

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

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

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

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

SFTPClient類(lèi)

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

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

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

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

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

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

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

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

paramiko常用場(chǎng)景

(1)在遠(yuǎn)程服務(wù)器執(zhí)行命令,并獲取命執(zhí)行命令輸出結(jié)果

            
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)在遠(yuǎn)程服務(wù)器執(zhí)行命令,并獲取執(zhí)行命令的結(jié)果碼

            
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)在遠(yuǎn)程服務(wù)器執(zhí)行命令,需要生成子進(jìn)程并交互執(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)上傳文件到遠(yuǎn)程服務(wù)器

            
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)從遠(yuǎn)程服務(wù)器下載文件

            
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使用完整實(shí)例

            
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
          

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 沈丘县| 南溪县| 河东区| 色达县| 黄冈市| 汉阴县| 怀柔区| 广水市| 靖远县| 双江| 城市| 武定县| 夏津县| 彰化市| 泸州市| 合阳县| 四子王旗| 蓝田县| 朔州市| 宁化县| 洛南县| 新源县| 章丘市| 贵阳市| 开远市| 历史| 黎川县| 麻城市| 永新县| 南召县| 监利县| 曲水县| 阿图什市| 临泉县| 盖州市| 含山县| 张家港市| 永年县| 新巴尔虎右旗| 依兰县| 富蕴县|