远程管理服务(SSH).

一,远程服务概念说明

1
2
3
4
ssh可以基于密码进行认证,也可以基于密钥去认证用户,基于密钥认证时可以实现免密码登录的效果
利用SSH telnet服务实现远程连接
SSH :加密传输数据方式(安全性更高,复杂性更高) 经过互联网连接 访问端口:22 默认支持root用户远程连接
telnet  :明文传输数据方式(安全性更低,复杂性更低) 经过局域网连接 访问端口:23 默认禁止root用户远程连接  

二,远程服务连接原理

 2.1 ssh连接示意图

 

 

 2.2 ssh连接流程

复制代码

客户端:发送建立连接通讯请求
服务端:回复密钥信息确认
客户端:进行密钥信息确认
服务端:将公钥信息进行发送传递
客户端:接收公钥进行保存, 并发送确认信息 (~/.ssh/known_hosts)
服务端: 发送密码验证信息 (加密处理)
服务端:输入密码信息 (加密处理)
数据连接建立完毕
传输数据(加密处理)

复制代码

三,远程连接连接

 3.1 基于密码方式远程连接

复制代码
步骤:
①:ssh+IP地址
②:输入用户名(主机名称)
③:输入密码(相应主机名称的密码)

例如:
①:ssh 10.0.0.8
②:root
③:abc123
复制代码

 3.2 基于密钥方式远程连接

可以实现免密登录的效果

  3.2.1 简单配置:

管理端服务器(m01-192.168.81.161):

复制代码
第一步:创建密钥对
[root@m01 ~]# ssh-keygen -t dsa      生成公钥和私钥
保存地址默认,私钥密码选空
[root@m01 ~]# ll ~/.ssh/id*
第二步:管理端分发公钥(在这里需要交互)
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.81.163
第三步:进行远程连接测试(不用输入密码信息可以直接连接)
[root@m01 ~]# ssh root@192.168.81.163 hostname
复制代码

在这时,存在两个问题,1,如何实现批量管理多台主机 2,如何编写脚本进行批量分发公钥?

编写脚本最简单的方法:堆命令

#!/bin/bash
for ip in 163 164
do
    ssh-copy-id -i  /root/.ssh/id_dsa.pub root@192.168.81.$ip
done

但是还是存在问题:

1,需要确认yes/no

2,需要输入密码信息

3,服务端口号变化了,如何分发公钥?

  3.2.2 实现免交互输入密码信息分发公钥

第一步:下载安装软件sshpass
yum install -y sshpass
第二步: 执行免交互方式分发公钥命令
sshpass -p远程主机密码 ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.81.163

服务端口号发生变化,如何进行批量分发公钥:
sshpass -p远程主机密码 ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.81.163 -p 52113 "-o StrictHostKeyChecking=no"

  3.2.3 批量分发公钥脚本:

1,准备配合实现脚本的主机地址文件:

cat /server/scripts/ip_list.txt
192.168.81.163
192.168.81.164
192.168.81.165

2,批量分发公钥脚本:

复制代码
# cat distribute_public_key.sh 
    #!/bin/bash
    for ip in $(cat /server/scripts/ip_list.txt)
    do
       sshpass -p654321 ssh-copy-id -i /root/.ssh/id_rsa.pub $ip -o StrictHostKeyChecking=no &>/dev/null
      if [ $? -eq 0 ]
        then
           echo  "to $ip distribute_key "
           echo  "public key distribute success"
           echo  ""
        else
           echo  "to $ip distribute_key"
           echo  "public key distribute faild"
           echo  ""
      fi
    done
复制代码

3,分发公钥检查脚本(批量管理脚本)-----串行批量管理

复制代码
[root@m01 scripts]# cat check_pub_key.sh 
#!/bin/bash
CMD=$1
for ip in $(cat /server/scripts/ip_list.txt)
do
    echo "==================== host $ip check ==================== "
    ssh $ip $CMD
echo ""
done
复制代码

四,SSH服务配置文件解析

复制代码
/etc/ssh/sshd_config
 Port 22                 --- 指定服务启动端口信息  (默认注释状态 默认端口为22)    
 ListenAddress 0.0.0.0      --- 允许哪个网络通过哪个网卡进行连接    ******
                              PS: 监听地址一定是本地网卡上拥有的地址
 PermitRootLogin no        --- 是否允许root用户远程连接,建议改为no
 PermitEmptyPasswords no    --- 是否允许允许远程用户使用空密码登录,建议改为no
 PasswordAuthentication yes  --- 是否支持使用密码方式远程连接
 GSSAPIAuthentication no     --- 是否关闭GSSAPI认证方式,不用时候关闭
 UseDNS no                   --- 是否开启DNS反向解析,建议进行关闭
复制代码

 

五,企业环境批量分发公钥演练

 5.1 企业环境

m01     root  linux@123  ssh服务端口22
web01   root  linux@123  ssh服务端口65531
web02   root  linux@123  ssh服务端口65532
nfs01   root  linux@123  ssh服务端口65533
backup  root  linux@123  ssh服务端口65534

 5.2 编写主机信息文件

cat /server/scripts/ip_list.txt
192.168.81.162:linxu@123:65531
192.168.81.163:linxu@123:65532
192.168.81.164:linxu@123:65533
192.168.81.165:linxu@123:65534
      

 5.3 编写批量分发公钥文件

 

复制代码

# vim /server/scripts/distribute_public_key.sh

#!/bin/bash

#make key:
rm -f /root/.ssh/id* &>/dev/null
yum install -y sshpass
if [ $? == 0 ]
then
#免交互生成密钥对,-f指定存放路径,-P密钥加密的密码 -q减少信息输出
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q


else
echo "intsall shhpass failed"
fi


#分发公钥:


for host in (cat/server/scripts/iplist.txt)dohostip=(echo host|awkF":"print$1)hostpass=(echo host|awkF":"print$2)hostport=(echo host|awkF":"print$3)sshpassphost_pass ssh-copy-id -i /root/.ssh/id_dsa.pub hostipoStrictHostKeyChecking=nophost_port &>/dev/null
if [ ?eq0]thenecho"tohost_ip distribute_key "
echo "public key distribute sucess"
echo ""
else
echo "to $host_ip distribute_key"
echo "public key distribute failed"
echo ""
fi
done

复制代码

 测试结果:

复制代码
[root@m01:/server/scripts]# sh distribute_public_key.sh 
to 192.168.81.162 distribute_key 
public key distribute sucess

to 192.168.81.163 distribute_key 
public key distribute sucess

to 192.168.81.164 distribute_key 
public key distribute sucess

to 192.168.81.165 distribute_key 
public key distribute sucess
复制代码

 

六,SSH远程服务防范入侵方案

复制代码
1,用密钥登录,不用密码登陆   VPN/堡垒机
2,牤牛阵法:解决SSH安全问题
  a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)
  b.开启SSH只监听本地内网IP(ListenAddress 192.168.81.1623,尽量不给服务器外网IP
4,最小化(软件安装-授权)
5,给系统的重要文件或命令做一个指纹   /etc/profile  /etc/rc.local
/etc/passwd md5sum 11110000aaaabbbb 监控 
inotify /bin                          监控
6,重要文件锁上 chattr +i   +a
复制代码

七,远程传输常见问题

复制代码
利用while read line 读取文件信息时, 循环突然中断
分析点01: 不用ssh命令时,循环是正确
分析点02: 只要ssh命令后,拥有标准输入,循环就正确
分析点03: 将循环方式进行改变,循环正确
分析点04: 将ssh命令放入后台执行, 循环就正确 

利用cat命令读取一个文件时, 会将所有信息放入到内存buffer中,
但是while read 读取buffer每行信息时, 正常是逐行读取
while read line  +  ssh  一下将buffer读取空
复制代码

 

 

  

 

posted @   michaelni  阅读(476)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
一,远程服务概念说明二,远程服务连接原理 2.1 ssh连接示意图 2.2 ssh连接流程三,远程连接连接 3.1 基于密码方式远程连接 3.2 基于密钥方式远程连接  3.2.1 简单配置:  3.2.2 实现免交互输入密码信息分发公钥  3.2.3 批量分发公钥脚本:四,SSH服务配置文件解析五,企业环境批量分发公钥演练 5.1 企业环境 5.2 编写主机信息文件 5.3 编写批量分发公钥文件# vim /server/scripts/distribute_public_key.sh六,SSH远程服务防范入侵方案七,远程传输常见问题
点击右上角即可分享
微信分享提示