远程连接服务
概念介绍
- 远程服务可以实现远程连接管理主机
- 远程服务可以实现远程下载传输数据
利用SSH telnet服务实现远程连接主机
ssh:加密传输数据方式(安全性更高,复杂性较高),经过互联网连接,访问端口22,默认支持root用户远程连接
telenet:明文传输数据方式(安全性更低,复杂性较低),经过局域网连接,访问端口23,默认禁止root用户远程连接
远程服务连接原理
客户端:发送建立连接通讯请求
服务端:回复密钥确认信息
客户端:进行密钥信息确认
服务端:将公钥信息进行发送传递
客户端:接收公钥进行保存,并发送确认信息(~/.ssh/known_hosts)
服务端:发送密码验证信息(加密处理)
客户端:输入密码信息(加密信息)
数据连接建立完毕
传输数据(加密处理)
远程服务连接方式
- 基于密码方式进行远程连接
- 基于密钥方式进行远程连接
实现方式:
linux —> linux
- 管理端建立密钥对
ssh-keygen -t rsa
- 管理端传输公钥信息
ssh-copy-id -i /root/.ssh/id_rsa.pub IP地址
- 进行远程连接测试
ssh IP地址
ssh IP地址 命令
windows(xshell) —> linux
- 管理端建立密钥对
- 将公钥信息进行编辑
id_rsa_2048.pub -信息编辑到- linux主机authorized_keys
- 修改连接会话设置
批量基于密钥连接多台主机
需要解决的问题
- 如何实现免交互
- 连接时输入yes信息
- 连接时输入密码信息
- 连接时输入端口信息
- 密码 端口 用户名信息不一致
利用脚本解决问题
编写主机信息文件
IP地址:密码信息:端口信息
IP地址:密码信息:端口信息
IP地址:密码信息:端口信息
编写批量分发公钥文件脚本
#!/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