综合架构(远程服务)
程序员文章站
2022-04-23 23:50:32
...
一. 远程管理
1)远程连接概念介绍:
远程服务可以实现远程连接管理主机
远程服务可以实现远程下载传输数据
利用SSH telnet服务实现远程连接
SSH :加密传输数据方式(安全性更高,复杂性更高) 经过互联网连接 访问端口:22 默认支持root用户远程连接
telnet :明文传输数据方式(安全性更低,复杂性更低) 经过局域网连接 访问端口:23 默认禁止root用户远程连接
2)远程连接连接原理:
客户端:发送建立连接通讯请求
服务端:回复**信息确认
客户端:进行**信息确认
服务端:将公钥信息进行发送传递
客户端:接收公钥进行保存, 并发送确认信息 (~/.ssh/known_hosts)
服务端: 发送密码验证信息 (加密处理)
服务端:输入密码信息 (加密处理)
数据连接建立完毕
传输数据(加密处理)
3)远程连接连接方式:
a. 基于密码方式远程连接:
步骤:
①:ssh+IP地址
②:输入用户名(主机名称)
③:输入密码(相应主机名称的密码)
例如:
①:ssh 10.0.0.8
②:root
③:oldboy123
图解:
b. 基于**方式远程连接:
1. linux系统 --> linux系统
第一个历程: 管理端建立**对
ssh-****** -t rsa
第二个历程: 管理端传输公钥信息
ssh-copy-id -i /root/.ssh/id_rsa.pub 10.0.0.7
第三个历程: 进行远程连接测试
ssh 10.0.0.7
ssh 10.0.0.7 ip a s eth0
如何批量基于**方式管理多台主机:
管理主机 m01 10.0.0.61 管理 41 31 7 8
批量分发公钥脚本:
解决问题: 如何实现免交互
1) 需要连接时输入yes信息
ssh 172.16.1.31 -o StrictHostKeyChecking=no
2) 需要连接时输入密码信息
yum install -y sshpass
sshpass - noninteractive ssh password provider
以免交互方式提供SSH连接密码信息
sshpass -p654321 ssh 172.16.1.31
3) 需要连接时输入端口信息 65535
ssh 172.16.1.7 -p65535
还有一些提前需要配合实现脚本的文件
cat /server/scripts/ip_list.txt
例如:
172.16.1.7
172.16.1.8
172.16.1.31
172.16.1.41
(1)批量分发公钥脚本:
# 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 ok"
echo ""
else
echo "to $ip distribute_key"
echo "public key distribute no"
echo ""
fi
done
(2)批量分发验证脚本
#!/bin/bash
for ip in $(cat /server/scripts/ip_list.txt)
do
ssh $ip $1
done
2. windows系统(xshell) --> linux系统
第一个历程: 管理端建立**对
xshell工具---新建**向导
第二个历程: 将公钥信息进行编辑
id_rsa_2048.pub -信息编辑到- linux主机authorized_keys
第三个历程: 修改连接会话设置
以pubic key方式连接 --- 加载**信息
==========================================================================
在批量分发公钥信息时:
1) 如果受控端主机 密码信息不一致
2) 如果受控端主机 端口信息不一致
3) 如果受控端主机 用户信息不一致
企业环境:
m01 root 654321 ssh服务端口22
web01 root 123123 ssh服务端口65531
web02 root 321321 ssh服务端口65532
nfs01 root 123456 ssh服务端口65533
backup root 654321 ssh服务端口65534
编写主机信息文件
cat /server/scripts/ip_list.txt
172.16.1.7:123123:65531
172.16.1.8:321321:65532
172.16.1.31:123456:65533
172.16.1.41:654321:65534
编写批量分发公钥文件
#!/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
==========================================================================
4)远程服务配置文件:
/etc/ssh/sshd_config
17 #Port 65531 --- 指定服务启动端口信息 (默认注释状态 默认端口为22)
19 #ListenAddress 0.0.0.0 --- 允许哪个网络通过哪个网卡进行连接 ******
PS: 监听地址一定是本地网卡上拥有地址
20 #PermitRootLogin yes --- 是否允许root用户远程连接
21 #PermitEmptyPasswords no --- 是否允许空密码登录
22 PasswordAuthentication yes --- 是否支持使用密码方式远程连接
79 GSSAPIAuthentication no --- 是否关闭GSSAPI认证方式
115 UseDNS no --- 是否开启DNS反向解析
5)远程入侵方法策略:
1、用**登录,不用密码登陆 VPN/堡垒机
2、解决SSH安全问题
a.防火墙封闭SSH,指定源IP限制 80 443
b.开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。
3、尽量不给服务器外网IP
4、最小化(软件安装-授权)
5、给系统的重要文件或命令做一个指纹 /etc/profile /etc/rc.local
6、重要文件锁上 chattr +i +a
6) 远程传输数据方法
方法一: 利用scp命令实现传输数据
scp -rp -P端口 数据信息 地址信息:/目标路径
方法二: 利用sftp命令实现传输数据
获取远程主机数据:
sftp 主机地址
cd 目录 --- 切换远程主机目录信息
ls 文件 --- 查看远程主机数据信息
get 路径/文件 --- 将重要文件信息下载
上传本地主机数据:
lcd 目录 --- 本地主机切换目录
lls 文件 --- 查看本地主机数据信息
put 文件 路径 --- 将重要文件信息上传
7) 远程传输常见问题
利用while read line 读取文件信息时, 循环突然中断
分析点01: 不用ssh命令时,循环是正确
分析点02: 只要ssh命令后,拥有标准输入,循环就正确
分析点03: 将循环方式进行改变,循环正确
分析点04: 将ssh命令放入后台执行, 循环就正确
利用cat命令读取一个文件时, 会将所有信息放入到内存buffer中,
但是while read 读取buffer每行信息时, 正常是逐行读取
while read line + ssh 一下将buffer读取空