批量分发

ssh两种用法
  • 远程连接主机
  • 不连接过去,只是执行命令
ssh用法:
-p加端口,默认22可以省略
@前面为用户名,不指定为当前用户
@后面为要连接的服务器的IP
 
(1)[root@backup .ssh]# ssh -p21987 hp@10.69.112.78
  The authenticity of host '[10.69.112.78]:21987 ([10.69.112.78]:21987)' can't be established.
  RSA key fingerprint is ae:b5:46:d4:ef:f0:82:3d:ab:0d:dd:59:9c:70:38:92.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added '[10.69.112.78]:21987' (RSA) to the list of known hosts.
      hp@10.69.112.78's password: 
  Last login: Wed Oct 19 16:18:44 2016 from 10.69.112.77
 
(2)[root@backup ~]# ssh -p21987 hp@10.69.112.78 /sbin/ifconfig eth2
     hp@10.69.112.78's password: 
  eth2      Link encap:Ethernet  HWaddr 92:D5:6C:92:BA:C0  
            inet addr:10.69.112.78  Bcast:10.69.112.255  Mask:255.255.255.0
            inet6 addr: fe80::90d5:6cff:fe92:bac0/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:234774 errors:0 dropped:0 overruns:0 frame:0
            TX packets:196553 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:0 
            RX bytes:27878853 (26.5 MiB)  TX bytes:15731641 (15.0 MiB)
ssh小结
1 切换到别的机器上 ssh -p21987 user@ip
2 到其他机器上执行命令(不会切到机器上)ssh -p21987 user@ip 命令(全路径)
3 当第一次ssh连接的时候,本地会产生一个密钥文件~/.ssh/known_hosts
 
ssh配置文件优化:

Port 21987
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin no
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
UseDNS no
Subsystem sftp /usr/libexec/openssh/sftp-server

 
scp -P21987 -r -p /etc/ hp@10.69.112.78:/tmp/
-r 递归
-p保持属性
rsync -avz -e 'ssh -p 21987' /etc hp@10.69.112.78:/tmp
 
批量分发
[root@backup tmp]# sftp -oPort=21987 hp@10.69.112.78
Connecting to 10.69.112.78...
hp@10.69.112.78's password: 
sftp> put /etc/passwd
Uploading /etc/passwd to /home/hp/passwd
/etc/passwd                                                                                        100% 1072     1.1KB/s   00:00    
 
scp小结:
1 scp是加密的远程拷贝,而cp仅为本地拷贝
2 可以把数据从一台机器推送到另一台机器,也可以从其他服务器把数据拉回来
3 每次都是全量完整拷贝,效率不高,适合第一次拷贝,如果需要增量拷贝,用rsync
 
[root@nfs-server ~]# useradd oldboy
[root@nfs-server ~]# echo centos | passwd --stdin oldboy
#生成密钥对
[root@nfs-server ~]# 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/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
eb:07:16:62:44:c6:e1:d7:00:5d:9d:d7:31:f3:31:fe root@nfs-server
The key's randomart image is:
+--[ DSA 1024]----+
|     o=+.... . B.|
|     oo .o  o o B|
|     .. . .  . ..|
|      o..       .|
|     . .S.      E|
|        o.       |
|       ...       |
|       .  .      |
|        ..       |
+-----------------+
#分发公钥,把10.69.112.78上的id_dsa.pub放到10.69.112.133下的/home/oldboy/.ssh/authorized_keys
[root@nfs-server ~]# ssh-copy-id -i .ssh/id_dsa.pub "-p 21987 oldboy@10.69.112.133"
 
[root@nfs-server ~]# scp -P21987 /etc/hosts oldboy@10.69.112.133:~hosts  
 
authorized_keys权限600

echo 'oldboy ALL = (ALL) NOPASSWD:/usr/bin/rsync' >>/etc/sudoers

visudo -c #检查语法

 

78分发机

10.69.213.78

10.69.213.133

10.69.213.134

现在想从133 和144上ssh连接78

在78上把私钥发送到133和134上

scp -P21987 .ssh/id_dsa oldboy@10.69.112.133:~/.ssh

scp -P21987 .ssh/id_dsa oldboy@10.69.112.134:~/.ssh

在78上把公钥替换authorized_keys

ssh-copy-id -i .ssh/id_dsa.pub "-p 21987 oldboy@10.69.112.78"

 

A想免密码连接B,就把A上的公钥发送到B上,B上显示的是authorized_keys,需要600权限

批量分发文件

(1)78上的hosts文件分发到133、134上oldboy家目录下

#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 1 ]
then
echo "USAGE:$0 FILAENAMEA"
exit 1
fi
for n in 133 134
do
scp -P21987 -rp $1 oldboy@10.69.112.$n:~ &>/dev/null
if [ $? -eq 0 ]
then
action "$n is ok" /bin/true
else
action "$n is fail" /bin/false
fi
done

 

(2)78上hosts文件分发到133、134的/etc/下

提权分发,不想用root分发

echo "oldboy ALL = (ALL) NOPASSWD:/usr/bin/rsync" >>/etc/sudoers

visudo -c

#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 2 ]
then
echo "USAGE:$0 FileName RemoteDir"
exit 1
fi
for n in 133 134
do
scp -P21987 -rp $1 oldboy@10.69.112.$n:~ &>/dev/null
ssh -p21987 -t oldboy@10.69.112.$n sudo rsync $1 $2
if [ $? -eq 0 ]
then
action "$n is ok" /bin/true
else
action "$n is fail" /bin/false
fi
done

 

每分钟定时分发hosts文件到所有机器上,并把分发失败的机器信息邮件发送

 

posted @ 2016-10-20 13:49  hongpeng0209  阅读(486)  评论(0编辑  收藏  举报