我的第乙個Python隨筆

2021-09-01 09:53:00 字數 4315 閱讀 3959

自學python也很長時間了,註冊寫了第一篇隨筆。之前想過很多次,但是始終不知道該怎麼開始,內容如何,現在想想,隨筆嘛,是自己的想法,也自己的實踐,又是自己的鍛鍊。話不多說,開始今天的正式內容。

python的paramiko模組。

paramiko是用python語言寫的乙個模組,遵循ssh2協議,支援以加密和認證的方式,進行遠端伺服器的連線。由於使用的是python這樣的能夠跨平台執行的語言,所以所有python支援的平台,如linux, solaris, bsd, macos x, windows等,paramiko都可以支援,因此,如果需要使用ssh從乙個平台連線到另外乙個平台,進行一系列的操作時,paramiko是最佳工具之一。  

sshclient

用於連線遠端伺服器並執行基本命令

基於使用者名稱密碼連線:

import paramiko

# 建立ssh物件

ssh = paramiko.sshclient()

# 允許連線不在know_hosts檔案中的主機

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

# 連線伺服器

ssh.connect(hostname='192.168.30.129', port=22, username='sunqi', password='43797189')

# 執行命令

stdin, stdout, stderr = ssh.exec_command('df')

# 獲取命令結果

result = stdout.read()

# 關閉連線

ssh.close()

示例**:

1 import paramiko

2 3 ssh = paramiko.sshclient()

4 ssh.set_missing_host_key_policy(paramiko.autoaddpolicy)

5 ssh.connect(hostname='192.168.30.129',port=22,username='root',password='43797189')#測試機器為linux虛擬機器(centos 7)

6 while true:

7 cmd = input('>>:')

8 stdin,stdout,stderr = ssh.exec_command(cmd)

9 result = stdout.read()

10 if stdout:

11 print(str(result,'utf8'))

12 else:

13 print(str(stderr.read(),'utf8'))

14 15 ssh.close()

sftpclient

用於連線遠端伺服器並執行上傳:

import paramiko

'''從windows上傳檔案到linux虛擬機器

埠:22

'''host = '192.168.30.129'

port = 22

t = paramiko.transport((host,port))

t.connect(username="root",password='43797189',)

sftp = paramiko.sftpclient.from_transport(t)

target_path = '/var/log/windows.log'

local_path = 'e:\\sunqi.log'

sftp.put(local_path,target_path)

t.close()

最後將多執行緒和這個paramiko模組綜合起來寫了乙個批量主機管理程式

請看到的朋友原諒我的混亂**規範,我會加倍努力的!

主機列表:

示例**:host_dir.py

host_dic = ,

'c2':,

'c3':

},'group2':,

'c5':,

'c6':,

}}

執行**:run_code.py

import threading

import paramiko

import os

from paramiko模組.批量主機管理小專案.host_dir import host_dic

'''主機批量管理程式

實現多個主機的同時管理

利用多執行緒以及paramiko模組

'''class host_manage():

def __init__(self,host,port,username,password):

self.host = host

self.port = port

self.username = username

self.password = password

def command(self,cmd):

ssh = paramiko.sshclient()

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy)

ssh.connect(hostname=self.host,port=self.port,username=self.username,password=self.password)

#cmd = input(">>:")

stdin, stdout, stderr = ssh.exec_command(cmd)

result = stdout.read()

if stdout:

print(str(result, 'utf8'))

else:

print(str(stderr.read(), 'utf8'))

def upload(self):

t = paramiko.transport(self.host,self.port)

t.connect(username=self.username,password=self.password)

sftp = paramiko.sftpclient.from_transport(t)

target_path = '/var/log/windows.log'

local_path = 'e:\\sunqi.log'

sftp.put(local_path,target_path)

t.close()

pass

def download(self):

pass

def choose_group():

print('可管理主機分組')

for k in host_dic:

print(k)

for i in host_dic[k]:

print(host_dic[k][i])

group_num = input('>>:選擇主機編號')

return group_num

def run():

num = choose_group()

print('已選組號:%s' %num)

selected = input(">>:輸入即將進行的操作:command、upload、download")

if selected =="command":

cmd = input('>>:請輸入要批量操作的命令:')

thread_conut =

for i in host_dic[num]:

func = host_manage(host=host_dic[num][i]['host'],port=host_dic[num][i]['port'],username=host_dic[num][i]['username'],password=host_dic[num][i]['password'])

if hasattr(func,selected):

p = threading.thread(target=getattr(func,selected),args=(cmd,))

p.start()

for i in thread_conut:

i.join()

if __name__ == '__main__':

run()

我的第乙個python程式

今天寫了有生以來第乙個python程式。之所以選用python,是看中指令碼不需要編譯,修改比較方便。本來可供選擇的還有dos批處理,vbscript,powershell,perl等。dos批處理處理字串太麻煩,能不用就不用 vbscript和powershell以前寫過簡單的程式,不想深入 pe...

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...

我的第乙個最小應用 Python

上篇安裝了flask,這篇寫下如何使用flask寫乙個最小應用 hello world 在myproject 資料夾下建立乙個新的資料夾名為first mkdir first cd first 使用vim 建立乙個名為index的py檔案 vim index.py flask import flas...