一、paramiko
利用paramiko可以遠程控制服務器,上傳和下載文件。
1、paramiko密碼登錄方式:
1 #!/usr/bin/env python 2 #coding:utf-8import paramiko 3 4 ssh = paramiko.SSHClient() #創建鏈接 5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 6 #在遠程服務器上設置簽名。第一次登錄服務器時,會輸入YES/No 7 #在用戶目錄/.ssh/known_hosts文件里會有主機的登錄簽名。如果沒有記錄,在第一次登錄時顯示YES/NO 8 ssh.connect('192.168.1.108', 22, 'alex', '123') #連接輸入的信息 9 stdin, stdout, stderr = ssh.exec_command('df') #執行命令 10 print stdout.read() #打印結果 11 ssh.close(); #關閉鏈接
2、paramiko密鑰對登錄方式:
密鑰的方式,
1.生成密鑰對
2.將自己的公鑰傳至目標服務器
3.提取自己私鑰的路徑
4.建立連接
1 ssh-keygen -t rsa #生成一個自己的公鑰 2 ssh-copy-id -i chenchao@192.168.1.100 #發送自己的公鑰到目標服務器的登錄用戶的家目錄下,默認會到當前用戶的目錄下去找公鑰 ~/.ssh/id_rsa.pub,下次在登錄時就不在需要密碼了 3 4 import paramiko 5 6 private_key_path = '/root/.ssh/id_rsa' #聲明自己的私鑰在哪里 private:私有的 7 key = paramiko.RSAKey.from_private_key_file(private_key_path) #取出私鑰,保存 8 ssh = paramiko.SSHClient() #創建鏈接 9 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #第一次登錄時,自動設置簽名 YES/NO 10 ssh.connect('主機名 ', 端口, username='用戶名', pkey=key) #登錄的信息 11 stdin, stdout, stderr = ssh.exec_command('df') #執行命令 12 print stdout.read() 13 ssh.close()
3、遠程上傳下載文件:
1 #!/usr/bin/env python 2 #conding:utf-8 3 4 import paramiko 5 6 7 t = paramiko.Transport(('192.168.1.107',22)) #創建鏈接 8 t.connect(username='root',password='pwd@123') #輸入目標服務器的用戶名和密碼 9 10 sftp = paramiko.SFTPClient.from_transport(t) #生成連接對象 11 12 sftp.put('/python/coder/connect.py','/opt/test.py') #上傳 源地址文件 目標地址文件 13 #sftp.get('/opt/123.txt','/python/coder/123.txt') #下載 14 t.close()
1、先將執行的結果放入一個文件中
2、逐行讀取文件,將每行的內容按照空格分割成列表
3、在利用csv模塊方法,將分割的列表寫入到csv后綴的表格文件中
二、將paramiko執行的結果放入excel表格文件里
1、python中自帶csv模塊
- 用python讀取csv文件
csv是逗號分隔符格式 一般我們用的execl生成的格式是xls和xlsx 直接重命名為csv的話會報錯:
Error: line contains NULL byte
insun解決方案:出錯原因是直接是把后綴為xls的execl文件重命名為csv的 正常的要是另存為csv文件 就不會報錯了
譬如我們有這么個csv文件:

1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import csv 5 with open('egg.csv','rb') as f: 6 reader = csv.reader(f) 7 for row in reader: 8 print row
打印出來是這樣的list
['a', '1', '1', '1']
['a', '2', '2', '2']
['b', '3', '3', '3']
['b', '4', '4', '4']
['b', '5', '5', '5']
- 用python寫入並生成cs
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import csv 5 with open('egg2.csv', 'wb') as csvfile: 6 spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL) 7 spamwriter.writerow(['a', '1', '1', '2', '2']) 8 spamwriter.writerow(['b', '3', '3', '6', '4']) 9 spamwriter.writerow(['c', '7', '7', '10', '4']) 10 spamwriter.writerow(['d', '11','11','11', '1']) 11 spamwriter.writerow(['e', '12','12','14', '3'])

這樣存進去的是存到一列了 跟我們原本意圖存進5列不一樣
使用python的csv生成excel所兼容的csv文件的話,主要就是創建writer時的參數時要有dialect=’excel’
代碼修改為:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import csv 5 with open('egg2.csv', 'wb') as csvfile: 6 spamwriter = csv.writer(csvfile,dialect='excel') 7 spamwriter.writerow(['a', '1', '1', '2', '2']) 8 spamwriter.writerow(['b', '3', '3', '6', '4']) 9 spamwriter.writerow(['c', '7', '7', '10', '4']) 10 spamwriter.writerow(['d', '11','11','11', '1']) 11 spamwriter.writerow(['e', '12','12','14', '3'])
2、利用paramiko與csv結合
1 #!/usr/bin/python 2 #coding:utf-8 3 4 import paramiko 5 import csv 6 7 ssh = paramiko.SSHClient() #創建鏈接 8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #設置第一次登錄的yes/no 9 ssh.connect('192.168.1.108',22,'root','Pwd@1234') #密碼登錄方式 10 stdin,stdout,stderr = ssh.exec_command('esxcli network ip interface ipv4 get') #執行的命令 11 w = stdout.read() #拿到執行的結果 字符串格式 12 ssh.close() #關閉連接 13 obj = open('read_test','wb+') #將執行的結果放入文件中保存 14 obj.write(w) 15 obj.close() 16 17 with open('read_test','rb') as txt_file: #打開保存結果的文件 18 with open('test_excel.csv', 'wb') as excl_file: #打開一個新文件保存 19 spamwriter = csv.writer(excl_file,dialect='excel') #創建excel格式的文件對象 20 for line in txt_file.readlines(): #讀取結果文件的每一行 21 re = line.split() #按照空格分割將每行轉為列表 22 spamwriter.writerow(re) #寫入到文件當中
