一、远程服务概念介绍
· 远程服务可以实现远程连接管理主机
· 远程服务可以实现远程下载传输数据
利用SSH telnet服务实现远程连接主机
SSH : 加密传输数据方式(安全性更高,复杂性较高) 经过互联网连接 访问端口22 默认支持root用户远程连接
telnet: 明文传输数据方式(安全性更低,复杂性较低) 经过局域网连接 访问端口23 默认禁止root用户远程连接
二、远程服务连接原理
客户端: 发送建立连接通讯请求
服务端: 回复密钥确认信息
客户端: 进行密钥信息确认
服务端: 将公钥信息进行发送传递
客户端: 接收公钥进行保存, 并发送确认信息 (~/.ssh/known_hosts)
服务端: 发送密码验证信息 (加密处理)
客户端: 输入密码信息 (加密处理)
数据连接建立完毕
传输数据(加密处理)
三、远程服务连接方式
a 基于密码方式进行远程连接
b 基于密钥方式进行远程连接
实现方式:
linux系统 --> linux系统
第一个历程: 管理端建立密钥对
ssh-keygen -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
脚本内容
基于端口和密码一致
vim /server/scripts/ip_list.txt
172.16.1.7
172.16.1.8
172.16.1.9
172.16.1.31
172.16.1.41
vim /server/scripts/distribute_public_key.sh
#!/bin/bash
for ip in $(cat /server/scripts/ip_list.txt)
do
sshpass -p123456 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
vim /server/scripts/distribute_public_key_check.sh
#!/bin/bash
for ip in $(cat /server/scripts/ip_list.txt)
do
ssh $ip $1
done
基于端口和密码不一致
在批量分发公钥信息时:
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
vim /server/scripts/ip_list2.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
vim /server/scripts/distribute_public_key_new.sh
#!/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
网友评论