1.SSH概述

💖1.1 什么是SSH?

    Secure Shell 的缩写 SSH 是专为远程登录会话和其他网络服务提供安全性的协议。     利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

💖1.2 SSH主要的功能是?

 主要用于客户端与远程主机的安全链接和交互。

💖1.3 SSH与Telnet之间有什么关系?

   ssh默认使用端口22 ssh默认支持root直接连接。    Telnet默认使用端口23 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。 telnet不支持root直接连接,——》shark——>follow抓包会显示普通用户密码

1.4 抓包分析SSH与Telnet的区别?

telnet 使用在 交换机 路由器 防火墙 等这类设备上    ssh 使用在 服务器领域 ( 无论你是什么Linux的发行版本 统统都是使用ssh远程服务 )     telnet可以 使用在Linux上,用户也可以通过telnet去连接服务器?但是有问题?     1.telnet明文,,必须使用普通用户。 23/tcp     2.ssh密文,ssh默认支持root直接连接。 22/tcp

1.5 SSH相关客户端指令**sshscpsftp**?

   C/S (客户端,服务端)    Client / Server —> QQ 电脑客户端 —> QQ 服务端

一 ssh:用来连接远程Linux服务器 ( Xshell底层,调用的就是ssh命令 ) $ ssh root@10.0.0.7 通过ssh命令 连接 10.0.0.7这台Linux服务器 使用的是 root的系统用户

二 scp:远程拷贝,全量拷贝(每次都全量) push 推: scp -rp /etc root@172.16.1.31:/opt pull 拉: scp root@172.16.1.31:/opt/xx /tmp 参数: 递归: -r 保持属性:-p 限速:-l (8bit=1Byte ( 临时拷贝一个大文件,需要使用 ))

三 sftp:远程传输 —> ( XFTP工具,开发使用最多 )
rz不支持传输文件夹、同时不支持传输大于4个G的文件 Xshell 统统可以搞定,支持断点续传

1.6 SSH远程登录方式、用户密码、秘钥方式?

  就好比手机:     密码解锁 ( 输入用户名 输入密码 )     指纹解锁 ( 秘钥方式 )

  • 用户密码: 简单容易被破解、复杂记不住
    xudeMacBook-Pro:~ xuliangwei$ ssh root@10.0.0.7
    root@10.0.0.7‘s password: #输入密码
  • 基于密钥的方式来实现:
    生成一对拥有数学关系的秘钥对。 ( 公钥(🔐)——————私钥(🔑) )
    公钥加密———————-私钥解密。
    公钥可以对外提供, 对外开放。
    私钥只有自己持有,不对外开放

2.通过秘钥登录示例

实现 10.0.0.61 免密码登录 10.0.0.7讲解

10.0.0.61 生成一对 密钥对 公钥和私钥 10.0.0.7 将公钥 放一份到 10.0.0.7 服务器上 10.0.0.61 去连接 10.0.0.7 10.0.0.7 会返回 公钥询问(这个公钥是之前61 推送给7 的) 10.0.0.61 私钥解密经10.0.0.7公钥加密的信息

image.png

实现 10.0.0.61 免密码登录 10.0.0.7操作

  1. [root@manager ~]# ssh-keygen -C 457801170@qq.com(回车回车回车) # -C 可以分清公钥是谁的
  2. [root@manager ~]# ll ~/.ssh/
  3. -rw------- 1 root root 1675 4 20 11:03 id_rsa 私钥(🔑)
  4. -rw-r--r-- 1 root root 398 4 20 11:03 id_rsa.pub 公钥(🔐)
  5. [root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.7
  6. ssh-copy-id 拷贝公钥 -i 指定公钥的位置
  7. 拷贝到 10.0.0.7 这台服务器的 root用户下~./.ssh/目录权限700 秘钥权限600 公钥(🔐)
  8. [root@manager ~]# ssh root@10.0.0.7
  9. [root@web01 ~]#

非对称加密图解:
37. SSH协议 - 图2

3. SSH场景实践,借助SSH免秘实现跳板机功能

image.png

一,个人电脑生成秘钥对,推送到跳板机服务器
windows:
xshell在窗口创建windows客户端秘钥对--->>>并复制公钥到 10.0.0.61  ~/.ssh/authorized_keys    
 cd ~/.ssh/
 ll -d ~/.ssh/                                       #权限显示700
 vim  ~/.ssh/authorized_keys            #把windows创建的公钥粘贴到机器里
 ll  authorized_keys
 chmod 600 authorized_keys

mac:
终端同Linux创建秘钥对相同


二,跳板机服务器生成秘钥对后,推送至个各内部服务器
最后manager:
 ssh-copy-id -i ~/.ssh/id_rsa.pub     root@10.0.0.41
 ssh-copy-id -i ~/.ssh/id_rsa.pub     root@10.0.0.31
 ssh-copy-id -i ~/.ssh/id_rsa.pub     root@10.0.0.7

PS 如果需要手动存储公钥到服务端,注意权限问题: dr-xr-x—-. 3 root root 195 Oct 20 19:55 /root/ drwx——— 2 root root 48 Oct 21 18:50 /root/.ssh/ -rw———- 1 root root 396 Oct 21 18:50 /root/.ssh/authorized_keys

3.1 sshpass免交互推送公钥(扩展)

sshpass:用于非交互的ssh 密码验证
使用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取

1、从命令行方式传递密码
sshpass -p user_password ssh user_name@192.168.1.2  【登录远程机器】
sshpass -p user_password scp -P22 root@192.168.1.2:/home/test  ./ 【远程机器/home/test 复制到本机当前目录】
还可以加参数 -q 【去掉进度显示】

2、从文件读取密码
echo "user_password" > user.passwd
sshpass -f user.passwd ssh user_name@192.168.1.2

3、从环境变量获取密码
export SSHPASS="user_password"
sshpass -e ssh user_name@192.168.1.2 

4、sshpass -p user_password ssh  -o StrictHostKeyChecking=no  user_name@192.168.1.2 
【-o StrictHostKeyChecking=no 表示远程连接时不提示是否输入yes/no】

5、使用sshpass远程免密,在远程主机上执行shell命令,如下远程执行命令:touch /opt/file.txt
sshpass -p user_password ssh  -o StrictHostKeyChecking=no  user_name@192.168.1.2  touch /opt/file.txt
[注:shell命令要和sshpass命令写在一行]

3.2 Manager服务器如何批量分发公钥信息:

**cat /server/scripts/push_public.sh **

#!/bin/bash
for ip in 5 6 7 8 9 31 41 51 52 61 62 63 71 
do 
timeout 2s sshpass -p123456  ssh-copy-id  -i ~/.ssh/id_rsa.pub root@172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null  

if [ $? -eq 0 ]
      then
         echo "host 172.16.1.$ip distribute_pub_key  ok."
      else
         echo "host 172.16.1.$ip distribute_pub_key  failed."
      fi      
done

chmod +x ``**/server/scripts/push_public.sh **
sh ``/server/scripts/push_public.sh

4.堡垒机简单体验:


4.1 teleport软件搭建堡垒机

这个的底层还是跟我们讲的ssh免密是一个思路. 安装请跳转——-> 链接

4.2 简单搭建 jumpser堡垒机

  • 主机要求: 1. 关闭selinux 2. 要求堡垒机防火墙打开
  • 配置要求: 2核4G

1.下载和配置
cat /server/scripts/install_jumpser.sh

#!bin/bash
cd /opt  && \
rpm -qa wget    if [ $? -ne 0 ];then                                                                           
 yum  install wget  -y  
fi
ls /opt/setuptools/  

 yum  install  git  -y
if [ $? -ne 0 ];then
 git clone --depth=1 https://github.com/jumpserver/setuptools.git
fi

cd setuptools  && \
ls /opt/setuptools/config.conf  
if [ $? -ne 0 ];then
   cp config_example.conf config.conf 
fi

2.安装:
/opt/setuptools/jmsctl.sh install
3.启动:
/opt/setuptools/jmsctl.sh start


4.登录web页面:**

Web 登陆信息: http://10.0.0.61:80 (访问你的服务器Ip和80端口) SSH 登录信息: ssh admin@10.0.0.61 -p2222

web界面初始用户名密码: admin admin
[如果你是云服务器请在安全组放行 80 和 2222 端口]

*5.SSH远程连接功能安全优化?

SSH连接问题

ssh连接时,要等待30s-1分钟  才提示输入密码?      可以对IP做了反向解析
ssh作为对外连接的一个服务,会不会被破解。        ( 不是很安全 )

所以ssh的安全、我们只需要保证对外的那一台就足够了? 因为其他的节点都是内部使用,无需对外。
密码一定要三个月一换                            (    常识   )


优化思路

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录先登录普通用户-》su-切换sudo提权3.密码认证方式改为密钥认证
4.重要服务不使用公网lP地址(所有主机都有公网)
5.使用防火墙限制来源P地址

SSH服务登录防护需进行如下配置调整,先对如下参数进行了解

Port 6666                     #变更SSH服务远程连接端口【偶尔】
PermitRootLogin         no    #禁止root用户直接远程登录【不用】
Passwor dAuthentication no    #禁止使用密码直接远程登录【常见】
useDNS  no                    #禁止ssh进行dns反向解析,影响ssh连接

效率参数
5 GSSAPIAuthentication no#禁止GSS认证,减少连接时产生的延迟

将如下具体配置添加至/etc/ssh/sshd_config文件中,参数按需求调整

###SSH###
#Port 6666
#PasswordAuthentication no
#PermitRootLogin        no
GSSAPIAuthentication    no
unseDNs                 no
###END###