第四个服务–SSHD服务

暂时无法播放,可回源网站播放

第二个部分-集群批量管理与维护

1.基础:

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 ☆☆☆☆☆

功能:

  1. 远程连接,切换到目标机器.
  2. 远程连接并执行命令或脚本,回到原本机器.(注意不要执行交互式命令)

案例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) 书写一键脚本

  1. 检查密钥文件是否存在,如果不存在则创建 ~/.ssh/id_rsa
  2. ip列表(变量,文件,数组)分发公钥
  3. for+分发命令
  4. 检查成功,失败
  5. for+批量执行命令
  6. 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进行初步批量管理

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部