自學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...