远程管理服务(SSH)

一,远程服务概念说明

ssh 远程安全连接 22 互联网服务器 可以默认root用户远程登录
telnet 远程连接 23 网络设备连接 机房局域网中 不可以使用root远程登录
远程服务可以实现远程连接管理主机

  远程服务可以实现远程下载传输数据

 
 

利用SSH telnet服务实现远程连接
SSH :加密传输数据方式(安全性更高,复杂性更高) 经过互联网连接 访问端口:22 默认支持root用户远程连接
telnet :明文传输数据方式(安全性更低,复杂性更低) 经过局域网连接 访问端口:23 默认禁止root用户远程连接

telnet服务

linux系统中的 telnet-server服务不支持root用户登陆 只能以普通用户登陆 紧接着使用 su 命令

linux系统中 ssh@root 172.16.1.41 不加用户时代表当前用户

二,远程服务连接原理

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 [email protected]
第三步:进行远程连接测试(不用输入密码信息可以直接连接)
[root@m01 ~]# ssh [email protected] 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 -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.81.163

服务端口号发生变化,如何进行批量分发公钥:
sshpass -p123456 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 编写批量分发公钥文件

# cat distribute_public_key.sh 
#!/bin/bash
      for host in $(cat /server/scripts/ip_list.txt)
      do
        host_ip=$(echo $host|awk -F ":" '{print $1}')
        host_pass=$(echo $host|awk -F ":" '{print $2}')
        host_port=$(echo $host|awk -F ":" '{print $3}')
        sshpass -p$host_pass ssh-copy-id -i /root/.ssh/id_rsa.pub $host_ip -o StrictHostKeyChecking=no -p$host_port  &>/dev/null
        if [ $? -eq 0 ]
        then
           echo  "to $host_ip distribute_key "
           echo  "public key distribute ok"
           echo  ""
        else
           echo  "to $host_ip distribute_key"
           echo  "public key distribute no"
           echo  ""
        fi
      done

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

1,用密钥登录,不用密码登陆   VPN/堡垒机
2,牤牛阵法:解决SSH安全问题
  a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)
  b.开启SSH只监听本地内网IP(ListenAddress 192.168.81.162)
3,尽量不给服务器外网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读取空

  

猜你喜欢

转载自www.cnblogs.com/nsthink-666/p/12731559.html