Chinaunix

标题: 能不能做出直接自动执行的脚本 [打印本页]

作者: 不进一环    时间: 2009-10-30 11:45
标题: 能不能做出直接自动执行的脚本
有2台主机,分别是solaris A 和rhel B

想脚本自动执行关机命令:
在A上的命令是 sync; init 5
B上执行的命令是 sync; init 0


能不能有什么办法,像批处理文件一样,做好放桌面上,点击运行就自动连接到两台主机,执行关机命令

目前是ssh连接,实在不行可以开telnet

现在就是用的 SecureCRT 自动登录,但是需要手工选择主机。用 SecureCRT,可以实现这个功能么。或者其他什么软件也可以。
作者: emperor    时间: 2009-10-30 12:32
SCRT可以做到,达到你这个目的,写个极其简单的vbs或者perl就行。。。。。。。。
作者: 不进一环    时间: 2009-10-30 12:34
原帖由 emperor 于 2009-10-30 12:32 发表
SCRT可以做到,达到你这个目的,写个极其简单的vbs或者perl就行。。。。。。。。


能不能给个例子,你说的这两个全不会啊  
作者: emperor    时间: 2009-10-30 12:54
自行参考修改
点script--〉run。 调用下面这个vbs。。。。。。。
  1. '* date =2009-10-30

  2. ' § define §
  3. dim Tab0,Tab1
  4. dim usernameA,passwordA,usernameB,passwordB

  5. ' § init §
  6. usernameA=xxx
  7. passwordA=yyy
  8. usernameB=aaa
  9. passwordB=bbb

  10. ' § start §

  11. ' §login to SolarisA and shutdown §
  12. Set Tab0= crt.Session.ConnectInTab ("/ssh  " &SolarisA& " 22")
  13.   Tab0.Screen.WaitForString  "ogin: "
  14.   Tab0.Screen.send usernameA& chr(13)
  15.   Tab0.Screen.WaitForString  "sword: "
  16.   Tab0.Screen.send passwordA& chr(13)
  17.   Tab0.Screen.WaitForString  "# "
  18.   Tab0.Screen.send "sync; init 5"& chr(13)

  19. ' §login to SolarisB and shutdown  §
  20. Set Tab1= crt.Session.ConnectInTab ("/ssh  " &SolarisB& " 22")
  21.   Tab1.Screen.WaitForString  "ogin: "
  22.   Tab1.Screen.send usernameB& chr(13)
  23.   Tab1.Screen.WaitForString  "sword: "
  24.   Tab1.Screen.send passwordB& chr(13)
  25.   Tab0.Screen.WaitForString  "# "
  26.   Tab0.Screen.send "sync; init 0"& chr(13)
复制代码

作者: weizhishu    时间: 2009-10-30 14:52

  1. #!/bin/bash

  2. HOSTLIST=("1.2.3.4|testa|123456|init 0" "5.6.7.8|testb|123456|init 5")

  3. SSHD_PORT=22
  4. SSH_ARGS="-oStrictHostKeyChecking=no  -oUserKnownHostsFile=/dev/null "

  5. for((i=0; i<=1; i++))
  6. do
  7.        HOSTNAME=$(echo ${HOSTLIST[i]}  | cut -d'|' -f1)
  8.        USERNAME=$(echo ${HOSTLIST[i]}  | cut -d'|' -f2)
  9.        PASS=$(echo ${HOSTLIST[i]}  | cut -d'|' -f3)
  10.        CMD=$(echo ${HOSTLIST[i]}  | cut -d'|' -f4)

  11. expect << EOF
  12. set timeout 120
  13. spawn ssh -p ${SSHD_PORT} ${SSH_ARGS} ${USERNAME}@${HOSTNAME}
  14. expect "*password: "
  15. send "${PASS}\r"
  16. expect ".*\@.*#"
  17. send "${CMD}\r"
  18. EOF

  19. done
复制代码

作者: 不进一环    时间: 2009-10-30 15:15
原帖由 emperor 于 2009-10-30 12:54 发表
自行参考修改
点script--〉run。 调用下面这个vbs。。。。。。。
'* date =2009-10-30

' § define §
dim Tab0,Tab1
dim usernameA,passwordA,usernameB,passwordB

' § init §
usernameA=xxx ...


谢谢

有没有办法能够省略这一部:“点script--〉run”,就是放桌面上,鼠标一点就自动执行。
作者: emperor    时间: 2009-10-30 15:34
标题: 回复 #6 不进一环 的帖子
当然有。vbs就可以实现。甚至你可以发到win的schedule里。这里仅给个提示:。。。。。

Set WShell = CreateObject("WScript.Shell")
sCmd="C:\Program Files\VanDyke Software\SecureCRT\SecureCRT.exe"
getPath = " /script xxx.vbs"
WShell.Run chr(34) & sCmd& chr(34) & getPath
作者: 不进一环    时间: 2009-11-04 20:50
原帖由 emperor 于 2009-10-30 15:34 发表
当然有。vbs就可以实现。甚至你可以发到win的schedule里。这里仅给个提示:。。。。。

Set WShell = CreateObject("WScript.Shell"
sCmd="C:\Program Files\VanDyke Software\SecureCRT\SecureCRT.exe"
...



搞不懂vbs、js,太复杂了

用的批处理文件登陆,再执行 script

这个script也sct自己录制的

总算解决了问题

bat文件

---------------------------------------------
@E:\SecureCRT\SecureCRT.exe /T /SCRIPT e:\关机vbs\down.vbs /SSH2 root@1.1.1.1 /PASSWORD 123456


sct录制的, down.vbs
---------------------------------------------
#$language = "VBScript"
#$interface = "1.0"

crt.Screen.Synchronous = True

' This automatically generated script may need to be
' edited in order to work correctly.

Sub Main
        crt.Screen.WaitForString "# "
        crt.Screen.Send "sync; init 0" & chr(13)
End Sub

--------------------------------------------
作者: emperor    时间: 2009-11-04 22:08
标题: 回复 #8 不进一环 的帖子
bat 让我不爽的就是从来都有个黑框直到程序结束
当然,在不追求效率的情况下
能用就是最大的成功,计算机应该是给人带来快乐地
用什么形式不是最重要的。。。。。。。
作者: flw    时间: 2009-11-04 23:34
Perl 很容易可以做。
我把全套 Net::SSH:erl 都研究透了……
作者: 寂寞烈火    时间: 2009-11-04 23:36
原帖由 flw 于 2009-11-4 23:34 发表
Perl 很容易可以做。
我把全套 Net::SSH:erl 都研究透了……

您是高人!
作者: beyondfly    时间: 2009-11-04 23:57
原帖由 flw 于 2009-11-4 23:34 发表
Perl 很容易可以做。
我把全套 Net::SSH:erl 都研究透了……


绝对高人
作者: 不进一环    时间: 2009-11-05 12:34
原帖由 emperor 于 2009-11-4 22:08 发表
bat 让我不爽的就是从来都有个黑框直到程序结束
当然,在不追求效率的情况下
能用就是最大的成功,计算机应该是给人带来快乐地
用什么形式不是最重要的。。。。。。。




bat 用 start 执行的话,黑框可以消失,但是我没测试成功。

前面给的例子里面,Set Tab0= crt.Session.ConnectInTab ("/ssh  " &SolarisA& " 22") 这一部,无论如何也通过不了,直接写ip地址报错找不到host。最后放弃了。

原来想的就是只有一个对话框,按确认继续执行关机操作,多余的信息和窗口一个不要。 但是各种方法都要出现程序窗口,这个实在没办法。

用bat必须一步一步手动关闭Ssrt,到起了一个确认作用,将就了。

目的就是让扫地的大妈经过1分钟培训都会关机,现在看来勉强达到。
作者: emperor    时间: 2009-11-05 17:46
原帖由 flw 于 2009-11-4 23:34 发表
Perl 很容易可以做。
我把全套 Net::SSH:erl 都研究透了……

这么低级别的问题也要进来说一句,典型的混分嘛 。。。。。。。
作者: emperor    时间: 2009-11-05 17:51
原帖由 不进一环 于 2009-11-5 12:34 发表




bat 用 start 执行的话,黑框可以消失,但是我没测试成功。

前面给的例子里面,Set Tab0= crt.Session.ConnectInTab ("/ssh  " &SolarisA& " 22") 这一部,无论如何也通过不了,直接写ip地址报错找不 ...

SolarisA=“1.1.1.1”
Set Tab0= crt.Session.ConnectInTab ("/ssh  " &SolarisA& "  22")
这样呢?
vbs就是有一点
少了个空格也能要半天功夫找出来
从来它的报错都没有IDE那么分明
基本靠联想和经验
用久了就好了
说深了,靠悟性。。。。。。
作者: ttcn_cu    时间: 2009-11-05 21:39
简单的事情可以简单做么
Windows下的ssh叫做plink.exe putty 套件出品
除了支持大部分ssh功能外,还支持吧密码放在命令行里。如果觉得不安全,也可以用putty套间里出的sshkey来做身份验证。。。
下载地址:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html


E:\Tools\putty>plink
PuTTY Link: command-line connection utility
Release 0.60
Usage: plink [options] [user@]host [command]
       ("host" can also be a PuTTY saved session name)
Options:
  -V        print version information and exit
  -pgpfp    print PGP key fingerprints and exit
  -v        show verbose messages
  -load sessname  Load settings from saved session
  -ssh -telnet -rlogin -raw
            force use of a particular protocol
  -P port   connect to specified port
  -l user   connect with specified username
  -batch    disable all interactive prompts
The following options only apply to SSH connections:
  -pw passw login with specified password
  -D [listen-IP:]listen-port
            Dynamic SOCKS-based port forwarding
  -L [listen-IP:]listen-port:host:port
            Forward local port to remote address
  -R [listen-IP:]listen-port:host:port
            Forward remote port to local address
  -X -x     enable / disable X11 forwarding
  -A -a     enable / disable agent forwarding
  -t -T     enable / disable pty allocation
  -1 -2     force use of particular protocol version
  -4 -6     force use of IPv4 or IPv6
  -C        enable compression
  -i key    private key file for authentication
  -noagent  disable use of Pageant
  -agent    enable use of Pageant
  -m file   read remote command(s) from file
  -s        remote command is an SSH subsystem (SSH-2 only)
  -N        don't start a shell/command (SSH-2 only)
  -nc host:port
            open tunnel in place of session (SSH-2 only)
作者: 不进一环    时间: 2009-11-06 11:41
原帖由 ttcn_cu 于 2009-11-5 21:39 发表
简单的事情可以简单做么
Windows下的ssh叫做plink.exe putty 套件出品
除了支持大部分ssh功能外,还支持吧密码放在命令行里。如果觉得不安全,也可以用putty套间里出的sshkey来做身份验证。。。
下载地址:
...


这个应该就是我要找的

去试试
作者: emperor    时间: 2009-11-06 11:41
原帖由 ttcn_cu 于 2009-11-5 21:39 发表
简单的事情可以简单做么
Windows下的ssh叫做plink.exe putty 套件出品
除了支持大部分ssh功能外,还支持吧密码放在命令行里。如果觉得不安全,也可以用putty套间里出的sshkey来做身份验证。。。
下载地址:
...

俺还真不知道怎么简易的用plink来实现楼主的要求呢
高人给指点下贝 。。。。
作者: emperor    时间: 2009-11-06 11:44
原帖由 不进一环 于 2009-11-6 11:41 发表


这个应该就是我要找的

去试试

试完了你就会感觉putty在scrt面前是裸奔的。。。。。。。
作者: ttcn_cu    时间: 2009-11-06 12:22
原帖由 emperor 于 2009-11-6 11:41 发表

俺还真不知道怎么简易的用plink来实现楼主的要求呢
高人给指点下贝 。。。。


冒充一回高人吧

把ls换成lz需要用到的指令就可以了
需要封装的话,吧那条命令做个bat

Microsoft Windows [Version 6.0.6000]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\>cd Users

C:\Users>cd ttcn\Software\putty

C:\Users\ttcn\Software\putty>plink.exe 150.xxx.xxx.xxx -l root -pw root的密码 ls

Desktop
MakeConfig
Mar30_02A.log
Mar30_02B.log
作者: ttcn_cu    时间: 2009-11-06 12:29
标题: 回复 #19 emperor 的帖子
不太理解,putty没有那么弱吧
作者: linkejin    时间: 2009-11-06 13:48
标题: 回复 #10 flw 的帖子
flw好像在南京啊,教我写脚本吧,^_^
作者: emperor    时间: 2009-11-06 15:55
原帖由 ttcn_cu 于 2009-11-6 12:22 发表


冒充一回高人吧

把ls换成lz需要用到的指令就可以了
需要封装的话,吧那条命令做个bat

Microsoft Windows [Version 6.0.6000]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
...

还真就是冒充
你这是什么,连lz的题目都不审一审,登进去了,怎么自动关机阿??
putty只是个连接工具而已,与自动八杆子打不着
scrt之所以可以自动,是因为有接口。。。。。。。。
作者: emperor    时间: 2009-11-06 16:00
原帖由 ttcn_cu 于 2009-11-6 12:29 发表
不太理解,putty没有那么弱吧

这和弱有嘛关系。
用叉子怎么喝水阿?。。。。。
作者: ttcn    时间: 2009-11-06 17:19
标题: 回复 #23 emperor 的帖子
你自己有没有看清楚,我并没有用putty,我用的是plink,不是putty,
lz说的关机条件是放在"桌面上"我理解指的是Windows桌面

那么就放两个bat在桌面上,里面一行命令, plink.exe -pwyour password root@yourhost "shutdown -h now"

我理解完全没有错误啊!

等楼主澄清好了!

[ 本帖最后由 ttcn 于 2009-11-6 17:22 编辑 ]
作者: liuhanzhao    时间: 2009-11-06 18:07
还有windows版本下的expect脚本可以选择了
作者: 不进一环    时间: 2009-12-08 17:42
原帖由 ttcn 于 2009-11-6 17:19 发表
你自己有没有看清楚,我并没有用putty,我用的是plink,不是putty,
lz说的关机条件是放在"桌面上"我理解指的是Windows桌面

那么就放两个bat在桌面上,里面一行命令, plink.exe -pwyour password root@yourhost  ...


这个非常好用,而且没有程序窗口出现

有个小问题:有时候服务器不是全部开机的,遇到没开机的服务器plink就会等很久直到超时才执行下一步,能设置连接超时的时间就完美了!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2