我写的自动ssh的程序

Apr 6th, 2009

转载本站文章请注明,转载自:扶凯[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(); #返回匹配的个数
Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
Tags: ,
  1. schyman
    Apr 7th, 2009 at 09:12
    Reply | Quote | #1

    将密码记在文本中,是不是意味着如果中转主机被黑,会涉及到所有管理主机?
    这个危险系数?

  2. laneovcc
    Apr 7th, 2009 at 15:46
    Reply | Quote | #2

    呵呵这只是一个开始
    后面就要写自动执行的啦~对吧~

  3. admin
    Apr 7th, 2009 at 15:58
    Reply | Quote | #3

    你会给中转主机放到公网吗???

    密码在文本中这个不是问题,可以设置好权限,象passwd这个文件一样就行了,能运行,但不能查看。

  4. coolzsb
    Apr 9th, 2009 at 08:01
    Reply | Quote | #4

    有种东西叫做ssh key

    签名
    ——————
    兄弟,好久没联系了

  5. admin
    Apr 9th, 2009 at 11:48
    Reply | Quote | #5

    有时候,有些机器对外开发。所以还是使用密码方便。用key,那个人离开了,还能控制你的电脑,不方便

  6. coolzsb
    Apr 10th, 2009 at 17:11
    Reply | Quote | #6

    之所以用key,就是key可以设定有效期、有效期没有到,也可以设定某个key已经过期

    签名

    说起说起这些加密的东西,三天三夜也说不完

  7. admin
    Apr 12th, 2009 at 23:08
    Reply | Quote | #7

    学习了,多谢多谢

  8. supersun
    Apr 29th, 2009 at 15:15
    Reply | Quote | #8

    好象公钥认证和ssh代理满足的你的需求.

  9. huifeideluotuo
    May 7th, 2009 at 17:46
    Reply | Quote | #9

    很多时候远程服务器的端口不是默认的22,还有一个是不允许root用户直接登陆的,,还的改善下,,我也研究下。

  10. huifeideluotuo
    May 10th, 2009 at 18:53

    在匹配 yes/no 的那行代码有点问题,不能匹配,你可以打开debug模式查询。

  11. admin
    May 11th, 2009 at 20:59

    对这个,我早就知道,主要是有时这个信息出现的时间太久之类就会出问题

  12. admin
    May 23rd, 2009 at 17:43

    yes/no 我又测试了一下,是有问题,修复了一下,呵呵,不好意思

  13. laiwei
    Jun 23rd, 2009 at 19:58

    呵呵,脚本运行需要一大堆包,嗯 可以编译成二进制的发布使用
    此外 密码存成明文确实不安全

    内网,基本上大多数机器的密码都是一致的
    因此可以每次提示用户输入一次密码,后续列表就自动使用该密码登陆

  14. laiwei
    Jun 23rd, 2009 at 20:00

    btw:
    可以参考下http://hi.baidu.com/anonymouslogin/blog/item/4dcf6064506453f8f7365432.html

    嗯 楼主的工具还是很不错的~

  15. sataonline
    Jul 8th, 2009 at 14:58

    想看看你的autossh 结果无法下载了。呵。

  16. admin
    Jul 8th, 2009 at 15:21

    可以了.修复连接了.上次升级不小心都删除了

  17. miger
    Sep 14th, 2009 at 16:04

    这个思路不错,想看看你的autossh怎么写的,这里下不到,有空能email么?

  18. admin
    Sep 14th, 2009 at 16:40

    给个mail地址

  19. admin
    Sep 15th, 2009 at 10:22

    近来我在写改进的版本…很快就会放出来,所以给老的删除了.