SSH服务

1 篇文章 0 订阅
本文详细介绍了SSH服务的概念、连接原理以及基于密钥的远程连接步骤,包括密钥对生成、公钥分发和免交互登录。还讨论了SSH服务端配置文件的设置,以及如何防范远程入侵,强调了批量分发公钥脚本的重要性。同时,文章提供了SSH服务端口更改、禁止空密码和root登录等安全措施。
摘要由CSDN通过智能技术生成

第一章 远程连接服务概念介绍

SSH: 系统默认配置 22 默认可以使用root用户进行登录 数据信息进行加密
TELNET:网络设备默认开启 23 默认只能使用普通用户进行登录 数据信息显示明文

第二章 远程连接服务连接原理

openssh 远程连接数据包进行加密处理
openssl 网站访问请求信息和响应信息进行加密(HTTPS)
连接示意图:
在这里插入图片描述
原理总结:

  1. 客户端 - 服务端 请求建立ssh远程连接
  2. 服务端 - 客户端 请求确认公钥信息
  3. 客户端 - 服务端 确认接收公钥信息,保存到~/.ssh/authorized_keys文件中
  4. 服务端 - 客户端 询问用户密码信息
  5. 客户端 - 服务端 用户密码信息
  6. 服务端 - 客户端 确认密码信息正确 远程连接建立
    01 之后:不用反复确认公钥信息
    06 之后:所有传输的数据信息会进行加密处理
    总结:

作用01:利用公钥和私钥对数据信息进行加密处理
作用02:对用户身份信息进行认证
第三章 远程连接通讯建立方式
基于口令方式(基于密码方式) 文档/脑子 国家服务器 远程 – 密码(钱)
基于密钥方式

第三章 基于密钥方式实现远程连接步骤:

1.管理端服务器

第一个历程:创建密钥对信息

[root@m01 ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory ‘/root/.ssh’.
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:
40:72:ff:19🇩🇪23:70:df:cf:f2:a2:6f:0d:ce:42:dc root@m01
The key’s randomart image is:
±-[ DSA 1024]----+
| . o |
| + . |
| . o o |
| . = = . |
| S =.+… |
| .o.Eo |
| . o.oo|
| . =o.|
| .=…|
±----------------+
[root@m01 ~]# ll .ssh/
总用量 8
-rw------- 1 root root 668 7月 19 15:13 id_dsa
-rw-r–r-- 1 root root 598 7月 19 15:13 id_dsa.pub
第二个历程:分发公钥

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@172.16.1.31
The authenticity of host ‘172.16.1.31 (172.16.1.31)’ can’t be established.
ECDSA key fingerprint is 7d:76:4f:bc:02:b3:3c:55:ff:22:9c:63:1a:88:17:3d.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys
root@172.16.1.31’s password:

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘root@172.16.1.31’”
and check to make sure that only the key(s) you wanted were added.
第三个历程:检查确认

[root@m01 ~]# ssh 172.16.1.31
Last login: Fri Jul 19 08:12:12 2019 from 10.0.1.1
[root@nfs01 ~]# hostname
nfs01
[root@nfs01 ~]# 登出
Connection to 172.16.1.31 closed.
[root@m01 ~]# ssh 172.16.1.31 hostname
nfs01
[root@m01 ~]#

2.被管理端服务器

第一个历程:检查确认

[root@nfs01 ~]# cd /root/.ssh/
[root@nfs01 ~/.ssh]# ll
总用量 8
-rw------- 1 root root 988 7月 19 15:15 authorized_keys
-rw-r–r-- 1 root root 170 6月 26 20:55 known_hosts
[root@nfs01 ~/.ssh]# cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAPFwzIpjQqTXGmTPgABweyY6sxewiNdPiPwBaSz5hAauYnskJSXKbFl5usAxgXbuLcBzGp1RvTH+tVtoUpokAbGbhVX9bhT/5LxjKA31kfp0hicZHtNUDCMOTtgwJmIHo/25BsMURx4i4Mfu8V7lRg5a3WXDXI2JXBLiWtgl/0yHAAAAFQDLicZIPhcZkfLbg26vSPm9cMK14wAAAIAVHBMsnB6TasY3yQzdqQpnVH5dOtD6bIjy48U6CEge7m9jxXb9HUMExOOqRNj/x7HiCeiiML7ebZmLYPZfjam5NWiJ1A5l9FL6QKFvnLSrUOk3b0seBLyWEhM8yWkK5yYaqV9e7jCTJoR/UZjKbZ1lRtLbczytn1e6c8wFVHguHQAAAIBqHcq7NbGPDbkeQEQmSahNubgZ/nXTMR7r2CHsNP+71qxDfkYdDo2dVoWSmhN5Lv+mHLSBFMuJPIvZg/zVc7So6vRgJWiIVedgnJw/Ima+q2f7VJudA+ZNT5vHmlaS77bJ/9tYBdlUO/Ae56gmuNzYYnTdY1UIf1EzEtJnKtUr4Q== root@m01

第五章 免交户分发密钥

被管理主机有多台,如何进行批量分发公钥???

1.解决免交互问题:

第一次连接有yes/no

ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 -o StrictHostKeyChecking=no
需要有密码信息确认

yum install -y sshpass
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 -o StrictHostKeyChecking=no

2.ssh-copy-id分发公钥原理:

01. 进行ssh远程连接
02. scp将公钥进行传输
03. 被管理端将公钥保存到用户家目录中的.ssh目录中
04. 修改公钥文件名称和权限  authorized_keys  600

3.分发脚本:

[root@m01 ~]# cat /server/scripts/fenfa.sh
#!/bin/bash
for ip in {31,41}
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
if [ ? − e q 0 ] t h e n e c h o " = = = = = = = = = = = = = = = p u b k e y f e n f a o k w i t h 172.16.1. ? -eq 0 ] then echo "===============pub_key fenfa ok with 172.16.1. ?eq0]thenecho"===============pubkeyfenfaokwith172.16.1.ip========================="
ssh 172.16.1. i p h o s t n a m e e c h o " " e l s e e c h o " = = = = = = = = = = = = = = = p u b k e y f e n f a f a i l e d w i t h 172.16.1. {ip} hostname echo "" else echo "===============pub_key fenfa failed with 172.16.1. iphostnameecho""elseecho"===============pubkeyfenfafailedwith172.16.1.ip========================="
echo “”
fi
done

4.if判断比较信息:

=    -eq   equal
>    -gt   greater than
<    -lt   less than
>=   -ge   greater equal
<=   -le   less equal
<>   -ne   no equal

5.分发公钥问题说明:

  1. 密码信息不正确
  2. 免密码分发公钥 yum install -y sshpass
  3. 分发公钥信息,需要分发你有的公钥 是否有公钥 m01–/root/.ssh/id_dsa.pub

6.排错方法:

  1. 测试脚本 ssh 172.16.1.7 hostname
  2. 脚本中命令手动执行
    sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no

7.远程服务端口号发生变化了,如何修改脚本命令

centos7:掌握

sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7 -o StrictHostKeyChecking=no -p 52113

8.ssh-copy id命令解释

ssh $1 "exec sh -c 'cd; umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1 || true)'"
  1. 远程连接到指定主机
  2. 切换到家目录,临时修改umask数值
  3. 判断是否存在.ssh目录,不存在创建.ssh
  4. 生成.ssh/authorized_keys,并且把公钥信息保存在此文件中

9.总结:掌握批量分发公钥脚本编写能力

  1. 解决免交互问题: yes/no 密码问题
  2. 远程被管理主机端口变化:解决端口问题

第六章 SSH服务端配置文件说明:

vim /etc/ssh/sshd_config
#Port 22 — 指定服务端口号信息
#ListenAddress 0.0.0.0 — 指定相应网卡可以接收远程访问请求 web
默认:主机上所有网卡都可以接收远程连接请求
监听地址信息,一定是本地网卡上有的地址信息 ******
#PermitEmptyPasswords no — 是否允许空密码登录
#PermitRootLogin yes — 不允许root用户登录
#UseDNS yes — 是否进行DNS反向解析 no 172.16.1.31 --> 172.16.1.61
GSSAPIAuthentication yes — 是否开启GSSAPI no

第七章 SSH防范远程入侵方案 亡羊补牢 – 未雨绸缪

https://blog.51cto.com/phenixikki/1546669
1. 用密钥登录,不用密码登陆
2. 防火墙封闭SSH,指定源IP限制(局域网、信任公网)  ???
3. 尽量不给服务器外网IP
4. 负载均衡主机,只监听内网地址的远程访问
5. 最小化(软件安装-授权)  web nfs rsync mysql zabbix ... 端口(门)
   yum install -y nmap  --- 扫描网站端口信息
   nmap -p 1-65535 www.baidu.com   80 443
6. 给系统的重要文件或命令做一个指纹   md5sum -c /etc/passwd  abcd  --- zabbix
7. chattr +i 锁住文件  

第八章 课程知识回顾说明:

1)远程连接的服务程序 (ssh-22(加密) telnet-23(明文))
2)远程连接的原理过程 了解
3)远程连接的方式
基于密码方式
基于密钥方式 重点
4)如何实现密钥远程登录
如何实现多台主机基于密钥远程登录 – 批量分发公钥的脚本
5)远程服务配置文件参数
listen address 监听参数 ******
6)远程入侵防范防范
作业:

如何利用xshell实现密钥登录系统
如何实现多台主机之间相互基于密钥通讯
在管理端m01 安装ansible软件
yum install -y ansible — epel源是否更新
移除旧的KEY

[root@m01 ~]# ssh-keygen -f /root/.ssh/known_hosts -R 172.16.1.31

Host 172.16.1.31 found: line 1 type ECDSA

/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
测试方法:

1.测试被发送端删除.ssh目录会怎么样
2.清空目标服务器.ssh/authorized_keys文件,再次连接会发生什么
3.手动复制公钥信息到其他主机,连接试试
4.复制私钥到其他的机器,试试能不能直接连接
5.把目标服务器.ssh/authorized_keys权限改成644,然后再测试连接
6.测试scp命令是否还需要输入密码
文件说明:
发送端:

id_dsa #私钥
id_dsa.pub #公钥
known_hosts #连接过的主机的指纹信息
被发送端:

authorized_keys #保存所有主机发送过来的公钥信息
免交户创建密钥对

ssh-keygen -q -f /root/.ssh/id_rsa -N ‘’

作业:

windows:
1.xshell生成密钥对
2.将xshell公钥上传到管理机

管理机:
1.更改ssh默认端口号 为9999
2.关闭用户名密码登录方式
3.开启通过密钥对方式连接

被管理机:
1.更改ssh默认端口号为9999
2.关闭用户名密码登录方式
3.开启通过密钥对方式连接
4.指定监听内网地址 172.16.1.x

实现效果:
1.管理机m01只能通过xshell的秘钥方式连接,IP地址用户名密码方式不允许
2.所有主机ssh端口修改为9999
3.被管理机只能通过m01的内网地址使用秘钥认证连接,10网段不允许连接.不允许使用账号密码方连接
作业:

超级作业:
一个脚本完成以下所有任务:
1.管理机自动创建密钥对
2.管理机自动将公钥发送到被管理机
3.修改被管理机的SSH连接端口为9999
4.修改被管理机的SSH监听地址为172.16.1.X
5.修改被管理机不允许使用账号密码方式登陆,只允许使用密钥方式连接
6.修改完之后验证是否生效,验证方法为使用9999端口连接被管理机并打印出主机信息

优秀同学脚本分享:

#!/bin/bash
if [ -f /root/.ssh/id_dsa ];then
echo “密钥已存在,将发送现有文件”
else
ssh-keygen -t dsa -P “” -f /root/.ssh/id_dsa && echo “密钥生成成功”
fi

for ip in {31,41}
do
sshpass -p123456 ssh-copy-id -p 22 172.16.1.${ip} -o StrictHostKeyChecking=no >> /dev/null 2>&1
if [ ? = = 0 ] ; t h e n e c h o " 172.16.1. ?==0 ];then echo "172.16.1. ?==0];thenecho"172.16.1.{ip} key sent successful"
ssh 172.16.1. i p " c p / e t c / s s h / s s h d c o n f i g / e t c / s s h / s s h d c o n f i g . b a k " s s h 172.16.1. {ip} "cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak" ssh 172.16.1. ip"cp/etc/ssh/sshdconfig/etc/ssh/sshdconfig.bak"ssh172.16.1.{ip} “sed -ri ‘s@#Port 22@Port 9999@g’ /etc/ssh/sshd_config && echo ‘port ok’”
ssh 172.16.1.KaTeX parse error: Expected 'EOF', got '#' at position 18: …p} "sed -ri 's@#̲ListenAddress 0…{ip}@g’ /etc/ssh/sshd_config && echo ‘listen ok’"
ssh 172.16.1.KaTeX parse error: Expected 'EOF', got '#' at position 17: …ip} "sed -ri 's#̲^PasswordAuthen…{ip} “systemctl restart sshd”
sleep 3
echo “------------------”
echo “172.16.1. i p h o s t n a m e i s : {ip} hostname is : iphostnameis:(ssh -p 9999 172.16.1. i p h o s t n a m e ) " e c h o " − − − − − − − − − − − − − − − − − − " e l s e e c h o " 172.16.1. {ip} hostname)" echo "------------------" else echo "172.16.1. iphostname)"echo""elseecho"172.16.1.{ip} key sent faild”
fi
done

优秀同学脚本分享2:

#!/bin/bash

if [ -f /root/.ssh/id_rsa ];then
echo “----------密钥对已经存在---------------”
else
echo “----------正在生成密钥对---------------”
ssh-keygen -f /root/.ssh/id_rsa -N ‘’ > /dev/null 2>&1
fi

for i in {7,31,41}
do
echo “正在操作:172.16.1. i " e c h o " − − − − − − − − − − 正 在 分 发 − − − − − − − − " s s h p a s s − p 123456 s s h − c o p y − i d − i / r o o t / . s s h / i d r s a . p u b 172.16.1. {i}" echo "----------正在分发--------" sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1. i"echo""sshpassp123456sshcopyidi/root/.ssh/idrsa.pub172.16.1.{i} -o StrictHostKeyChecking=no > /tmp/ssh.log 2>&1
echo “----------正在备份SSH配置-----”
ssh 172.16.1.KaTeX parse error: Undefined control sequence: \cp at position 6: {i} "\̲c̲p̲ ̲/etc/ssh/sshd_c…{i} “sed -i ‘s@#Port 22@Port 9999@g’ /etc/ssh/sshd_config”
ssh 172.16.1.KaTeX parse error: Expected 'EOF', got '#' at position 16: {i} "sed -i 's@#̲ListenAddress 0…{i}@g’ /etc/ssh/sshd_config”
ssh 172.16.1. i " s e d − i ′ s @ P a s s w o r d A u t h e n t i c a t i o n y e s @ P a s s w o r d A u t h e n t i c a t i o n n o @ g ′ / e t c / s s h / s s h d c o n f i g " s s h 172.16.1. {i} "sed -i 's@^PasswordAuthentication yes@PasswordAuthentication no@g' /etc/ssh/sshd_config" ssh 172.16.1. i"sedis@PasswordAuthenticationyes@PasswordAuthenticationno@g/etc/ssh/sshdconfig"ssh172.16.1.{i} “systemctl restart sshd”
sleep 2
echo “----------测试优化后的连接”
ssh 172.16.1.${i} -p 9999 hostname
done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值