##### STEP 1 :主机之间互相信任,密钥对认证
### mussh 主机生成密钥对:
[root@localhost ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): ## 输入私钥密码
Enter same passphrase again: ## 重复私钥密码
Your identification has been saved in /root/.ssh/pri_dsa.
Your public key has been saved in /root/.ssh/pri_dsa.pub.
The key fingerprint is:
c0:06:54:98:49:5b:9f:f3:de:79:1c:0f:3f:46:ef:51 root@localhost.localdomain
The key's randomart p_w_picpath is:
+--[ DSA 1024]----+
| o+=o |
| += . . |
| . + + |
| . . o |
| S . o.E|
| . . o.=o|
| . o o++|
| ...o|
| .|
+-----------------+'
[root@localhost ~]# cat /root/.ssh/id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAOJ20Be45e/E/6AqlBFG89qcNPmsKqlXsWTmerf+MvY4G2qcxluGtjzCLwrGAf0JKFwEC+5OfJBU5JlUhM6HJ3+57zOyK0ZNnhv0h1ICKqF1ndRqoP3eonHD0krKySc/CYMJM2nGF5NRqMhUc+0wOLT4RmX+NB0kXH1EfTAyfSAVAAAAFQDU151234sGUKK4GAPagd87jBqXkwAAAIEA4FmcUNIZ2em2doZqg9jKeTa9GlK1vr2n2jiBTPmyxjY5BHcRb8zje4fm92e/CPTOWWC0ljKjLwzSavcLRfHg0+KU3lb5vxqHImp94HprkUW4e4T3+79h+HKlJ/TKd5UyxnEJDxUG2FNMT9mwq+T+HlMTmaEHGWxSS6ModmCruKEAAA369870bGvp7XP2WWGgclNnHO3IXPXrEuBui6CjjC1S6CdTEE6Z/BX7FarsPr5yI4wnSAHHoojbg78XcxWPlopoyXjxumvIU0WeVyVqVs4V8mgbIuGeamGjXdbeY3XxzcSURnYzZ1+hZJv70+RsS8G083gPi6if7j8vitV/4tfHHx root@localhost.localdomain
[root@localhost ~]#
### 目标主机修改 sshd 配置文件
[root@vm1 ~]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#### 标准教程做法,但是我试了一下注释了这两行,依然可以正常登录,sshd应该是默认打开了密钥认证,所以,除非你想关闭密钥认证,否则修改配置文件没什么意义。
[root@vm1 ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
[root@vm1 ~]#
### 上传公钥到目标主机 vm1 - vm5 :多种方式执行,我是用scp的。
[root@vm1 ~]# mkdir -p /root/.ssh/
# Tip: 若自行创建.ssh/目录,需要确保.ssh/目录(及其下文件)的安全上下文为 ssh_home_t ,否则公钥认证失败。
[root@vm1 ~]# ll -dZ /root/.ssh/
drwxr-xr-x. root root system_u:object_r:ssh_home_t:s0 /root/.ssh/
[root@vm1 ~]#
# 使用restorecon 命令可以修正文件夹安全上下文:
Shell> restorecon -r -vv /root/.ssh
# 当然也可以禁用selinux,但不推荐
[root@localhost ~]# scp /root/.ssh/id_dsa.pub root@172.16.67.201:/root/.ssh/authorized_keys
[root@vm1 ~]# cat /root/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAOJ20Be45e/E/6AqlBFG89qcNPmsKqlXsWTmerf+MvY4G2qcxluGtjzCLwrGAf0JKFwEC+5OfJBU5JlUhM6HJ3+57zOyK0ZNnhv0h1ICKqF1ndRqoP3eonHD0krKySc/CYMJM2nGF5NRqMhUc+0wOLT4RmX+NB0kXH1EfTAyfSAVAAAAFQDU15fnq1sGUKK4GAPagd87jBqXkwAAAIEA4FmcUNIZ2em2doZqg9jKeTa9GlK1vr2n2jiBTPmyxjY5BHcRb8zje4fm92e/CPTOWWC0ljKjLwzSavcLRfHg0+KU3lb5vxqHImp94HprkUW4e4T3+79h+HKlJ/TKd5UyxnEJDxUG2FNMT9mwq+T+HlMTmaEHGWxSS6ModmCruKEAAACBAM6IH0bGvp7XP2WWGgclNnHO3IXPXrEuBui6CjjC1S6CdTEE6Z/BX7FarsPr5yI4wnSAHHoojbg78XcxWPlopoyXjxumvIU0WeVyVqVs4V8mgbIuGeamGjXdbeY3XxzcSURnYzZ1+hZJv70+RsS8G083gPi6if7j8vitV/4tfHHx root@localhost.localdomain
[root@vm1 ~]#
若ssh到普通用户必须修改权限,否则认证失败, 当然,无论是用什么用户,都推荐修改。
[root@vm1 ~]# chmod 700 ~/.ssh#
[root@vm1 ~]# chmod 600 ~/.ssh/authorized_keys
[root@vm1 ~]#
# Tip:普通用户默认是不允许给ssh的, 需要将普通用户加到sshd用户组中。
# 这个是在网上看到的,我不知道其他系统是怎样的,我用CentOS6.4时,没有什么问题,普通用户不用加到sshd用户组也行,无论是ssh登录到普通用户,还是用普通用户ssh登录,不过当ssh出现问题时不访试试。
### ssh测试:
[root@localhost ~]# ssh root@172.16.67.201
The authenticity of host '172.16.67.201 (172.16.67.201)' can't be established.
RSA key fingerprint is 5d:27:0f:5c:33:f3:44:f5:b5:f2:c2:a2:5f:a3:ee:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.67.201' (RSA) to the list of known hosts.
Enter passphrase for key '/root/.ssh/id_dsa':
Last login: Mon Sep 2 17:11:40 2013 from 172.16.67.38'
[root@vm1 ~]# exit
logout
Connection to 172.16.67.201 closed.
### 启用ssh-agent,减少私钥密码认证次数
[root@localhost ~]# eval `ssh-agent`
Agent pid 3939
[root@localhost ~]# ssh-add
Enter passphrase for /root/.ssh/id_dsa:
Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)
[root@localhost ~]# ssh root@172.16.67.201
Last login: Mon Sep 2 17:12:48 2013 from 172.16.64.11
[root@vm1 ~]# exit
logout
Connection to 172.16.67.201 closed.
[root@localhost ~]#
##### STEP 2 : mussh 安装:
wget http://softlayer-dal.dl.sourceforge.net/project/mussh/mussh/1.0/mussh-1.0.tgz
解压即可使用
tar zxvf mussh-1.0.tgz
##=========== mussh 执行命令 ==================
[root@localhost mussh]# cat ./hosts
root@172.16.67.201
root@172.16.67.202
root@172.16.67.203
root@172.16.67.204
root@172.16.67.205
[root@localhost mussh]#
#### -H <file> [file ..] : 指定包含目标主机的文件,可以有多个.
[root@localhost mussh]# ./mussh -H ./hosts -c 'hostname'
root@172.16.67.201: vm1.untx.com
root@172.16.67.202: vm2.untx.com
root@172.16.67.203: vm3.untx.com
root@172.16.67.204: vm4.untx.com
root@172.16.67.205: vm5.untx.com
[root@localhost mussh]#
##=========== mussh 执行本地脚本文件 ===============
# iptables.sh 配置iptables脚本
[root@localhost mussh]# ./mussh -H ./hosts -C /root/scripts/iptables.sh
root@172.16.67.201: iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
root@172.16.67.202: iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
root@172.16.67.203: iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
root@172.16.67.204: iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
root@172.16.67.205: iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
[root@localhost mussh]#
[root@vm1 ~]#
##============= 若目标主机ssh使用其它端口,需要使用 -o 传递ssh配置参数 =========
[root@localhost mussh]# ./mussh -o "Port=58022" -h root@172.16.67.201 -C '/root/scripts/iptables.sh'
root@172.16.67.201: iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
[root@localhost mussh]#
##============= mussh 执行python, 可用 -s 指定shell路径
[root@localhost mussh]# ./mussh -H ./hosts -s /usr/bin/python -C '/root/scripts/nod32/3.py'
root@172.16.67.201: Traceback (most recent call last): # 因为目标机没有安装BeautifulSoup,报错是正常的,证明python文件正确执行了
root@172.16.67.201: File "<stdin>", line 4, in <module>
root@172.16.67.201: ImportError: No module named BeautifulSoup
root@172.16.67.202: Traceback (most recent call last):
root@172.16.67.202: File "<stdin>", line 4, in <module>
root@172.16.67.202: ImportError: No module named BeautifulSoup
root@172.16.67.203: Traceback (most recent call last):
root@172.16.67.203: File "<stdin>", line 4, in <module>
root@172.16.67.203: ImportError: No module named BeautifulSoup
root@172.16.67.204: Traceback (most recent call last):
root@172.16.67.204: File "<stdin>", line 4, in <module>
root@172.16.67.204: ImportError: No module named BeautifulSoup
root@172.16.67.205: Traceback (most recent call last):
root@172.16.67.205: File "<stdin>", line 4, in <module>
root@172.16.67.205: ImportError: No module named BeautifulSoup
[root@localhost mussh]#