免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 15967 | 回复: 9
打印 上一主题 下一主题

bssh (batch ssh):使用密码的ssh自动登录程序批量管理Linux服务器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 11:36 |只看该作者 |倒序浏览
刚刚注意到sshpass程序。相比较而言,bssh更为好用。

bssh是c语言程序,提供了bssh、bsftp和tt2程序。其中bssh和bsftp分别对应ssh和sftp客户端。bssh/bsftp除了一个-p选项用以输入密码外,用法和ssh/sftp一致。需要说明的是bssh/bsftp目前只接受ssh/sftp可以接受的-o选项。

如果可以同时设定服务器端和客户端,使用类似bssh的程序没有必要。公钥认证是更好的方式。可惜,诸多原因,很难如愿。

对于单独一台或者几台服务器,可以直接使用bssh/bsftp来处理。比如:
bssh -p 'testpassword' -oPort=33458 test@192.168.2.45 'ls /etc/cron.daily'
普通用户登录后,使用su使用root权限:
bssh -p 'testpasswd' -r 'rootpassword' -oPort=33458 test@192.168.2.45 'ls /etc/cron.daily' 'echo hello'
直接root登录:
bssh -p 'rootpasswd' -oPort=33458 root@192.168.2.45 'ls /etc/cron.daily;echo hello'
bssh还支持管道:
echo 'ls /etc/cron.daily;echo hello' | bssh -p 'testpasswd' -r 'rootpassword' -oPort=33458 test@192.168.2.45 -
bsftp的用法与此类似,但是不支持登录后的su功能(没有必要)。
bsftp -p 'testpassword' -oPort=33458 test@192.168.2.45 'cd /home/test/db' 'get test_download'
另外,bssh/bsftp在初次登录ssh服务器时,会对是否保存服务器公钥指纹自动答复“yes”。并且在ssh远程登录后自动调整bash执行环境:将语言设定为en_US.utf8,把PATH设定为/usr/bin:/bin:/usr/sbin:/sbin。


对于服务器数量较多的情况,固然可以利用bash和bssh/bsftp搭配使用来处理。但是这个方案里有些不方便处。其一,需要处处注意bash的特殊字符;其二,如果服务器配置各自不同,比如密码不一样,登录端口不一致,在shell里处理起来相当麻烦。解决对大量服务器的循环处理,是tt2程序的功能。tt2使用bssh/bsftp,从配置文件中取得需要处理的服务器的登录设置。tt2使用parser程序解析配置文件,允许对每台服务器指定自己的登录方式。比如,如果有如下内容的配置文件test.conf:
user=test
passwd=testpassword
rootpasswd=rootpassword
port=33548
192.168.2.45
192.168.3.88
rootpasswd=anotherrootpasswd
192.68.5.56

可以如下执行命令:
tt2 -f test.conf 'ls /var/log'
tt2 -f test.conf 'ls /var/log' 'echo hello'
tt2 -f test.conf 'ls /var/log;echo hello'
在tt2里使用bsftp,而非默认的bssh,可以这么执行:
tt2 -c bsftp -f test.conf 'ls /var/log' 'get messages'

如上例所示。tt2的配置文件里每行都有一个标志说明所在行的意义。user:普通用户名;password:普通用户密码;rootpassword:使用普通用户登录成功后,su使用的密码;port:ssh服务器端口;ip:需要处理的服务器IP地址;以#开头的行:注释。对于空行则是直接跳过。

bssh的包在ubuntu、AS4和AS5上测试使用过。编译步骤如下:
tar xfj bssh.tar.bz2
cd bssh-1.2
make final
bssh、bsftp和tt2及parser就准备好了。将这4个程序放在一个目录下,在此目录下即可执行(这一点下一步改进)。

bssh/bsftp通过使用ssh的自动密码登录,将远程操作和本地操作,在shell环境下实现无区别处理。

另外,你可以使用-h选项看到简单帮助提示。都是用很烂的英语写的。

bssh.tar.bz2的校验:
文件大小:12915 字节
修改时间:2009年12月22日 11:35:18
MD5     : 79A9B939DBD525212F292BE10614B3C6
SHA1    : 6475A2E36D992E7DA751768F5BF3CD900427157F
CRC32   : A365A1C9

bssh源代码置于GPL 3及其以后版本的许可证下。

sshpass见此处:http://sourceforge.net/projects/sshpass/files/

[ 本帖最后由 白丁布衣 于 2009-12-23 11:26 编辑 ]

bssh.tar.bz2

12.61 KB, 下载次数: 68

论坛徽章:
0
2 [报告]
发表于 2009-12-22 11:56 |只看该作者
这个相当于是linux下的crt了

论坛徽章:
0
3 [报告]
发表于 2009-12-22 12:35 |只看该作者

不是crt

不是crt。写代码之初就没有考虑交互式的使用,图形界面更是没有考虑(工作环境都是在终端界面下)。对这点略感遗憾。不过,我现在是有考虑为这个程序增加一个一个HTTP的界面,与apache配合使用。再配合mysql。
目前还在处理apache和mysql的使用。apache的cgi程序已经可以运转。基本的思路是使用xml作为apache和bssh的协议和数据传输中介,搞一个可扩展的服务器管理监控程序。
正如bssh程序现在有的特点一样。这个方案只需要服务器端有ssh服务可用即可。监控什么,怎么监控,给谁监控都由实施者决定。只需要在一点部署,所有服务器就可以用。

[ 本帖最后由 白丁布衣 于 2009-12-22 12:41 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-12-23 09:34 |只看该作者

原来做的bssh的原理图。

原来做的bssh的原理图。

论坛徽章:
0
5 [报告]
发表于 2009-12-23 12:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2009-12-23 13:36 |只看该作者

回复 #5 notnumb 的帖子

老兄说的对。我还做了一个从windows上批量管理Linux服务器的实现。用到了perl、tcl和expect。有兴趣我可发上来。如果可以在管理电脑上自由的安装软件,bssh使用的必要性并不大。expect以及perl之类的脚本中都有对应的expect模块。我在Linux下也做了类似实现。bssh只是类似可以使用方案中的一个而已。bssh,直接编译就可以使用。没有麻烦的依赖之类。可以说有这么几个特点:
其一:不需要部署。属于随时需要随时可以上传使用的。如果管理服务器超过100台,各种各样的情况都会出现。指望安装软件包可能不能实现。
其二:效率。bssh比起我在win上的脚本实现,快了不是一点半点。
其三:bssh是作为平台软件功能设计的。这里包括对管道的支持,自动回复初次保存服务器公钥签名,自动调整执行环境,支持ssh和sftp。bssh使得对远程服务器的操作,类似于本地。可以做什么仅取决于使用者。

管理几台服务器和几百台服务器,是完全不同的工作需求。bssh对于批量处理服务器管理任务是很有帮助的。尤其是远程维护时。另外一些例行的工作、或者需要周期性来视情况而定的周期性工作,都很有益处。只要能用脚本处理的工作即可有bssh成完成。

论坛徽章:
0
7 [报告]
发表于 2009-12-23 16:18 |只看该作者

编写脚本应该注意的事项

编写脚本应该注意的事项:
其一:脚本不应该是一锤子买卖。可以反复执行应该是基本要求。相信我,这样你不得不足够细致的考虑。大批量管理时,满足这一点的脚本既可以避免很多错误,又非常实用。
其二:如果可以,应该准备撤销选项或者操作。
其三:执行过程完整记录,或者使用数据库来保持事务性。数据库的重要性无论如何强调都不过分。幸好,linux里可用的数据库颇丰。
其四:总是有操作失败的服务器在。
其五:必须提供检查操作成功失败与否的对应脚本,并且逐一检查。
其六:返回值可用,用之;否则自行检查。

对于使用bssh的一些建议:
其一:使用正则表达式做进程管理值得商榷。这点在用在工具链中时尤其堪忧。推荐使用PID。这是我用的一个从可执行文件得到pid的脚本:
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
LANG=C
fuser $1 >/dev/null || exit 1
echo `fuser $1` | cut -d ':' -f 2 | sed 's/c//g;s/e//g;s/f//g;s/r//g;s/r//g;s/^ //'
exit 0
其二:注意变量是要本地shell来解析,还是远程。如果可以,坚持使用单引号。
其三:使用繁琐、但是简单的方案,也不要使用复杂精致的方案。如果操作过程单用命令不易,可以写成脚本,由bsftp上传后,再用bssh远程执行。
其四:可以顺序执行数个bssh/bsfp程序。无误为重,简单为要。

[ 本帖最后由 白丁布衣 于 2009-12-23 16:30 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-12-24 08:50 |只看该作者

关于密码出现在命令行中的安全问题

关于密码出现在命令行中的安全问题
密码直接要在命令行里出现。如果有人ps,是可以看到的。所以,bssh也好、sshpass也好,对这个问题都需要使用者来规避风险。如果有类似风险,使用者应该避免使用这样的工具。另外,bssh执行完毕,立刻清空history记录也是好习惯。

论坛徽章:
0
9 [报告]
发表于 2009-12-24 13:21 |只看该作者

大家对平时脚本的使用也和心得?

大家对平时脚本的使用也和心得?
个人使用一次两次的脚本?
大家使用的脚本?
用在工具链中的脚本?

论坛徽章:
0
10 [报告]
发表于 2009-12-24 20:44 |只看该作者

关于命令行里选项使用明文密码带来的安全问题

关于命令行里选项使用明文密码带来的安全问题。
即使在控制台密码登录,密码也有明文存在的时间和传递路径。如果在这个时段或者通道不安全,你对在命令行里使用明文密码所担心的各个方面,在此都值得考虑。换句话说,bssh使用明文密码并非不可。关键是理解使用bssh带来的安全方面的影响。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP