SSH (Secure Shell Protocol),在传输数据之前,SSH 先对联机数据包通过加密技术进行加密处理,加密后进行加密传输,确保了传递的数据安全
1. SSH与Telnet的区别
服务连接方式 | 服务数据传输 | 服务监听端口 | 服务登陆用户 |
---|---|---|---|
SSH | 加密 | 22/tcp | 默认支持root用户登陆 |
Telnet | 明文 | 23/tcp | 不支持root用户登陆 |
第一步 客户端向服务端发送请求连接 ( 远程谁,谁就是服务端,谁远程谁就是客户端)
第二步 服务端向客户端发给送公钥 公钥存放在 服务端 etc/ssh/ .pub 文件就是公钥文件
第三步 客户端输入yes进行确认
第四步 服务端询问客户端密码信息,
第五步 客户端输入密码
第六步 服务端确认密码正确,连接建立 服务端通过etc/shadow 文件中对比加密密码,确认没有问题,建立连接
基于密码(口令)方式 安全性不高
基于密钥方式 为批量管理服务器(ansible),准备环境 免交互远程连接
- 管理端 发送连接请求
- 被管理端 基于口令进行验证
- 管理端 创建密钥对,并发送公钥信息
- 管理端 发送连接请求
- 被管理端 发送公钥质询信息
- 管理端 响应公钥质询信息
- 被管理端 接收响应信息,远程连接建立
2. 基于密钥连接(免交互,在管理端服务器操作)
第一个历程: 创建密钥对(在远程管理端创建 m01)
ssh-keygen 创建密钥命令
ssh-keygen -t dsa (加密方式的一种,有dsa rsa 等)
第二个历程: 将密钥(公钥信息进行分发给要管理的主机)
shh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.8 (-i 指定公钥文件的存放路径)
以什么用户身份传输
发送成功之后,就不要要使用口令进行登录
实际实例
远程一下测试是否建立过密钥连接
此时还没有建立通过密钥连接的方式
创建密钥
ssh-keygen -t dsa
-t 指定加密方式 有dsa rsa等等
将密钥分发给要管理的主机
ssh-copy-id -i /root/.ssh/id_dsa root@172.16.1.7
测试,不使用密码就可以连接
总结通过密钥连接
- 管理端: 创建密钥对,保存好私钥
- 管理端: 将公钥进行发送
- 被管理端:接收到公钥 保存 ~/.ssh/authorized_keys (600)
/etc/ssh/sshd_confing
3.如何批量分发秘钥
为了避免大量重复的工作
分发密钥思路 (免交互)
1. 第一次ssh 连接会有提示yes/ no 的提示
利用 ssh参数解决 (StrictHostKeyChecking) 'man 一下ssh 在下方可以找到'
StrictHostKeyChecking 检查功能,分发key的时候,输入 StrictHostKeyChecking=no
2. 每次连接分发公钥前,都需要输入密码信息
跳过密码使用 (sshpass)
yum install -y sshpass
yum install -y sshpass
编写脚本
使用for循环
#!/bin/bash
for ip in {7,8,9} # 命名一个变量 $ip 变量的值在in 后边指定
do
echo "sent key to 172.16.1.$ip"
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
# &>/dev/null 将一些没用的信息定向到空
then
if [ $? -eq 0 ] # 如果返回结果等于0 就执行 then 下边命令否则执行 else下边的命令
then
echo "分发密钥成功"
else
echo "分发密钥失败"
fi
done
等于 -eq
大于 -gt
小于 -lt
大于等于 -ge
小于等于 -le
不等于 -ne
4. ssh 配置文件
配置文件常用参数(SSH服务端配置文件:/etc/ssh/sshd_config)
Port 22 SSH服务默认端口号
ListenAddress 0.0.0.0 SSH服务默认监听所有地址
监听地址必须是主机网卡地址
PermitRootLogin yes SSH服务默认允许使用root用户连接
在实际环境中,一般禁止root用户远程连接
PermitEmptyPasswords no SSH服务默认不允许空密码登入
在实际环境中一定禁止用户使用空密码登录
UseDNS no 禁用SSH服务的DNS反向解析
GSSAPIAuthentication no 关闭SSH服务的GSSAPI认证方式