2011年3月16日 星期三

我透過windows client端,透過事件控制,windows自動發布一個指令連上B linux伺服主機,並利用B linux伺服主機關閉A linux伺服主機的方法

由於有些ups不斷電系統支援斷電時,自動關閉伺服器的功能,我手邊就有這樣一個ups,然而它雖說有支援linux,實際上我雖將它的控制程式安裝起來了,也捉的到該ups卻真的遇到停電時,它卻無法真的做到自動關機與重開機。

所以我現在只好做另一種嘗試,那就是在該ups上接兩台pc,一台是A linux server,一台是windows client,然後透過windows client端,當斷電事件發生時,windows client會自動發布一個指令連上B linux伺服主機(windows client能直接透過ssh連線),並利用B linux伺服主機關閉A linux伺服主機(與B linux伺服主機同一個網段裡,但被router限制,所以雖與windows client接在同一個ups上,卻不能被windows client直接透過ssh連線)。

為了達到這個目的,我做了如下動作:

windows client安裝ups for windows的控製程式,並設定當斷電時,自動執行這個程式指令:

plink -P 端口 用戶帳號@B主機IP –pw 密碼 sh halt204

windows client端要先安裝plink這個程式,其中若是用製作金鑰登入,則可不用–pw 密碼這個參數,而只要將金鑰與plink這個程式放在同一個資料夾即可!而最後的sh halt204則是執行的指令

然後在B linux伺服主機的用戶帳號目錄裡寫一個檔名為halt204(權限必須改為可執行)的shell script,其內容為:

ssh -P 端口 用戶帳號@A主機IP halt

這個是以透過B linux伺服主機關閉A linux伺服主機的指令,但前提是必須先使B linux伺服主機登入A linux伺服主機不用再手動輸入密碼才可行,如何作?可看這篇文章:兩台linux主機以ssh自動登入,不無打入密碼的方法!

上述的所有步驟也可以簡化為直接在安裝有Plink的windows client機器上設定斷電時執行如下一個指令即可:

plink -P 端口 用戶帳號@B主機IP –pw 密碼 ssh -P 端口 用戶帳號@A主機IP halt

若登入B主機的用戶帳號為admin,密碼為1234,B主機對外的實體IP為203.80.68.245,其服務的ssh端口為8888, 登入A主機的用戶帳號為root,可直接以金鑰登入,A主機在router後面的虛擬IP為192.168.1.222,其服務的ssh端口為8000

plink -P 8888 admin@203.80.68.245 –pw 1234 ssh –p 8000 root@192.168.1.222 halt

而整段指令也是可約略看出plink的指令結構:

plink -P 8888 admin@203.80.68.245 –pw 1234 ssh –p 8000 root@192.168.1.222 halt,可分為兩段來看:

plink -P 8888 admin@203.80.68.245 –pw 1234 ssh –p 8000 root@192.168.1.222 halt

前段plink -P 8888 admin@203.80.68.245 –pw 1234 是登入,後段ssh –p 8000 root@192.168.1.222 halt則是登入後執行的ssh程式,而這個ssh程式是以root身份登入192.168.1.222這台主機,並執行halt指令。

沒有留言: