取用户 awk -F”:” ‘/\/bin\/bash$/ {print $1}’ /etc/passwd

一,如何批量分发公钥信息:

ssh 登录免密步骤

  1. 实现步骤: 在管理端操作
  2. 步骤一: 创建秘钥对
  3. ssh-keygen -t dsa
  4. 秘钥存放路径: ~/.ssh/
  5. 步骤二: 分发公钥信息
  6. ssh-copy-id -i ~/.ssh/id_dsa.pub root@10.0.0.7

1,影响批量分发数据交互问题:

  • 新分发秘钥主机需要输入确认信息 😣 解决新机器取消确认——>

    1. ssh -o StrictHostKeyChecking=no 主机地址 --- 禁止服务端询问过程 直接默认确认即可
  • 新分发秘钥主机需要输入密码信息 😣 解决推送秘钥需要输入密码——>

    1. 对于未连接过的主机。而又不输入yes进行确认,需要进行sshd服务的优化(-p指定端口)<br /> **` yum install -y sshpass`**<br /> 测试: **`sshpass -p123456 ssh 172.16.1.31`**
  • 新分发秘钥主机端口需要需要考虑 😣

    1. ssh-copy-id -i ~/.ssh/id_dsa.pub root@172.16.1.41 -p52113

2,编写脚本信息

  1. vim /server/scripts/distribute_pub_key.sh 管理主机上编写
  1. #!/bin/bash
  2. for ip in 7 31 41
  3. do
  4. sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
  5. if [ $? -eq 0 ]
  6. then
  7. echo "host 172.16.1.$ip distribute_pub_key ok."
  8. else
  9. echo "host 172.16.1.$ip distribute_pub_key failed."
  10. fi
  11. done
  • 检查脚本
    1. vim /server/scripts/check_pub_key.sh
    2. #!/bin/bash
    3. for ip in 7 31 41
    4. do
    5. ssh root@172.16.1.$ip hostname
    6. done

    3,基于sshpass+ssh-copy-id免交互分发公钥到多台服务器项目

    需求:1.如果分发秘钥信息时 用户信息不一样 密码信息不一样 端口信息不一样如何批量分发?

    | web01 0.7 | oldboy
    oldboy123 | 52113 | | —- | —- | —- | | nfs 0.31 | oldgirl
    oldgirl123 | 52114 | | backup 0.41 | olddog
    olddog123 | 52115 |

cat /scripts/distribute_pub_key.sh

  1. #!/bin/bash
  2. #针对/server/scripts/host_info.txt 每一行进行循环读取
  3. while read line
  4. do
  5. ip_info=$(echo $line|awk '{print $1}')
  6. user_info=$(echo $line|awk '{print $2}')
  7. pass_info=$(echo $line|awk '{print $3}')
  8. port_info=$(echo $line|awk '{print $4}')
  9. sshpass -p$pass_info ssh-copy-id -i ~/.ssh/id_dsa.pub $user_info@$ip_info -o StrictHostKeyChecking=no -p$port_info &>/dev/null
  10. if [ $? -eq 0 ]
  11. then
  12. echo "host $ip_info distribute_pub_key ok."
  13. else
  14. echo "host $ip_info distribute_pub_key failed."
  15. fi
  16. done < /server/scripts/host_info.txt

cat /scripts/info.txt
172.16.1.7 oldboy oldboy123 52113
172.16.1.31 oldgirl oldgirl123 52114
172.16.1.41 olddog olddog123 52115

需求:2. 如何有三台主机 如何实现基于秘钥方式互相访问

如何有三台主机 如何实现基于秘钥方式互相访问
backup nfs web01
backup —-免密连接—-> nfs
管理端 被管理端
秘钥对 匹配公钥

  1. 第一个里程: 所有主机都需要创建秘钥对
  2. ssh-keygen -t dsa
  3. 第二个里程: 分发公钥信息 一个比较全公钥文件信息
  4. 本地主机给自己分发公钥
  5. ssh-copy-id -i ~/.ssh/id_dsa.pub root@172.16.1.7
  6. ssh-copy-id -i ~/.ssh/id_dsa.pub root@172.16.1.31
  7. ssh-copy-id -i ~/.ssh/id_dsa.pub root@172.16.1.41
  8. 第三个里程: 将整合公钥文件进行分发
  9. scp -rp ~/.ssh/authorized_keys 172.16.1.7:/root/.ssh/
  10. scp -rp ~/.ssh/authorized_keys 172.16.1.31:/root/.ssh/
  11. scp -rp ~/.ssh/authorized_keys 172.16.1.41:/root/.ssh/

ssh 安全问题:
https://blog.csdn.net/youmatterhsp/article/details/84110812

入侵防范说明:
1.所有连接尽量使用基于秘钥的方式连接。 windows中如何使用秘钥连接?
2.防火墙策略
尽量使用白名单的方式,
控制SSH外网建立,只能使用ssh 连接(可以监控一下自己的ssh 配置文件的 MD5sun ,上锁 chattr)

二,远程服务配置文件信息
Port 22 —- 修改默认服务端口号码 ListenAddress 0.0.0.0 —- 指定服务监听网卡地址信息 默认监听所有网卡地址 PS: 监听参数设置地址, 一定是本地网卡上配置的地址

netstat -lntup|grep sshd
tcp 0 0 10.0.0.7:22 0.0.0.0: LISTEN 18646/sshd HostKey xxxx —- 默认ssh连接时,使用秘钥文件信息 PermitRootLogin yes —- 是否允许root用户远程登录 AuthorizedKeysFile —- 识别分发后的公钥文件信息 PasswordAuthentication —- 是否允许支持密码方式进行认证登录 PermitEmptyPasswords —- 是否允许空密码登录主机 GSSAPIAuthentication —- GSSAPI认证登录方式 如果开启会影响SSH连接效率 UseDNS no —- 是否开启SSH服务反向解析过程 提高SSH连接效率
*三,入侵防范方法说明

  1. 所有服务端主机不要使用密码登录 都使用基于秘钥方式
  2. 配置防火墙策略时, 尽量采用白名单方式配置 控制SSH外网建立 只能SSH连接 对主机SSH服务进行监听设置
  3. 重要服务器不要配置外网地址
  4. 架构中服务器最小化环境安装配置
  5. 系统重要文件进行指纹保存验证
  6. 给系统重要文件进行上锁 chattr
  7. 远程服务操作命令信息 ssh-keygen —- ssh服务创建秘钥对命令 -t -N 给秘钥文件设置密码 -f 指定文件保存路径 ssh-keygen -t dsa -N “” -f /root/.ssh/id_dsa —- 免交互创建秘钥对 /usr/bin/scp —- 远程传输数据 -rp /usr/bin/sftp —- 远程文件传输 ftp网络协议 get put /usr/bin/slogin —- 和ssh命令类似实现远程功能 /usr/bin/ssh —- 和ssh命令类似实现远程功能 /usr/bin/ssh-add —- ??? /usr/bin/ssh-agent —- ??? /usr/bin/ssh-copy-id —- 实现分发公钥信息 /usr/bin/ssh-keyscan —- ??? /usr/sbin/sshd —- 启动SSH服务程序