通过Putty连接windows Bat和Linux Shell

来源:互联网 发布:linux下挂在ntfs硬盘 编辑:程序博客网 时间:2024/06/06 01:18

背景:写一个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/shfor ip in `cat ip.txt`dossh $ip <<EOFecho "{$ip} shutdown now..."ifconfiginit 0EOFdonessh 192.168.1.216 -p10088<<EOFecho "shutdown 192.168.1.216 now...."ifconfiginit 0EOF

桥的一端已搭好,现在搭建另一端,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.249net use \\192.168.1.254\ipc$ "123456" /user:"administrator"shutdown -s -f -t 20 -m \\192.168.1.254net 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.62cnputty.exe -ssh -pw 123456-m test.sh root@192.168.1.241

简单说下这个语法
putty.ext -ssh -pw 密码 -m 要在linux执行的文件 用户名@IP地址

其中test.sh也是放在sshhostkeys同级目录下,里面写上你要向linux执行的命令

#!/bin/shcd /opt/script/shell#mkdir /tmp/test061502sh shutdown_boot.sh#mkdir test06170

最终的结果就是以下内容了
shutdown.bat
test.sh

第四步:

按照这个流程可以完成最初的要求,但这样会存在很多的安全问题,密码明码就是一个问题,这个还有待研究看要怎样处理。
另外一个,在这个bat文件中最好加一个时间判断,比如晚上6点后点击执行这个bat文件可以正常运行,其他时间段点击时则出现告警,以防误操作导致关机。

还有其他的等等一些内容需要完善,待以后想到了在 进行补充。

改进一些功能
关于bat文件内容

::批量关闭linux机器D:cd puttyfile_0.62cnPLINK.EXE -ssh -v -pw suselinux root@192.168.1.241 -m test.shpause

这样的话就可以看到执行过程

bat文件升级版=====》》》做时间的判断
当我双机这个shutdown.bat文件后,这bat要自我判断时间是否在18点到24点之间,如果是则执行里面的关机命令,如果不是这个时间段点击这个这个bat文件的话就提示说现在不是关机时间然后退出来
这个是以防万一误操作在上班时间点中了这个文件就不好了

对应代码:

REM Shutdown Windowsset 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.249net use \\192.168.1.254\ipc$ "dellwindows" /user:"administrator"::shutdown -s -f -t 20 -m \\192.168.1.254net use \\192.168.1.210\ipc$ "shangwang" /user:"administrator"::shutdown -s -f -t 20 -m \\192.168.1.210net use \\192.168.1.249\ipc$ /delnet use \\192.168.1.254\ipc$ /delnet use \\192.168.1.210\ipc$ /delREM Shutdown Linuxcd /d D:\puttyfile_0.62cnPLINK.EXE -ssh -v -pw suselinux root@192.168.1.241 -m test.sh:endpause

安全的改进思路如下:

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被远程中断退出

阅读全文
0 0