ssh远程管理服务的介绍

6 远程管理的介绍    95

6.1 服务的概念介绍    95

6.1.1 sshtelnet服务的相同和不同点    95

6.2 远程服务密码连接的原理    96

6.3 远程服务连接的方式    97

6.3.1 密码连接    97

6.3.2 密钥进行连接    98

6.4 利用脚本进行批量的分发    100

6.4.1 密码和端口都是固定的情况下    100

6.4.2 端口和密码不固定的情况下    102

6.5 远程服务配置文件    102

6.6 远程访问防范入侵方案    103

第6章 远程管理的介绍

6.1 服务的概念介绍

6.1.1 sshtelnet服务的相同和不同点

ssh:

  • 服务端口号为22
  • 在数据传输的时候是加密的传输
  • 一般在互联网中使用,可以使用root账号进行登录

telnet:

  • 服务端口号为23
  • 在数据的传输的时候是明文传输
  • 一般在局域网中使用,不可以使用root账号进行登录

6.2 远程服务密码连接的原理


  • 客户端向服务端发送请求建立的连接
  • 服务端向客户端发送确认是建立连接吗(yes/no)
  • 客户端在给服务端发送确认建立连接(yes),并且接收到一个公钥文件,保存到(~/.ssh/known_hosts)文件中
  • 客户端进行密码确认的操作
  • 服务端向客户端发送密码的确认消息,成功则建立连接

6.3 远程服务连接的方式

6.3.1 密码连接

密码连接有风险,第一,密码基本是固定的形式的;第二:密码的难易由密码的复杂度来决定的

6.3.2 密钥进行连接

6.3.2.1 秘钥连接的原理过程

  • 客户端生成一个密钥对信息
  • 客户端将公钥发送给服务端
  • 客户端使用远程连接命令发送,并且请求建立连接
  • 服务端接收客户端的请求,并且发送确认请求
  • 客户端选择(yes),接着会生成一个公钥,保存到~/.ssh/known_hosts文件中
  • 服务端会发送公钥质询信息(验证客户端有私钥可以解密我这个公钥的文件内容吗)
  • 客户端接收质询信息,并且使用私钥进行解密
  • 客户端将结果发送给服务端
  • 连接建立成功

 

6.3.2.2 管理端创建密钥进行连接

  • -t                        指定密钥的类型(rsa,dsa)
  • -f                        指定密钥的文件名称
  • -C                        指定公钥的内容备注
  • -P                        指定旧的私钥密码
  • -N                        指定新的私钥密码
  • -q                        默认不进行输出

[root@nfs01 ~] # 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:P4YoWQkaZ2j0Modev90czdp60WWVk9in08MdA0jr44Y root@nfs01

The key's randomart image is:

+---[DSA 1024]----+

| . ....+ o|

| . + ... Bo|

| B B . .oB|

| o X o . .o oo=|

| o + S .oo. +.|

| o + =o+o . |

| o o oEBo.. |

| . ..o. |

| .. |

+----[SHA256]-----+

You have new mail in /var/spool/mail/root

6.3.2.3 分发公钥

6.3.2.3.1 分发公钥的原理
  • 管理端和远程服务器进行连接
  • 连接的时候会将公钥发送给远程服务端的/root/.ssh/ authorized_keys的文件里,并且权限为600
  • 在连接建立的时候,ssh服务会加载authorized_keys的文件里面的密钥信息来建立连接
6.3.2.3.2 分发公钥的操作步骤

[root@nfs01 .ssh] # ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]            将公钥发送给172.16.1.41

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"

/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

[email protected]'s password:                 输入172.16.1.41的密码

 

Number of key(s) added: 1

 

Now try logging into the machine, with: "ssh '[email protected]'"

and check to make sure that only the key(s) you wanted were added.

 

[root@nfs01 .ssh] # ssh 172.16.1.41                    远程连接ssh 172.16.1.41

Last login: Sun Oct 27 20:44:18 2019 from 10.0.0.1

[root@backup ~] #                发现不需要密码就可以连接成功

6.4 利用脚本进行批量的分发

6.4.1 密码和端口都是固定的情况下

for i in 41 7

do

sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no 172.16.1.$i

if [ $? -eq 0 ]

then

echo "172.16.1."$i"发送成功"

else

 

echo "172.16.1."$i"发送失败"

fi

 

done

6.4.1.1 ssh批量分发公钥的思路解析

6.4.1.1.1 手动分发公钥

ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.7

6.4.1.1.2 解决需要进行密钥分发的确认信息

ssh 参数-o里面可以指定StrictHostKeyChecking=no来忽略确认,直接将公钥发送过来就可以

ssh -o StrictHostKeyChecking=no        忽略确认,直接将公钥发送过来就可以

6.4.1.1.3 解决输入密码的困境

使用sshpass来忽略

sshpass -p123456                免交互来指定你输入的密码

6.4.1.1.4 将公钥发送的前几个过程连接起来

sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa -o StrictHostKeyChecking=no 172.16.1.7        单个用户直接发密钥的思路

6.4.2 端口和密码不固定的情况下

[root@m01 scripts] # cat different.txt                编写定义IP 密码 端口的配置文件

172.16.1.31 123456 52113

172.16.1.41 654321 22

172.16.1.7 123456 22

[root@m01 scripts] # cat different_miyao_fenfa.sh

#!/bin/bash

 

cat /server/scripts/different.txt|\

while read line                        循环读取

do

IP_INFO="$(echo $line|awk '{print $1}')"                读取第一行,使用awk进行分割,取出IP

PASS_INFO="$(echo $line|awk '{print $2}')"            读取第二行,使用awk进行分割,取出密码

PORT_INFO="$(echo $line|awk '{print $3}')"            读取第三行,使用awk进行分割,取出端口

sshpass -p$PASS_INFO ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no $IP_INFO -p $PORT_INFO &>/dev/null                IP,密码,端口依次赋值给变量下面进行调用

if [ $? -eq 0 ]

then

echo "Public key distribution success"

echo ""

else

echo "Public key distribution faild"

echo ""

fi

done

[root@m01 scripts] #

 

6.5 远程服务配置文件

  • 17 #Port 22                            这个是指定ssh端口配置
  • 19 #ListenAddress 0.0.0.0                指定监听的IP地址(这个地址只能是服务器网                                    卡本身拥有的)
  • 64 #PermitEmptyPasswords no            不允许空密码进行连接
  • 38 #PermitRootLogin yes                        禁止root登录系统
  • 79 GSSAPIAuthentication no                    关闭GSSAPI认证,加快ssh的连接
  • 23 UseDNS no                                关闭DNS反向解析 加快SSH连接效率
  • 47 AuthorizedKeysFile .ssh/authorized_keys        存放发过来的公钥认证文件

 

6.6 远程访问防范入侵方案

  • 使用密钥进行登录系统,别使用密码进行登录
  • 解决ssh安全的问题
    • 防火墙将ssh服务关闭,指定源IP地址限制(只对一些信任公网和私网可以访问)
    • 对服务器的指定IP进行监听(监听的端口只能是网卡里面拥有的)
  • 尽量不给服务器的外网IP(负载均衡是需要外网IP的)
  • 尽量最小化的安装系统
  • 把一些重要的文件进行指纹验证
  • 将一些重要的文件进行加锁来解决

猜你喜欢

转载自www.cnblogs.com/liangyuxing/p/11962904.html
今日推荐