sshd服务---一键部署密钥连接脚本
手机端可直接播放下方视频,PC端请点击播放按钮或点此处查看原视频
第二个部分-集群批量管理与维护
目录
Toggle1.基础:
SSHD服务配置文件☆ ☆ ☆ ☆ ☆
ssh客户端命令:ssh,scp,sftp
ssh密钥认证(免密码登录,双机互信)☆ ☆ ☆ ☆ ☆
Ansible批量分发,批量管理,批量维护与部署
对于已经掌握使用流程的服务,进行批量管理
2.0 目标
修改sshd服务端配置文件修改ssh端口号,修改ssh禁用root远程登录.
使用ssh命令远程连接,使用scp传输数据.
配置主机的秘钥认证(写成脚本)
Ansible进行初步批量管理
2.1 openssh服务
实现加密的远程连接/传输数据.
openssh-server 服务端(sshd,/etc/ssh/sshd_config)
openssh-clients客户端命令 scp,ssh
2.2 telnet 服务端vs openssh 服务端
telnet服务:更新ssh服务时使用(明文传输密码,抓包过滤tcp.port==23可以看到密码信息)
#1.安装服务
yum install -y telnet-server
#2.启动
systemctl disable telnet.socket
systemctl start telnet.socket
#3.本地shell中连接
telnet 10.0.0.61 23
麒麟系统中telnet-server属于telnet软件包
2.4 Openssh-server配置文件
核心配置文件: /etc/ssh/sshd_config
/etc/ssh/ssh_config
客户端配置文件
/etc/ssh/sshd_config
服务端配置文件
未来为了安全,禁止root用户远程登陆
分析日志/var/log/secure查看是否被攻击:
cat /var/log/secure | grep -i 'failed password' | awk '{print $(NF-3)}' | sort | uniq -c | sort -rnk1
上方前两个选项不关闭会自动做反向解析(利用DNS PTR 记录用于反向 DNS 查找:ip→域名),影响连接速度
Linux系统ssh远程连接优化配置
##1. 注释掉sshd服务端已有的配置
sed -ri.bak '/^(UseDNS|GSSAPIAuth|Port|PermitRoot)/s@^@#@g' /etc/ssh/sshd_config
##2. 重新配置连接优化,端口,是否准许root的远程登录.
cat >>/etc/ssh/sshd_config<<EOF
UseDNS no
GSSAPIAuthentication no
Port 22
PermitRootLogin yes
EOF
2.5 Openssh-Clients客户端命令
scp 远程传输文件
ssh 远程连接
sftp 远程传输文件(一般开发通过图形化界面使用ftp工具)
1) scp ☆☆☆☆☆
#scp使用方式
scp 文件/目录 用户名@ip:路径
-r 递归传输,传输目录
-p 保持属性信息不变
-rp 人品
-P(大写) Port 指定端口号
scp -rp -P 22 /etc/hostname root@10.0.0.41:/tmp/
2) ssh ☆☆☆☆☆
功能:
- 远程连接,切换到目标机器.
- 远程连接并执行命令或脚本,回到原本机器.(注意不要执行交互式命令)
案例01: 使用oldboy用户远程连接到10.0.0.41的22端口
ssh -p 22 oldboy@10.0.0.41
案例02: 使用oldboy用户远程连接到10.0.0.41的22端口并执行whoami命令或ip a 命令
ssh -p 22 oldboy@10.0.0.41 whoami
案例03: 远程连接10.0.0.31节点并执行多条命令:whoami , pwd, hostname命令
ssh -p22 nfs01 "whoami Վ阪 pwd Վ阪 hostname -I "
ssh -p22 nfs01 "whoami ; pwd ; hostname -I "
&& 并且,命令行中表示前一个命令执行成功再执行后面的命令.
; 分号,分隔命令.相当于是1行的结束.
3) sftp
ftp 文件传输协议
sftp linux中ftp客户端和lrzsz类似.
lrzsz传输大文件较慢. 推荐使用scp即可.
ftp工具开发人员使用.操作linux的目录和文件.
ftp文件传输协议,服务和客户端,服务端端口是21和20.
openssh (sshd)也提供了,ftp功能,sftp,端口是22.
ftp客户端:常用sftp命令,软件xftp,winscp……….
如果上传大文件建议使用ftp或scp
2.6 Openssh小结
openssh 服务 vs telnet 服务区别
openssh服务端: /etc/ssh/sshd_config端口,禁用root远程登录.
openssh 客户端: scp(-rp -P端口) ssh(-p端口)
2.7 密钥认证 ☆☆☆☆☆
1) 概述
Linux中我们要连接主机,输入用户密码然后连接.
我们发现每次连接都要输入密码,对于一些批量操作不方便.
我们需要有一种新的认证方法,每次连接不需要输入密码.
这个方法叫: 密钥认证(免密码登录,双机互信.)
2) 原理(流程)
3) 手动创建与分发密钥(单方面的) ☆☆☆☆☆
目的:管理机m01连接所有机器,在管理机上创建密钥对
①创建秘钥对
②发送公钥给对应的节点.
#1.创建密钥对(钥匙)
ssh-keygen
#然后3个回车即可.第二个回车显示passphrase设置密码
存储在/root/.ssh/id_rsa
#2.分发公钥到对应的节点(锁头)
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31
#原理:把公钥传输到对应节点的~/.ssh/authorized_keys
#3.检验
ssh root@172.16.1.31 hostname
温馨提示:
不要修改.ssh目录权限,家目录权限.密钥文件的权限
正确ssh文件权限示意:
管理机:
被管理端:
4) 如何自动分发公钥
阻碍:
输入yes/no
输入密码
输入密码: yum安装 sshpass
自动输入密码的解决方案:
sshpass
:推荐简单易用.给ssh相关命令提供密码.
expect
(早期使用):较为复杂,一门语言,实现把交互转换为非交互,类似判断.
sshpass -p1 ssh-copy-id 172.16.1.41
-p指定ssh的密码
如果.41是第1次连接,则需要输入yes/no,这个就会导致sshpass+ssh-copy-id失败.👇
sshpass选项
-p指定密码
-f指定密码文件(密码放在文件中)
-e 从SSHPASS环境变量读取
export SSHPASS=xxxx
解决yes/no的问题
linux连接新的主机的时候,做了1个主机信息认证(校验),选择yes后信息就会被存放到~/.ssh/known_hosts文件中.
希望分发公钥的时候临时关闭
这个功能.
HostKeyChecking或StrictHostKeyChecking
彻底关闭yes/no提示. StrictHostkeychecking=no
仅仅在使用ssh-copy-id的时候关闭(临时),未来写入脚本
sshpass -p1 ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no 172.16.1.41
#-o选项本质是ssh命令的选项
5) 一键创建秘钥对 ☆☆☆☆☆
ssh-keygen -f /root/.ssh/id_rsa -P ' '
(指定了秘钥位置和密码防止交互)
-f 指定密钥文件位置和文件名
-P 指定密码短语 “” ” 表示设置为空.
6) 书写一键脚本
- 检查密钥文件是否存在,如果不存在则创建 ~/.ssh/id_rsa
- ip列表(变量,文件,数组)分发公钥
- for+分发命令
- 检查成功,失败
- for+批量执行命令
- for+ssh命令 hostname -I
cat /server/scripts/fenfa.sh
#!/bin/bash #author: lidao996 #desc: # 1.一键创建秘钥对(如果不存在) # 2.一键分发公钥 # 3.一键检查 #1. vars key=/root/.ssh/id_rsa ips="7 31 41" pass=1 #ips="`cat /server/files/ip.txt`" #2. 一键创建秘钥对 if [ ! -f $key ];then ssh-keygen -f $key -P '' &>/dev/null if [ $? -eq 0 ];then echo "秘钥对创建成功" else cho "密钥对创建失败" exit 1 fi fi #3. 一键分发公钥 echo "分发公钥-开始" for ip in $ips do sshpass -p$pass ssh-copy-id -o StrictHostKeyChecking=no 172.16.1.$ip #这里也可以通过$? + if判断公钥分发是否成功 done echo "分发公钥-完成" #4. 一键检查 echo "检查-开始" for ip in $ips do ssh -o StrictHostKeyChecking=no 172.16.1.$ip hostname -I #这里也可以通过$? + if执行是否成功 done echo "检查-结束"
运行效果:
7) 密钥认证小结
密钥认证完成后通过脚本实现基本的批量管理.
书写脚本+ssh/scp命令.
密钥认证后面很多服务所必须的底层环境: ansible.
2.8 SSHD小结
修改sshd服务端配置文件修改ssh端口号,修改ssh禁用root远程登录.
使用ssh命令远程连接,使用scp传输数据.
配置主机的秘钥认证(写成脚本)
Ansible进行初步批量管理