使用python管理linux服務(wù)器

遇到的問題

最近工作中需要維護(hù)一批項(xiàng)目中使用的linux服務(wù)器柄瑰,我需要及時(shí)的知道這些服務(wù)器能不能正常連接,以便及時(shí)聯(lián)系實(shí)驗(yàn)室管理員進(jìn)行處理泌霍。這批服務(wù)器都是使用ssh的方式登陸瓮钥,如果通過ssh客戶端逐個(gè)登陸去檢查的話不僅耗時(shí),而且鼠標(biāo)不停的點(diǎn)來點(diǎn)去會(huì)讓我心情煩躁烹吵。有沒有更好的方式來完成這個(gè)工作哪?答案當(dāng)然是肯定的桨武。
可以使用python第三方模塊Paramiko(python SSH module)來實(shí)現(xiàn)服務(wù)器的批量ssh登陸檢測(cè)肋拔,使用該模塊只要寫一些簡(jiǎn)單的python代碼就能做到這個(gè)訴求,而且還可以執(zhí)行l(wèi)inux命令呀酸,你可以根據(jù)自己的實(shí)際的訴求去編寫自己的python代碼凉蜂,本文僅示例批量服務(wù)器的ssh登陸檢測(cè),系統(tǒng)環(huán)境為windows性誉。

安裝Paramiko模塊

打開cmd窿吩,執(zhí)行pip命令安裝Paramiko模塊

pip install paramiko   
pip安裝paramiko模塊.gif

批量ssh登陸檢查

  1. 在電腦上創(chuàng)建一個(gè)目錄,在該目錄下創(chuàng)建兩個(gè)文件servers.txt, connect.py错览。

servers.txt用來存放服務(wù)器ip及ssh登陸賬戶等信息纫雁,connect.py中的python代碼讀取servers.txt中的參數(shù)信息逐個(gè)進(jìn)行ssh登陸檢查并記錄連接日志信息。

servers.txt文件內(nèi)容按照如下示例格式倾哺,每一行包含一個(gè)服務(wù)器的ip轧邪、ssh登陸名刽脖、ssh登陸密碼信息,以空格分隔:

192.168.31.21 username password
192.168.31.22 username password
192.168.31.22 username password

connect.py代碼如下:

import paramiko

"""
Server對(duì)象用來定義server的ip忌愚、用戶名曲管、密碼以及連接日志等屬性,
包含connect方法用于ssh登陸, run_cmd方法用于執(zhí)行l(wèi)inux命令
"""
class Server():
    def __init__(self, ip, username, password):
        self.username = username
        self.password = password
        self.ip = ip
        self.connect_result = ""

    # ssh登陸并反饋連接成功或失敗信息
    def connect(self):
        conn = paramiko.SSHClient()
        conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        try:
            conn.connect(self.ip, username=self.username, password=self.password)
            self.connection = conn
            self.connect_result = "Connect Server {0} {1} {2} Successfully!\n".format(
                self.ip, self.username, self.password)
        except:
            self.connect_result = "Connect Server {0} {1} {2} Failed!\n".format(
                self.ip, self.username, self.password)
            #不能正常連接的server打印信息到控制臺(tái)
            print(self.connect_result)
        return self.connect_result

    # 該方法運(yùn)行建立連接后執(zhí)行l(wèi)inux命令
    def run_cmd(self, command):
        if self.connection is None:
            print("Please run connect")
            raise ValueError("Not connected")
        (stdin, stdout, stderr) = self.connection.exec_command(command)
        return stdout.read()

# 從文件讀取servers信息ip 用戶名 密碼
def get_all_servers_login_info(server_file="./servers.txt"):
    try:
        f = open(server_file)
        all_servers = f.read();  
    except:
        print("ERROR: 讀取文件{0}失敗".format(server_file))
    finally:
        f.close()
    all_servers = all_servers.split('\n')
    ssh_list = []
    for ssh in all_servers:
        if (len(ssh) > 0):
            ssh_list.append(ssh.split())
    return ssh_list

if __name__ == '__main__':
    # 讀取servers.txt中的ip username password信息
    all_servers_info = get_all_servers_login_info()
    # 記錄ssh登陸日志信息
    connection_log = ""
    # 逐個(gè)檢查每個(gè)server ssh登陸情況
    for server in all_servers_info:
        ip, username, password = server[0], server[1], server[2]
        conn = Server(ip, username, password)
        connection_log += conn.connect()
    # 將所有服務(wù)器ssh登陸檢查信息寫入日志文件
    log_file = open("connect_result.log", 'w')
    log_file.write(connection_log)
    log_file.close()
  1. 如何執(zhí)行批量檢測(cè)硕糊?
    打開cmd命令提示符院水,cd至connect.py文件所在的目錄,執(zhí)行命令后就會(huì)在當(dāng)前目錄下生成日志文件connect_result.log简十,其中記錄了所有服務(wù)器的ssh登陸成功與否的信息檬某,如果有未能成功登陸的server會(huì)在控制臺(tái)窗口直接打印輸出。
python connect.py
ssh檢測(cè)結(jié)果文件.png

每次都打開cmd勺远,然后cd到指定目錄橙喘,然后手工輸入python connect.py命令,也挺繁瑣的胶逢,可以在connect.py文件所在目錄下創(chuàng)建名為startup.bat的批處理文件厅瞎,文本方式打開,輸入如下保存初坠,然后直接雙擊startup.bat就可以執(zhí)行ssh登陸檢測(cè)了和簸。

echo "開始批量ssh登陸檢測(cè)..."
python connect.py
pause
startup批處理文件.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碟刺,隨后出現(xiàn)的幾起案子锁保,更是在濱河造成了極大的恐慌,老刑警劉巖半沽,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽柒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡者填,警方通過查閱死者的電腦和手機(jī)浩村,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來占哟,“玉大人心墅,你說我怎么就攤上這事≌ズ酰” “怎么了怎燥?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜜暑。 經(jīng)常有香客問我铐姚,道長(zhǎng),這世上最難降的妖魔是什么史煎? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任谦屑,我火速辦了婚禮驳糯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氢橙。我一直安慰自己酝枢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布悍手。 她就那樣靜靜地躺著帘睦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坦康。 梳的紋絲不亂的頭發(fā)上竣付,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音滞欠,去河邊找鬼古胆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛筛璧,可吹牛的內(nèi)容都是我干的逸绎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夭谤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼棺牧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起朗儒,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤颊乘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后醉锄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乏悄,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年恳不,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纲爸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妆够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出负蚊,到底是詐尸還是另有隱情神妹,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布家妆,位于F島的核電站鸵荠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伤极。R本人自食惡果不足惜蛹找,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一姨伤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庸疾,春花似錦乍楚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至金顿,卻和暖如春臊泌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揍拆。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工渠概, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫂拴。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓播揪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顷牌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剪芍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容