SSH远程管理服务

SSH服务介绍说明
    SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network Working Group)制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
 
SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。在默认状态下,SSH服务主要提供两个服务功能:
  • 一是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务;
  • 另一个是类似FTP服务的sftp-server, 借助SSH协议来传输数据的,提供更安全的SFTP服务(vsftp,proftp)。
 
SSH连接工作原理
私钥:钥匙
公钥:锁头
第一个步骤:客户端                    执行远程连接命令
第二个步骤:客户端    服务端      建立三次握手
第三个步骤:服务端                    让客户端进行确认是否接收服务端公钥信息
第四个步骤:客户端                    进行公钥确认,接收到公钥信息
第五个步骤:服务端                    让客户确认登录用户密码信息
第六个步骤:客户端                    进行密码信息确认
第七个步骤:客户端    服务端      远程连接建立成功

 

SSH远程连接方式
    a 基于口令的方式进行远程连接    连接比较麻烦    连接不太安全
    b 基于密钥的方式进行远程连接    连接方便        连接比较安全
    
基于密钥方式连接过程(原理)
    1. 客户端(管理端)        执行命令创建密钥对
    2. 客户端(管理端)        建立远程连接(口令),发送公钥信息
    3. 客户端(管理端)        再次建立远程连接
    4. 服务端(被管理端)    发送公钥质询信息(你钥匙能打开我的锁着吗)
    5. 客户端(管理端)        处理公钥质询信息(钥匙将锁头打开),将质询结果返回给服务端
    6. 服务端(被管理端)    接收到质询结果,建立好远程连接
 
SSH基于密钥方式连接部署
第一个步骤:管理端创建密钥对信息
[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.   --- 你的身份认证已经保存到/root/.ssh/id_dsa
Your public key has been saved in /root/.ssh/id_dsa.pub.   --- 你的公钥已经保存在/root/.ssh/id_dsa.pub 
The key fingerprint is:    关键指纹是:
SHA256:Z1AgXSeXBDP+ecDCT9csPFRSoU0Qlh4Pjj3L/95gTC4 root@m01
The key's randomart image is:
+---[DSA 1024]----+
|      ...oBo+=*=+|
|       ..+ Bo*++ |
|        . + O.O.o|
|         . * O + |
|        S o = =  |
|         o   B   |
|            E *  |
|             o o.|
|               .=|
+----[SHA256]-----+
 
第二个步骤:管理端对公钥进行分发
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41
/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.41 (172.16.1.41)' can't be established.
ECDSA key fingerprint is SHA256:PfFz3a/VH7YgL/iKkse/2iSps5jJuV6Q1tdNI+B0WCU.
ECDSA key fingerprint is MD5:3b:54:44:bf:fb:ec:c8:09:dd:02:fa:a8:84:cc:fe:18.
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.41's password:
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh 'root@172.16.1.41'"
and check to make sure that only the key(s) you wanted were added.
 
第三个步骤:进行远程连接进行测试
[root@m01 ~]# ssh 10.0.0.41
Last login: Tue Mar 31 00:06:11 2020 from 10.0.0.61    不需要输入密码即可登录,公钥分发成功
 
编写脚本对公钥进行批量分发
批量分发要遇到的问题:有交互过程
1)需要有确认yes或no
2)需要输入密码信息
3)服务端端口号变化了,如何进行分发
 
如何不用输入yes或no
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"
 
如何进行免密进行公钥分发
第一个步骤:下载安装sshpass软件
[root@m01 ~]# yum -y install sshpass
[root@m01 ~]# rpm -qa | grep sshpass
sshpass-1.06-2.el7.x86_64
 
第二个步骤:执行免交互方式分发公钥
[root@m01 ~]# sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41
 
如何解决服务端端口号发生过变化进行批量分发公钥
[root@m01 ~]# sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 -p 52113 "-o StrictHostKeyChecking=no"
 
编写批量分发脚本
[root@m01 ~]# vim /server/scripts/ip.txt
172.16.1.7
172.16.1.31
172.16.1.41
[root@m01 ~]# vim /server/scripts/fenfa_pub_key.sh
#!/bin/bash
#################################
#        公钥批量分发脚本        #
#################################
 
for ip in `cat /server/scripts/ip.txt`    #for ip in {7,31,41}
do
  echo "================= =host $ip pub-key start fenfa=================="
  sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@$ip "-o StrictHostKeyChecking=no" &>/dev/null
  echo "host $ip fenfa success."
  echo "================= =host $ip pub-key fenfa end=================="
  echo ""
done
 
批量分发检查脚本(批量管理脚本)
[root@m01 ~]# vim /server/scripts/check_pub_key.sh
#!/bin/bash
###################################
#  分发检测脚本(批量管理脚本)      #
###################################
 
CMD=$1    #传参,在执行脚本时,只要在执行脚本时跟上相应的参数,就会执行相应的命令
for ip in `cat /server/scripts/ip.txt`
do
  echo "================== host $ip check =================="
  ssh $ip $CMD
  echo ""
done
 
验证批量分发
[root@m01 ~]# /server/scripts/check_pub_key.sh hostname
================== host 172.16.1.7 check==================
web01
 
================== host 172.16.1.31 check==================
nfs01
 
================== host 172.16.1.41 check==================
backup
 
SSH服务配置文件(/etc/ssh/sshd_config)
[root@m01 ~]# vim /etc/ssh/sshd_config
 
Port 22                        #修改服务端口号
ListenAddress 0.0.0.0          #监听地址,指定一块网卡能够接受远程访问请求,指定监听地址只能是本地网卡上的地址
PermitEmptyPasswords no        #是否允许远程用户使用空密码登录,默认不允许
PermitRootLogin yes            #是否禁止root用户远程连接主机,建议改为no
GSSAPIAuthentication yes       #是否开户GSSAPI认证功能,不用的时候关闭
UseDNS yes                     #是否开启反向DNS解析功能,建议进行关闭,设置为no
 
SSH远程服务防范入侵
1. 用密钥登录,不用密码登陆
2. 牤牛阵法:解决SSH安全问题
    a. 防火墙封闭SSH,指定源IP限制(局域网、信任公网)
    b. 开户SSH只监听本地内网IP(ListenAddress 172.16.1.61)
3. 尽量不给服务器外网IP
4. 最小化(软件安装-授权)
5. 给系统的重要文件或命令做一个指纹
    /etc/passwd md5sum         监控
    inotify /bin            监控
6. 给他锁上 chattr +i        查看lsattr -a
 
posted @ 2020-03-31 17:08  向云而生(陈云)  阅读(212)  评论(0编辑  收藏  举报