ssh远程管理服务的介绍
第6章 远程管理的介绍
6.1 服务的概念介绍
6.1.1 ssh和telnet服务的相同和不同点
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 root@172.16.1.41 将公钥发送给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
root@172.16.1.41's password: 输入172.16.1.41的密码
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@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的)
- 尽量最小化的安装系统
- 把一些重要的文件进行指纹验证
- 将一些重要的文件进行加锁来解决