linux运维笔记:SSH批量管理分发项目实战

1-部署环境。

[root@m01 ~]# cat /etc/redhat-release

CentOS release 6.9 (Final)

[root@m01 ~]# uname -r

2.6.32-696.el6.x86_64

2-实现架构拓扑。

3-具体步骤。

1-批量添加用户oldboy

[root@m01 ~]# useradd oldboy

[root@m01 ~]# echo 123456|passwd --stdin oldboy

2-调整优化 ssh 配置文件

[root@m01 ~]# sed -i '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUserDNS no\nGSSAPIAuthentication no' /etc/ssh/sshd_config

3-hosts 解析

[root@m01 ~]# cat >>/etc/hosts<<EOF

172.16.1.5 lb01

172.16.1.6 lb02

172.16.1.7 web02

172.16.1.8 web01

172.16.1.51 db01

172.16.1.31 nfs01

172.16.1.41 backup

172.16.1.61 m01

EOF

4-用普通用户生成密钥。

[root@m01 ~]su - oldboy

[oldboy@m01 ~]$ ssh-keygen -t dsa (一路回车)

#--->ssh-keygen 是生产秘钥的工具, -t 指定建立秘钥的类型,这里是建立 dsa 类型秘钥

#--->也可以执行 ssh-keygen -t rsa 来建立 rsa 类型秘钥

#--->RSA 与 DSA 加密算法的区别

#--->RSA 是一种加密算法(PS:RSA 也可以进行数字签名),它的简写的来由是 Ron vest,Adi shamir和 Leonard adaemon,这三个首字母连接起来就是 RSA

#--->DSA 就是数字签名算法的英文全称的简写,即 Digital Signature Algorithm,简写就是 DSA,RSA 既可以进行加密也可以进行数字签名实现认证,而 DSA 只能用于数字签名实现认证。

非交互式创建密钥:

1、一键生成密钥对 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1

2、echo -e "\n"|ssh-keygen -t dsa -N ""

[oldboy@m01 ~]$ ls .ssh/ -al

total 20

drwx------ 2 oldboy oldboy 4096 Apr 17 21:33 .

drwx------ 3 oldboy oldboy 4096 Apr 17 22:01 ..

-rw------- 1 oldboy oldboy  668 Apr 17 21:23 id_dsa

-rw-r--r-- 1 oldboy oldboy  600 Apr 17 21:23 id_dsa.pub

-rw-r--r-- 1 oldboy oldboy  786 Apr 17 21:34 known_host

5-分发公钥。

未更改默认端口的话,执行:

[oldboy@m01 ~]$ ssh-copy-id -i .ssh/id_dsa.pub oldboy@172.16.1.41

已更改端口的话,执行:

ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 oldboy@172.16.1.41"

#该命令只能发公钥,不能发私钥

在backup上查看,发现被改名为权限是 600 的 autorized_keys.

[oldboy@backup ~]$ ls -l ./.ssh/

total 12

-rw-------. 1 oldboy oldboy 600 Apr 17 21:33 authorized_keys

-rw-------. 1 oldboy oldboy 668 Apr 17 21:31 id_dsa

-rw-r--r--. 1 oldboy oldboy 603 Apr 17 21:31 id_dsa.pub

也可以通过 scp、 rsync 等手动拷贝(需要注意 600 的权限以及更名 authorized_keys)

6-批量操作测试。

批量查看1:

[oldboy@m01 ~]$ cat neihe.sh

#!/bin/sh

for n in 31 41

do

ssh -p22 172.16.1.$n cat /etc/redhat-release

done

[oldboy@m01 ~]$ bash neihe.sh

CentOS release 6.9 (Final)

CentOS release 6.9 (Final)

批量查看2:

[oldboy@m01 ~]$ cat neihe.sh

#!/bin/sh

for n in 31 41

do

  echo "===172.16.1.$n==="

  ssh -p22 172.16.1.$n $1

done

[oldboy@m01 ~]$ sh neihe.sh "cat /etc/redhat-release"

===172.16.1.31===

CentOS release 6.9 (Final)

===172.16.1.41===

CentOS release 6.9 (Final)

[oldboy@m01 ~]$ sh neihe.sh "/sbin/ifconfig eth0"

批量分发1:

[oldboy@m01 ~]$ cat neihe.sh

#!/bin/sh

for n in 31 41

do

  echo "===172.16.1.$n==="

  scp -P22 $1 172.16.1.$n:~

done

[oldboy@m01 ~]$ scp -P22 444 172.16.1.31:

/etc/ #只能推送到对方服务器oldboy的家目录

scp: /etc//444: Permission denied

[oldboy@m01 ~]$ scp -P22 444 172.16.1.31:~

444                   100%    0     0.0KB/s   00:00

[oldboy@nfs01 ~]$ ls

111  222  333  444

批量分发2:

[oldboy@m01 ~]$ vim neihe.sh

#!/bin/sh

if [ $# -ne 1 ];then

echo "USAGE:/bin/sh $0 FILENAME"

exit 1

fi

for n in 31 41

do

  echo "===172.16.1.$n==="

  scp -P22 $1 172.16.1.$n:~

done

[oldboy@m01 ~]$ bash neihe.sh

USAGE:/bin/sh neihe.sh FILENAME

[oldboy@m01 ~]$ bash neihe.sh 555

===172.16.1.31===

555                   100%    0     0.0KB/s   00:00    

===172.16.1.41===

555                   100%    0     0.0KB/s   00:00  

[oldboy@backup ~]$ ls

111  222  333  555

批量分发3:

[oldboy@m01 ~]$ vim neihe.sh

#!/bin/sh

. /etc/init.d/functions

if [ $# -ne 1 ];then

  echo "USAGE:/bin/sh $0 FILENAME"

  exit 1

fi

  for n in 31 41

do

  echo "===172.16.1.$n==="

  scp -P22 $1 172.16.1.$n:~ &>/dev/null

  if [ $? -eq 0 ];then

  action "dis $1 to 172.16.1.$n" /bin/true

  else

  action "dis $1 to 172.16.1.$n" /bin/false

fi

done

[oldboy@m01 ~]$ bash neihe.sh 666

===172.16.1.31===

dis 666 to 172.16.1.31                                 [  OK  ]

===172.16.1.41===

dis 666 to 172.16.1.41                                 [  OK  ]

4-SSH 免密码登陆小结:

1) 免密码登陆验证是单向的,方向从私钥(钥匙) ===》公钥(锁)

2) ssh免密码登陆是基于相同用户,最好不要跨不同的用户

3) ssh连接慢的问题解决方案(优化/etc/ssh/sshd_config)

5-SSH 批量管理步骤:

1) 所有机器创建用户及密码

useradd oldboy

echo 123456|passwd --stdin oldboy

id oldboy

su - oldboy

2) 创建秘钥对

ssh-keygen -t dsa(全部回车至无需确认为止)

3) m01 分发公钥

ssh 默认 22 端口时:

ssh-copy-id -i .ssh/id_dsa.pub oldboy@172.16.1.41

ssh 端口非默认时:

ssh-copy-id -i .ssh/id_dsa.pub “-p 52113 oldboy@172.16.1.31”

4) 测试

ssh -p52113 oldboy@172.16.1.31 /sbin/ifconfig eth0

非第一次不需输入密码即为正确

注意: ssh -p52113 oldboy@172.16.1.31 “cat /etc/redhat-release”

有间隔的整条命令最好用“”括起来

7-SSH批量分发提权

方法1:配置sudoers

1-配置sudoers(在服务器backup配置)

[root@backup ~]# echo "oldboy ALL= NOPASSWD: /usr/bin/rsync" >>/etc/sudoers

2-先scp复制到家目录

[oldboy@m01 ~]$ scp -P22 hosts oldboy@172.16.1.41:~

3-再ssh复制到/etc/hosts

[oldboy@m01 ~]$ ssh -p22 -t oldboy@172.16.1.41 sudo rsync -avz ~/hosts /etc/hosts

方法2:设置 suid 权限

[root@nfs01 ~]# ls -l `which rsync`

-rwxr-xr-x. 1 root root 414968 Apr 30 2014 /usr/bin/rsync

[root@nfs01 ~]# chmod u+s `which rsync` (chmod 4755 `which rsync`)

[root@nfs01 ~]# ls -l `which rsync`

-rwsr-xr-x. 1 root root 414968 Apr 30 2014 /usr/bin/rsync

[oldboy@m01 ~]$ scp -P22 hosts oldboy@172.16.1.31:~

#端口22的话可以省略,即-P22可以去掉

[oldboy@m01 ~]$ ssh -p22 oldboy@172.16.1.31 rsync -avz ~/hosts /etc/hosts

方法3:直接使用 root

需要取消 ssh 配置文件里/etc/ssh/sshd_config禁止 root 登录的限制。

企业级生产场景批量管理自动化管理方案:

1) 最简单最常用 ssh key,功能最强大,一般中小企业会用,50-100 台以下

2) sina cfengine/puppet 较早的批量管理工具,现在基本没企业用

3) 门户级别较流行的, puppet 批量管理工具,复杂、笨重

4) saltstack 批量管理工具,特点:简单、功能强大(配置复杂),赶集网、小米以及一些 CDN 公司常用

5) http+cron

批量管理路线: ssh key--->puppet--->saltstack/ansible

8-如何实现自动创建秘钥对,同时分发公钥(编写脚本实现)

需要安装一个软件sshpass用来提供用户密码:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

yum -y install sshpass

[root@m01 ~]# vim fenfa.sh

#!/bin/bash

###make key

\rm -f /root/.ssh/id_dsa

ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q

###fengfagongyao

for ip in 31 41

do

echo ====fenfa key to host 172.16.1.$ip====

sshpass -p111111 ssh-copy-id -i /root/.ssh/id_dsa.pub "-

o StrictHostKeyChecking=no root@172.16.1.$ip"

echo ===============fenfa end==============

echo ""

done

脚本说明:

ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q

创建密钥,-f指定存放位置,-P 密钥加密的密码  -q 减少信息输出

sshpass -p111111 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"

ssh-copy-id 命令来分发密钥 -i 指定密钥本地存放的路径

-o StrictHostKeyChecking=no 在登陆其他服务器时不选择yes/no

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好知识传播者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值