远程服务概念介绍
1) 远程服务可以实现远程连接管理主机
2) 远程服务可以实现远程下载传输数据
利用SSH telnet服务实现远程连接主机
SSH : 加密传输数据方式 (安全性更高,复杂性较高) 经过互联网的远程连接
访问端口:22 默认支持root用户远程连接
telnet : 明文传输数据方式 (安全性更低,复杂性较低) 经过局域网连接
访问端口:23 默认不支持root用户远程连接,可以切换成root用户
远程服务连接原理
客户端:发送建立连接通讯请求
服务端:回复密钥确认信息
客户端:进行密钥信息确认
服务端:将公钥信息进行发送传递
客户端:接受公钥进行保存,并发送确认信息 (当前用家目录下.shh目录 ~/.ssh/known_hosts)
服务端:发送密码验证信息
客户端:输入密码信息
数据连接建立完毕,后续可以传输数据(加密处理)
远程服务连接方式
基于密码方式远程连接
基于密钥方式远程连接
实现方式:
linux系统 --> linux系统
1)管理端建立密钥对
ssh-keygen -t rsa (密钥类型)
2)由管理端传输公钥信息
① 将公钥发送到受控端
scp -rp /root/.ssh/id_ras.pub 172.16.1.7:/root/.ssh/
受控端公钥文件权限更改
chmod 600 id_ras.pub
将文件进行改名
mv id_ras.pub authorized_keys
② ssh-copy-id -i(指定分发的密钥) /root/.ssh./id_rsa.pub 172.16.1.7
3)进行远程连接测试
ssh 10.0.0.7
ssh 10.0.0.7 ip a s eth0
windos系统 --> linux系统
1)管理端建立密钥对
打开xshell--工具--新建密钥向导
2)将公钥信息进行传输,将本地生成的公钥文件添加进linux系统中authorized_keys文件
3)修改连接会话设置
以public key方式远程连接,并且加载密钥信息
如何批量基于密钥方式管理多台主机
批量分发公钥脚本:
解决问题:如何实现面交互
1)需要连接时输入yes信息 -o 参数 StrictHostKeyChecking=no
2)需要连接时输入密码信息 借助工具sshpass
① yum -y install sshpass 以免交互方式提供ssh连接密码信息
② sshpass -p123456 ssh 172.16.1.7
3)需要连接时输出端口信息
ssh -p 加端口信息
for ip in {7,8,31,41}
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip分发成功"
else
echo "$ip分发失败"
fi
done
批量分发检查的脚本
#!/bin/bash
for ip in {7,8,31,41}
do
ssh 172.16.1.$ip $1
done
远程服务配置文件
/etc/ssh/sshd_config
17P Port 22 (注释状态为默认22端口)
19P ListenAddress 默认监听地址 (允许什么网络通过哪个网卡进行连接)
172.16.1.7 PS:监听地址一定是本地网卡上拥有的地址
39P PermitRootLogin yes 是否允许root用户远程连接
64P PermitEmptyPasswords no 是否允许空密码登录
65P PasswordAuthentication yes 是否支持密码方式远程连接
79P GSSAPI no 是否关闭GSSAPI认证
115P UseDNS no 是否关闭DNS反向解析
远程入侵防范策略
1) 用密钥登录系统,不使用密码登录 VPN/堡垒机
2) 解决SSH安全问题
a 防火墙封闭SSH,指定源IP限制 80 443
b 开启SSH只监听本地内网IP (ListenAddress 172.16.1.61)
3) 尽量不给服务器外网IP
4) 最小化(软件安装-授权)
5) 给系统重要文件或命令做一个指纹
6) 重要文件上锁 chattr +i +a
远程传输数据方法
方法一:利用scp命令实现传输数据
scp -rp -P端口 数据信息 地址信息:目标路径
方法二:利用sftp命令实现传输数据
1)sftp + 主机信息
2)get 目标文件的路径及文件名,cd切换目录,ls查看目录内容
put 需上传的文件路径 + 需要保存到的目录 lcd切换本地目录,lls查看本地目录内容
help获取帮助信息 quit退出