综合架构远程连接

远程连接服务概念介绍

image.png

SSH来源于

[root@web01 ~]# rpm -qf `which ssh`
openssh-clients-7.4p1-16.el7.x86_64

SSH连接原理

首次连接建立

原理总结:
01. 客户端 - 服务端 请求建立ssh远程连接
02. 服务端 - 客户端 请求确认公钥信息
03. 客户端 - 服务端 确认接收公钥信息,保存到~/.ssh/know_hosts文件中
04. 服务端 - 客户端 询问用户密码信息
05. 客户端 - 服务端 用户密码信息
06. 服务端 - 客户端 确认密码信息正确 远程连接建立
01 之后:不用反复确认公钥信息
06 之后:所有传输的数据信息会进行加密处理
作用1:利用公钥和私钥对数据信息进行加密处理
作用2:对用户身份信息进行认证

远程连接通讯建立方式

基于口令方式(基于密码方式) 可以记入文档/脑子 ,如果是国家服务器 那就是不安全的 (钱、色)

基于密钥方式实现远程连接步骤

当nfs01已经有了公钥的时候的原理

基于密钥链接方式实现远程连接步骤

定义两钟类型的服务器

管理端服务器
第一个里程碑:创建密钥对

[root@m01 ~]# ssh-keygen -t dsa      生成公钥和私钥
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
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:
SHA256:Y+Tcjwsx+uSPtWpHkb0p/O8jYgK9c3LJ5iBqlP97cRQ root@m01
The key's randomart image is:
+---[DSA 1024]----+
|                 |
|            E    |
|        .  o .   |
|       + .o o    |
|     . .S..o o   |
|    o .o.+=o+    |
|   . .o.++o*.    |
|    ...=*=@oo .  |
|   ..  oB/=. +o. |
+----[SHA256]-----+
[root@m01 ~]# ll ~/.ssh/id*
    -rw------- 1 root root 668 Jun 19 00:00 /root/.ssh/id_dsa
    -rw-r--r-- 1 root root 600 Jun 19 00:00 /root/.ssh/id_dsa.pub

第二个里程碑:分发公钥

    [root@web01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"
    The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
    ECDSA key fingerprint is SHA256:E/rcVrdk84L/HagYfRXIz1QC1pERVXeaQiu8dfyF0qY.
    ECDSA key fingerprint is MD5:3c:a2:1e:8f:33:48:56:1d:14:aa:5c:6e:31:a9:de:8c.
    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: Thu Jun 20 00:27:19 2019 from 10.0.0.1
[root@nfs01 ~]# exit 
logout
Connection to 172.16.1.31 closed.

被管理端服务器
第一个里程碑:检查确认

管理端检查确认
[root@m01 ~/.ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNk3DiP0SY50uDjqLtNz9cL9+BgU/wAvEbbtdSZ3SiUKBtiZMfQ8J+PL5Q5zslwSKAg2+Fv8bMpYr+a9ZJVXzMrwiEDVuoCeQOM9dkevAPzecx59ZsfaFZpIVZ786Yfmo8i36PzIvVzA+DXO7HkMxukFRvTQGJqg0WilSXlimLqHqHVq49DP48JrBnS2yyUZEoS52cG85UxU7gfXu3IaYqaX8i+mVpTIyLWN7YbZOl0+w4qvecP6do8TSobasyrhs8e8hL0MEHtDU6Ghp9ND9TgJng7f2e5IpX+PUvXgqAe5DTHxWTIuxMyROJ2f+a/GzxxaRhyb/Omvr9NNizGxZP root@m01
=============================================
被管理端检查
[root@web01 ~/.ssh]# cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNk3DiP0SY50uDjqLtNz9cL9+BgU/wAvEbbtdSZ3SiUKBtiZMfQ8J+PL5Q5zslwSKAg2+Fv8bMpYr+a9ZJVXzMrwiEDVuoCeQOM9dkevAPzecx59ZsfaFZpIVZ786Yfmo8i36PzIvVzA+DXO7HkMxukFRvTQGJqg0WilSXlimLqHqHVq49DP48JrBnS2yyUZEoS52cG85UxU7gfXu3IaYqaX8i+mVpTIyLWN7YbZOl0+w4qvecP6do8TSobasyrhs8e8hL0MEHtDU6Ghp9ND9TgJng7f2e5IpX+PUvXgqAe5DTHxWTIuxMyROJ2f+a/GzxxaRhyb/Omvr9NNizGxZP root@m01

想知道172.16.1.7的名字

[root@web01 ~]# ssh 172.16.1.7 hostname   不需要密码认证
web01

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

解决免交互问题:

  1. 第一次连接有yes/no
    ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7 -o StrictHostKeyChecking=no
  1. 需要有密码信息确认
yum install -y sshpass
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7 -o StrictHostKeyChecking=no

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

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

if判断比较信息:
= -eq equal
> -gt greater than
< -lt less than
>= -ge greater equal
<= -le less equal
<> -ne no equal

分发脚本

分发脚本:

[root@m01 /server/scripts]#vim /server/scripts/fenfa_key.sh
#!/bin/bash
for ip in {7,31,41}
do
  echo "===============start fenfa_Key to 172.16.1.$ip========================="
  sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
  if [ $? -eq 0 ]
  then
     echo "===============pub_key fenfa ok with 172.16.1.$ip========================="
     echo ""
  else
     echo "===============pub_key fenfa failed with 172.16.1.$ip========================="
     echo ""
  fi 
done

检查脚本上面的分发脚本是否分发成功

[root@m01 /server/scripts]# vim fenfa_check.sh 
#!/bin/bash
if [ $# -ne 1 ]
then
  echo "Usage: $0 请在脚本后面输入一个命令信息"
  exit 100
fi
for ip in {7,31,41}
do
  echo "===============start fenfa_Key to 172.16.1.$ip========================="
  ssh 172.16.1.$ip $1
done

分发公钥问题说明:
01. 密码信息不正确
02. 免密码分发公钥 yum install -y sshpass
03. 分发公钥信息,需要分发你有的公钥 是否有公钥 m01--/root/.ssh/id_xsa.pub

排错方法:
01. 测试脚本 ssh 172.16.1.7 hostname
02. 脚本中命令手动执行
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no

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

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

SSH服务端配置文件说明

[root@m01 ~]# vim /etc/ssh/sshd_config 
#Port 22                 --- 指定服务端口号信息
#ListenAddress 0.0.0.0   --- 指定相应网卡可以接收远程访问请求  web
                                 默认:主机上所有网卡都可以接收远程连接请求
                                 监听地址信息,一定是本地网卡上有的地址信息 ******
#PermitEmptyPasswords no --- 是否允许空密码登录
#PermitRootLogin yes     --- 不允许root用户登录
115行 #UseDNS yes              --- 是否进行DNS反向解析 no  172.16.1.31 --> 172.16.1.61 
 79行 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 锁住文件

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容