1. 程式人生 > >通過Putty連線windows Bat和Linux Shell

通過Putty連線windows Bat和Linux Shell

背景:寫一個bat檔案,雙擊後就可以關閉所有的伺服器包括Linux伺服器和windows伺服器

一.
第一步:
在連通bat和shell之前要先把windows和windows之間的關係,linux和linux之間的關係打通。
windows之間用net use 進行連線,linux之間使用ssh進行連線

第二步:
PS:以下所有執行環境都是在超級管理員下執行,省的跳出一些亂七八糟的東西阻礙造橋大計。
windows間可用net use進行測試,檢視是否能相連的。
例:

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

net use \ip地址\ipc$ “密碼”/user:”使用者名稱”

這個密碼和使用者名稱都是要連線過去那臺機子的密碼和使用者名稱的
若出現以下提示就證明連線成功

如果有錯無法成功建議百度檢視下是否是ip原因還是由於之前已經完成過對映導致無法再次對映

net use 

來檢視哪些對映是存在的

net use \\192.168.1.210\ipc$ /del 

用來刪除連線

windows的連線方式就是如此。

二.
linux間通訊使用ssh方式來進行。
先進行配置linux間ssh雙機互信機制,這樣就可以使兩機之間通訊不需要輸入密碼進行訪問,將密碼全部隱藏起來,這樣也起到了安全作用。
關於ssh雙機信任機制可以我之前的部落格上檢視

雙機信任機制檢視對應的部落格

第三步:
現在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...."
ifconfig
init 0
EOF

橋的一端已搭好,現在搭建另一端,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工具
可谷姐、度娘下載一個

第一次要進行手動連線

用這個工具進行連線shell指令碼所在的那臺機子

填上IP和埠即可。
然後進行連線,會提示輸入使用者名稱和密碼,登入完後就出現sshhostkeys資料夾

然後把shutdown.bat檔案放入到跟這資料夾同級目錄下。
在bat檔案新增以下內容

#批量關閉linux機器

D:
cd puttyfile_0.62cn
putty.exe -ssh -pw 123456-m test.sh root@192.168.1.241

簡單說下這個語法
putty.ext -ssh -pw 密碼 -m 要在linux執行的檔案 使用者名稱@IP地址

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

#!/bin/sh

cd /opt/script/shell
#mkdir /tmp/test061502
sh shutdown_boot.sh
#mkdir test06170

最終的結果就是以下內容了
shutdown.bat
test.sh

第四步:

按照這個流程可以完成最初的要求,但這樣會存在很多的安全問題,密碼明碼就是一個問題,這個還有待研究看要怎樣處理。
另外一個,在這個bat檔案中最好加一個時間判斷,比如晚上6點後點擊執行這個bat檔案可以正常執行,其他時間段點選時則出現告警,以防誤操作導致關機。

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

改進一些功能
關於bat檔案內容

::批量關閉linux機器

D:
cd puttyfile_0.62cn

PLINK.EXE -ssh -v -pw suselinux root@192.168.1.241 -m test.sh

pause

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

bat檔案升級版=====》》》做時間的判斷
當我雙機這個shutdown.bat檔案後,這bat要自我判斷時間是否在18點到24點之間,如果是則執行裡面的關機命令,如果不是這個時間段點選這個這個bat檔案的話就提示說現在不是關機時間然後退出來
這個是以防萬一誤操作在上班時間點中了這個檔案就不好了

對應程式碼:

REM Shutdown Windows
set HOUR=%time:~0,2%
if %HOUR% lss 18 (
    echo Bad time to shutdown
    goto :end
)
net use \\192.168.1.249\ipc$ "buguniao" /user:"administrator"
::shutdown -s -f -t 20 -m \\192.168.1.249
net use \\192.168.1.254\ipc$ "dellwindows" /user:"administrator"
::shutdown -s -f -t 20 -m \\192.168.1.254
net use \\192.168.1.210\ipc$ "shangwang" /user:"administrator"
::shutdown -s -f -t 20 -m \\192.168.1.210
net use \\192.168.1.249\ipc$ /del
net use \\192.168.1.254\ipc$ /del
net use \\192.168.1.210\ipc$ /del
REM Shutdown Linux
cd /d D:\puttyfile_0.62cn
PLINK.EXE -ssh -v -pw suselinux [email protected]192.168.1.241 -m test.sh
:end
pause

安全的改進思路如下:

1、在linux伺服器上建立一個使用者,假設為shutdownlinux,給於關機命令的許可權,然後修改該使用者的登陸指令碼,執行關機或者其它命令。
2、設定putty的無需要密碼登陸,儲存為shutdownlinux。 3、匯出putty的登錄檔項,假設為shutdown.reg
4、dos的批處理命令如下: regedit /s shutdownlinux.reg putty -load shutdownlinux
reg /s delete HKEY_CURRENT_USER\Software\SimonTatham del *.reg
5、把4個檔案(注:一個是putty.exe,一個是登錄檔檔案shutdownlinux.reg,一個是配置putty自動登陸的私鑰shutdownlinux.ppk,一個shutdownlinux.bat)做成自解壓檔案shutdownlinux.exe,設定為解壓後執行bat,並且自刪除。
6、解釋一下批處理原因:首先putty的配置及金鑰是放在登錄檔裡的,命令regedit /s
shutdownlinux.reg是匯入配置和金鑰,其次是命令列執行putty自動登陸,裡面不含密碼,登陸成功那個賬號後,會在伺服器端執行登陸指令碼,這個應該不用解釋。最後是刪除登錄檔項和登錄檔檔案。
7自己實驗成功,效果如下:雙擊exe檔案,先彈出一個DOS視窗,然後彈出PUTTY的登陸視窗,然後PUTTY被遠端中斷退出

相關推薦

通過Putty連線windows BatLinux Shell

背景:寫一個bat檔案,雙擊後就可以關閉所有的伺服器包括Linux伺服器和windows伺服器 一. 第一步: 在連通bat和shell之前要先把windows和windows之間的關係,linux和linux之間的關係打通。 windows之間用net

如何利用PuTTY連線Windows主機Linux虛擬機器

    PuTTY是可用來連線本機Windows系統與虛擬機器中的Linux系統,畢竟虛擬機器中有時候不太流暢,連線後我們就可以在window系統去做同樣的事了,話不多說,直接上步驟:1.在Windows中下載PuTTy,exe檔案,可直接執行,無需安裝:連線https://

Windows 通過 putty 連線 虛擬機器下linux 問題

1、在linux 下配置好IP地址,使得 Windows能 ping 通LINUX。 2、直接百度下載  putty 即可,小程式, 程式執行介面如下: 3、輸入LINUX的IP地址,即可連線到linux. 問題:如果出現  connection refused 說明

Linux通過rdesktop連線Windows遠端桌面

rdesktop是linux下支援Windows遠端桌面連線的客戶端程式,在linux系統下可通過它遠端訪問Windows桌面,支援多種版本。rdesktop是sourceforge下支援GPL協議的一個開源專案,採用RDP(Remote Desktop Protocol,遠端桌面協議),幾乎可以連線wind

Windows系統Linux服務器安裝MongoDB基本使用

top 系統 TE 此外 ejs 安裝過程 files ati play Windows系統本地數據庫連接文檔存儲(MongoDB / CouchDB):   文檔存儲一般以類似json的格式存儲,存儲的內容是文檔型的。   這樣的存儲方式,也就有有機會對某些字段建立索引(

Windows系統Linux虛擬機器之間檔案上傳下載

方法一:使用xshell(簡單) 用X shell 傳輸檔案 ① xshell是非常好用的工具,但是想在window與linux之間傳輸檔案。   很簡單,就是在linux中安裝lrzsz,安裝即

Windows下執行Linux Shell

越來越多的人選擇用Mac或者Linux環境進行跨平臺專案開發。但是仍然有大部分人習慣於在Windows環境下進行開發,畢竟Windows在各方面使用還是較為方便,特別像檔案版本管理(Git,SVN等)在跨平臺下開發遊戲或軟體,就需要有一套方便的自動化工具。Windows下需要使用批處理,雖然有Powe

開發中,路徑在Windows系統linux系統的相容性問題解決

String line=File.separator;          String realPath=request.getRealPath("")+"\\excelmodel\\";  &n

windows dll Linux so 的異同

摘要:動態連結庫技術實現和設計程式常用的技術,在Windows和Linux系統中都有動態庫的概念,採用動態庫可以有效的減少程式大小,節省空間,提高效率,增加程式的可擴充套件性,便於模組化管理。 但不同作業系統的動態庫由於格式 不同,在需要不同作業系統呼叫時需要進行動態庫程式

UNIXLinux Shell正則表示式語法介紹

非常奇怪,直到今天我仍然能重複週六早上的經典歌曲“Conjunction Junction”。這是好事(看了太多電視)還是壞事(也許是我現在職業的先兆)仍然有待討論。不管怎樣,這首小調在歡快的節奏下傳遞了基本的資訊。 我還沒有為學習 UNIX 構想出與“Conjunction Junction”相似的作品,

windowsLinux下執行python程式的方法

1 在windows下執行python程式 1)從DOS命令列執行python指令碼   用python直譯器來執行python指令碼,在windows下面python直譯器是python.exe,我的python檔案安裝在D:\Python27,在這個目錄下可

Windows系統Linux系統的Socket通訊解決方案或問題

因為專案的需要,希望使用windows系統作為客戶端,模擬想Linux系統的服務端傳送資料。在這個過程當中,遇到了一些問題,所以記錄下來。 環境說明: 客戶端 系統:windows系統,語言:C語言 服務端 系統:CentOS系統(LInux系統),語言:C語言 虛擬機器:

Windowslinux下禪道安裝方法

Windows下安裝方法: 1. 如何啟動禪道:   1.1 點選 ZenTaoPMS.4.0.stable.exe檔案,提取檔案,一定要將xampp目錄放在某一個盤的根目錄,比如c:\xampp, d:\xampp。   1.2 進入xampp目錄,雙擊start.bat

使用Xshell在Windows系統Linux系統之間進行檔案傳輸

Windows系統在安裝虛擬機器centos系統之後,如何進行兩者之間的檔案傳輸和互操作,或者如何在Windows端使用Xshell對Linux端進行遠端操作?使用centos的檔案上傳下載小工具,可以快速的幫助我們從本地上傳檔案至Linux伺服器,或者是從Linux伺服器

如何在windowslinux下獲取檔案(如exe檔案)的詳細資訊屬性

程式設計師都很懶,你懂的! 最近在專案開發中,由cs開發的exe的程式,需要自動升級,該exe程式放在linux下,自動升級時檢測不到該exe程式的版本號資訊,但是我們客戶端的exe程式需要獲取伺服器上新程式的版本號資訊。最後由我用java實現linux上exe檔案的版本號

mysql5.7配置主從同步、windowslinux

1、下載mysql2、master配置windows修改E:\ProgramData\MySQL\MySQL Server 5.7目錄的my.ini檔案:# master服務唯一標識 server-id = 1 # 二進位制同步資料檔案 log-bin = mysql-bin

url帶中文引數請求在windowslinux下的編碼問題

在工作中遇到的一個坑,帶中文引數的url(https://*/services/homepage/getArea.do?vagueName=%E5%8D%97%E4%BA%AC)在本地請求正常,但是在l

sleep在windowslinux的不同

Sleep函式,在Linux下使用時,是以秒為單位的。但是在Windows下是以毫秒為單位的。 在Linux下,想得到毫秒級的時間間隔,需要使用其他的方法。 比如把要計時的程式段放在一個1000次的迴圈中,統計出總時間再除1000就是執行一次的時間。 對不同單位的時間

Xshell用於windows主機linux虛擬機器之間互傳檔案

此方法也是可以連線阿里雲伺服器的,通過xshell使用阿里雲伺服器並進行檔案的上傳下載真的好方便。 注:本文轉自 https://www.linuxidc.com/Linux/2015-05/117975.htm  這個東西比“共享資料夾”好用多了!(當然需要先配置xshe

jni在windowslinux下的使用

一,在windows下生成dll動態連結庫: java檔案: public class JniEg { //native 檔案,只需宣告不需要實現 public native void display(); public native double su