我写的自动ssh的程序
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/04/06/autossh.html
因为要管理大量的机器,所以大多的公司,都有一台中转主机,然后在要管理的机器上面设置只有这台中转主机才能连接.但中转主机,每次进入别的主机时,还要在一次输入密码.所以写了一个autossh的程序.来自动登陆做这些事情.
另外,要是你管理少量的主机的话,没有中转主机,但进入你管理的那些机器,也要在登陆时输入多次密码,非常麻烦.在linux下没有象SecureCRT 一样可以记在登陆时记住密码的方便软件.所以次次更换主机登陆都得多次输入.所以也可以使用这个autossh.另外,这个软件不做中转登陆程序时,还有个功能,就是可以中转登陆二次,你在linux上,可以设置先登陆到中转主机,然后在登陆进入目标主机.
使用前,要先写一个你要管理的机器列表,相信所有的系统管理人员都有自己的机器列表.为了清楚显示,建议写上#
机器列表(pwd.txt)
1 2 3 4 5 6 7 8 9 10 | # vim pwd.txt #目的主机 用户名 密码 备注 61.135.1.3 root kisfsdf web主机 211.147.2.3 root kisfsdf www.linux.com www.php-oa.com root 33442 我的网站 #目的主机 目的主机用户名 目的主机密码 中转主机 中转主机用户 中转主机密码 备注 61.135.33.2 root qq 172.16.189.133 root secret 流量管理 61.135.94.3 root qq 172.16.189.131 root secret 服务监控 |
使用方法
1 2 3 | #autossh -s 主机名 #-s参数会查找你的列表中所有主机和备注,只要找到就会自动连接上,是使用的最多的参数 #autossh -s web主机 -c uptime #-c参数会在远程主机上运行-c后面的命令 #autossh -l #显示所有的主机列表 |
下面是如图
下载地址 :http://www.php-oa.com/wp-content/uploads/autossh
5.23日加入新功能
-h 参数 指定一个主机列表,如上
-f 参数,指定一个shell命令列表
这样可以一次操作大量的主机,在命令列表中放到你要排量在远程主机上运行的命令,一个个排列好,一次会读一行,运行下去.
例如: comfile中有如下内容
uptime
cat /etc/redhat-release
使用的命令
1 | #./autossh -h hostlist -f comfile |
会在hostlist中所有主机上运行comfile中写好的命令,显示如下
[root@TEST ~]# uptime
17:33:27 up 4 days, 2:55, 1 user, load average: 22.36, 23.20, 24.11
[root@TEST ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
很多人安全问题
1.给你的中转主机放到内网
2.提心明文密码保存的问题,这个其实很容易解决设置setuid就行.
1 2 3 | # chown root:root autoperl pwd.txt # chmod 400 pwd.txt # chmod 4755 autoperl |
这样的话,普通用户就没法读密码文件了.只有root用户才行,管理好你的root用户就行了
进入远程主机后,vi之类的程序的窗口大小不正常,现己修正
这个文件大量的使用了Expect的模块.下面来个Expect模块的简介
1 2 3 4 5 6 7 8 9 10 | $exp = new Expect; #new一个Expect. $exp->spawn($command,@params); #fork和exec一个新进程用来执行$command命令. $exp->expect($timeout,$content); #'-re'.在$timeout内,期待出现包含$content的内容,默认是精确匹配,也可以使用正则表达式,expect($timeout,re=>''). $exp->send($string); #向终端发送字符 $exp->debug(0|1|2); #打印debug 信息,不同的数字表示不同的bug级别 $exp->interact(); #和用户进行交互,把控制权转交给用户 $exp->soft_close(); #软关闭,直到$timeout时间到达,才关掉该进程 $exp->hard_close(); #硬关闭,立刻关闭该进程 $exp->match(); #返回匹配的结果 $exp->match_number(); #返回匹配的个数 |



















将密码记在文本中,是不是意味着如果中转主机被黑,会涉及到所有管理主机?
这个危险系数?
呵呵这只是一个开始
后面就要写自动执行的啦~对吧~
你会给中转主机放到公网吗???
密码在文本中这个不是问题,可以设置好权限,象passwd这个文件一样就行了,能运行,但不能查看。
有种东西叫做ssh key
签名
——————
兄弟,好久没联系了
有时候,有些机器对外开发。所以还是使用密码方便。用key,那个人离开了,还能控制你的电脑,不方便
之所以用key,就是key可以设定有效期、有效期没有到,也可以设定某个key已经过期
签名
—
说起说起这些加密的东西,三天三夜也说不完
学习了,多谢多谢
好象公钥认证和ssh代理满足的你的需求.
很多时候远程服务器的端口不是默认的22,还有一个是不允许root用户直接登陆的,,还的改善下,,我也研究下。
在匹配 yes/no 的那行代码有点问题,不能匹配,你可以打开debug模式查询。
对这个,我早就知道,主要是有时这个信息出现的时间太久之类就会出问题
yes/no 我又测试了一下,是有问题,修复了一下,呵呵,不好意思
呵呵,脚本运行需要一大堆包,嗯 可以编译成二进制的发布使用
此外 密码存成明文确实不安全
内网,基本上大多数机器的密码都是一致的
因此可以每次提示用户输入一次密码,后续列表就自动使用该密码登陆
btw:
可以参考下http://hi.baidu.com/anonymouslogin/blog/item/4dcf6064506453f8f7365432.html
嗯 楼主的工具还是很不错的~
想看看你的autossh 结果无法下载了。呵。
可以了.修复连接了.上次升级不小心都删除了
这个思路不错,想看看你的autossh怎么写的,这里下不到,有空能email么?
给个mail地址
近来我在写改进的版本…很快就会放出来,所以给老的删除了.