天天看點

如何使windows下的bat檔案調用linux下的shell腳本的方法

能完成這個功能,要感謝chinaunix的Shell_HAT哥們。。。

若無他指點,死活我都完成不了。。。

感謝好人一個。。

背景:寫一個bat檔案,輕按兩下後就可以關閉所有的伺服器包括linux伺服器和windows伺服器

        因為公司有這需求,在下班後要關閉所有的伺服器。

公司的伺服器包括了windows和linux,若是linux或者全身windows就好辦了,可以分别寫一個shell腳本和bat腳本就可以執行。但現在要做到一個非專業人員可以進行輕按兩下bat檔案後進行關機。是以最合理的方法就是一鍵關閉全部器。

so~~就開始琢磨把這兩個腳本打通。

百度之,若要打通bat和shell腳本是要借助第三方工具,網上的工具有cygwin和putty兩種,其他的我就不清楚了,我選擇了putty來做bat和shell腳本的橋梁。

工具已備好,接下來就是造橋工程。

第一步:規劃

在連通bat和shell之前要先把windows和windows之間的關系,linux和linux之間的關系打通。

           windows之間用net use 進行連接配接,linux之間使用ssh進行連接配接

第二步:打地基

PS:以下所有運作環境都是在超級管理者下運作,省的跳出一些亂七八糟的東西阻礙造橋大計。

windows間可用net use進行測試,檢視是否能相連的。

例:net use \\192.168.1.124\ipc$ "123456" /user:"administrator"

    net use  \\ip位址\ipc$ "密碼"/user:"使用者名"

    這個密碼和使用者名都是要連接配接過去那台機子的密碼和使用者名的

若出現以下提示就證明連接配接成功

如何使windows下的bat檔案調用linux下的shell腳本的方法

當然萬事都是沒有這麼順利的。。。

例如。。。

如何使windows下的bat檔案調用linux下的shell腳本的方法
如何使windows下的bat檔案調用linux下的shell腳本的方法

像這麼些亂七八糟的錯誤基本就是網絡不通啊,ip位址有誤,使用者名密碼有誤之類造成的。。。

是以得多多利用度娘、谷姐之類的神器進行解決。

或許有時候可能還會用到以下一些指令

如何使windows下的bat檔案調用linux下的shell腳本的方法

net use 來檢視哪些是存在的

net use \\192.168.1.210\ipc$ /del 用來删除連接配接

windows的連接配接方式就是如此。

在你的客戶機上用同樣的方法去測試需要加入批量關機大軍的windows伺服器。

linux間通信使用ssh方式來進行。

先進行配置linux間ssh雙機互信機制,這樣就可以使兩機之間通信不需要輸入密碼進行通路,将密碼全部隐藏起來,這樣也起到了安全作用。

關于ssh雙機信任機制可以我之前的部落格上檢視

http://alwaysyunwei.blog.51cto.com/3224143/1222601

第三部:架橋

現在linux機器上寫一個shell腳本進行批量關機

其中ip.txt存放要批量關機的linux機器ip

當然shutdown_boot.sh應該像下面這樣寫,而不是圖檔中的那樣,圖檔中的内容隻是我做測試用的。

#!/bin/sh

for ip in `cat ip.txt`

do

ssh $ip <<EOF

echo "{$ip} shutdown now..."

ifconfig

init 0

EOF

done

ssh 192.168.1.216 -p10088<<EOF

echo "shutdown 192.168.1.216 now...."

如何使windows下的bat檔案調用linux下的shell腳本的方法

因為在我的正式環境中216這台機子SSH端口比較特殊,是以單獨剝離出來。

橋的一端已搭好,現在搭建另一端,windows下bat腳本來進行windows批量關機

建立一個shutdown.bat檔案

寫入以下内容

#批量關閉windows機器

net use \\192.168.1.249\ipc$ "12345" /user:"administrator"

shutdown -s -f -t 20 -m \\192.168.1.249

net use \\192.168.1.254\ipc$ "123456" /user:"administrator"

shutdown -s -f -t 20 -m \\192.168.1.254

net use \\192.168.1.210\ipc$ "123456" /user:"administrator"

shutdown -s -f -t 20 -m \\192.168.1.210

橋的另一端也搭好了

最後一步就是把兩端連起來

這時候就要請出我們的putty工具

可谷姐、度娘下載下傳一個

如何使windows下的bat檔案調用linux下的shell腳本的方法

第一次要進行手動連接配接

如何使windows下的bat檔案調用linux下的shell腳本的方法

用這個工具進行連接配接shell腳本所在的那台機子

如何使windows下的bat檔案調用linux下的shell腳本的方法

填上IP和端口即可。

然後進行連接配接,會提示輸入使用者名和密碼,登入完後就出現sshhostkeys檔案夾

如何使windows下的bat檔案調用linux下的shell腳本的方法

然後把shutdown.bat檔案放入到跟這檔案夾同級目錄下。

在bat檔案添加以下内容

#批量關閉linux機器

D:

cd puttyfile_0.62cn

putty.exe -ssh -pw 123456-m test.sh [email protected]

簡單說下這個文法

putty.ext -ssh -pw 密碼 -m  要在linux執行的檔案 使用者名@IP位址

其中test.sh也是放在sshhostkeys同級目錄下,裡面寫上你要向linux執行的指令

cd /opt/script/shell

#mkdir /tmp/test061502

sh shutdown_boot.sh

#mkdir test06170

最終的結果就是以下内容了

如何使windows下的bat檔案調用linux下的shell腳本的方法

shutdown.bat

如何使windows下的bat檔案調用linux下的shell腳本的方法

test.sh

如何使windows下的bat檔案調用linux下的shell腳本的方法

這樣就大功告成

第四步:後期工作

按照這個流程可以完成最初的要求,但這樣會存在很多的安全問題,密碼明碼就是一個問題,這個還有待研究看要怎樣處理。

另外一個,在這個bat檔案中最好加一個時間判斷,比如晚上6點後點選執行這個bat檔案可以正常運作,其他時間段點選時則出現告警,以防誤操作導緻關機。

還有其他的等等一些内容需要完善,待以後想到了在 進行補充。

改進一些功能

關于bat檔案内容

::批量關閉linux機器

PLINK.EXE -ssh -v -pw suselinux [email protected] -m test.sh

pause

這樣的話就可以看到執行過程

ps:bat檔案用::來注釋掉行

bat檔案更新版=====》》》做時間的判斷

當我雙機這個shutdown.bat檔案後,這bat要自我判斷時間是否在18點到24點之間,如果是則執行裡面的關機指令,如果不是這個時間段點選這個這個bat檔案的話就提示說現在不是關機時間然後退出來

這個是以防萬一誤操作在上班時間點中了這個檔案就蛋疼了。。。。

成型代碼

現在就剩下一個安全問題,明碼明文還有待改進。。