以前總是利用shell來編寫腳本,最近學習python,發現paramiko使用上很友善,paramiko就是利用ssh協定進行通信。
需求:利用paramiko庫遠端連接配接到遠端伺服器,執行指令“ps aux”,檢視指定服務的的cpu,記憶體,VSZ,RSS資訊,并且以指定格式輸出。
腳本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<code>#! /usr/bin/env python</code>
<code>#coding:utf-8</code>
<code>#通過paramiko子產品,獲得遠端機器的指定程序相關資訊;</code>
<code>import</code> <code>paramiko</code>
<code>host_lists</code><code>=</code><code>(</code>
<code> </code><code>(</code><code>'node1'</code><code>,</code><code>'172.16.41.151'</code><code>),</code>
<code> </code><code>(</code><code>'node2'</code><code>,</code><code>'172.16.41.152'</code><code>),</code>
<code> </code><code>(</code><code>'node3'</code><code>,</code><code>'172.16.41.153'</code><code>),</code>
<code> </code><code>(</code><code>'node4'</code><code>,</code><code>'172.16.41.158'</code><code>)</code>
<code> </code><code>)</code>
<code>def</code> <code>getServerInfo(host,user,password,services):</code>
<code> </code><code>conn </code><code>=</code> <code>paramiko.SSHClient()</code>
<code> </code><code>conn.load_system_host_keys()</code>
<code> </code><code>conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())</code>
<code> </code><code>conn.connect(host,</code><code>22</code><code>,user,password)</code>
<code> </code><code>stdin,stdout,stderr </code><code>=</code> <code>conn.exec_command(</code><code>"ps aux|awk '{print $3,$4,$5,$6,$11}'|grep %s"</code> <code>%</code> <code>services)</code>
<code> </code><code>info </code><code>=</code> <code>stdout.read()</code>
<code> </code><code>conn.close()</code>
<code> </code><code>return</code> <code>info</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>print</code> <code>"hostname %CPU %MEM VSZ RSS services"</code>
<code> </code><code>for</code> <code>host </code><code>in</code> <code>host_lists:</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>info </code><code>=</code> <code>getServerInfo(host[</code><code>1</code><code>],</code><code>'root'</code><code>,</code><code>'passwd'</code><code>,</code><code>'cupsd'</code><code>)</code>
<code> </code><code>info_list </code><code>=</code> <code>info.split()</code>
<code> </code><code>print</code> <code>"%s %s %s %s %s %s "</code> <code>%</code> <code>(host[</code><code>0</code><code>],info_list[</code><code>0</code><code>],info_list[</code><code>1</code><code>],info_list[</code><code>2</code><code>],info_list[</code><code>3</code><code>],info_list[</code><code>4</code><code>] )</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>pass</code>
執行結果如下:
<a href="http://s3.51cto.com/wyfs02/M01/53/DF/wKioL1Ry4NfwyBGJAADm5M7lg3A271.jpg" target="_blank"></a>
本文轉自 shine_forever 51CTO部落格,原文連結:http://blog.51cto.com/shineforever/1581958