ssh远程管理服务实践
linux
ssh 端口:22 加密传输数据 支持root用户
telnet 端口:23 明文传输数据 不支持root用户
windows
rdp 端口:3389 remote desttop protocl
ssh基本概述
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢?
1.提供远程连接服务器的服务
2.对传输的数据进行加密
区别:
服务连接方式 | 服务数据传输 | 服务监听端口 | 服务器登陆用户 |
---|---|---|---|
ssh | 加密 | 22/tcp | 默认支持root用户登陆 |
telnet | 明文 | 23/tcp | 不支持root用户登陆 |
使用wireshark
验证telnet
明文传输与ssh
加密传输
1.安装telnet服务并运行
# 安装服务
yum install telnet-server -y
# 启动服务
systemctl start telnet.socket
2.使用wireshark检测vmnet8网卡上telnet的流量
3.telnet无法使用root用户登录Linux系统,需要创建普通用户
# 创建用户
useradd ljy
# 设置密码
echo '1' | passwd --stdin ljy
4.使用普通用户进行telnet登录
5.搜索wireshark包含telnet的相关数据
6.使用wireshark分析ssh流量
端口
ftp 21
ssh 22
telnet 23
dns 53
mysql 3306
http 80
https 443
rsync 873
ssh相关命令和选项
注意,不加用户@
的时候,默认使用当前登录的用户去连接
ssh -p22 [email protected]
# -p指定连接远程主机端口,默认22端口可省略
# root@remotehost
# "@"前面为用户名,如果用当前用户连接,可以不指定用户
# "@"后面为要连接的服务器的IP
ssh 远程连接linux服务器
-p port 指定端口
ssh -p8080 [email protected]
ssh 远程连接linux 直接执行命令
ssh [email protected] 'cat /etc/passwd'
使用scp复制数据至远程主机命令(全量复制)
# 选项
-P 指定端口,默认22端口可不写
-r 表示递归拷贝目录
-p 表示在拷贝文件前后保持文件或目录属性不变
-l 限制传输使用带宽(默认kb)
# 推
scp -p ffdd [email protected]:/tmp/
# 拉
scp [email protected]:/tmp/ffdd ~
# 限速
scp /opt/1.txt [email protected]:/tmp
[email protected] password:
test 100% 656MB '83.9MB/s' 00:07
#限速为8096kb,换算为MB,要除以 8096/8=1024KB=1MB
scp -rp -l 8096 /opt/1.txt [email protected]:/tmp
[email protected] password:
test 7% 48MB '1.0MB/s' 09:45
结论
1.scp通过ssh协议加密方式进行文件或目录拷贝。
2.scp连接时的用户作为为拷贝文件或目录的权限。
3.scp支持数据推送和拉取,每次都是全量拷贝,效率较低。
ssh验证方式
1.基于账户密码进行远程登录
知道服务器的IP端口,账号密码,可以直接通过ssh客户端命令登陆远程主机。
[root@web01 ~]# ssh -p22 [email protected]
[email protected] password:
[root@web02 ~]#
2.基于秘钥远程登录
将A服务器上的公钥推送到B服务器
#命令示例: ssh-copy-id [-i [identity_file]][user@]machine
ssh-copy-id #命令
-i #指定下发公钥的路径
[user@] #以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
machine #下发公钥至那台服务器, 填写远程主机IP地址
#分发秘钥,[将A服务器的公钥写入B服务器~/.ssh/authorized_keys文件中]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
#远程登录对端主机方式
[root@m01 ~]# ssh [email protected]
[root@nfs ~]#
#不登陆远程主机bash,但可在对端主机执行命令
[root@m01 ~]# ssh [email protected] "hostname -i"
172.16.1.41
ssh场景实践
实践场景,用户通过Windows/MAC/Linux客户端连接跳板机免密码登录,跳板机连接后端无外网的Linux主机实现免密登录,架构图如下。
实践多用户登陆一台服务器无密码
实践单用户登陆多台服务器免密码
1.windows客户端使用Xshell生成秘钥对,并下发公钥至跳板机
1)Xshell-->选择工具->新建密钥生成工具
2)生成公钥对,选择下一步
- 填写秘钥名称。秘钥增加密码则不建议配置
4) Windows会提示密码,继续
5) 生成秘钥后,点击Xshell->工具->用户秘钥管理者->选择对应秘钥的属性
6)选择对应秘钥的公钥,复制
7) 将从WIndows下复制好的公钥粘贴至跳板机~/.ssh/authorized_keys中,然后测试
[root@m01 ~]# cd ; umask 077; mkdir -p .ssh ;cd .ssh
[root@m01 .ssh]# vim authorized_keys #添加windows公钥
2.跳板机下发公钥至后端主机
- 在跳板机上生成秘钥对
[root@m01 ~]# ssh-keygen -t rsa -C [email protected]
2)拷贝跳板机上的密钥至后端主机,如果ssh不是使用默认的22端口,需要使用-p指定对应端口
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "-p22 [email protected]"
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "-p22 [email protected]"
- 在m01管理机上测试是否成功登陆两台服务器
[root@m01 ~]# ssh [email protected]
[root@nfs01 ~]# exit
[root@m01 ~]# ssh [email protected]
[root@backup ~]# exit
3.通过跳板机能实现scp拷贝文件免密码
[root@m01 ~]# scp zls.txt [email protected]:/tmp
zls.txt 100% 0 0.0KB/s 00:00
[root@m01 ~]# scp zls.txt [email protected]:/tmp
zls.txt 100% 0 0.0KB/s 00:00
4.通过跳板机获取所有机器的load,CPU,Memory
等信息(思考:如果服务器数量多,如何并发查看和分发数据)
[root@m01 ~]# cat all.sh
#!/usr/bin/bash
[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1
for i in 31 41
do
echo "#########172.16.1.$i#####"
ssh [email protected].$i "$1"
done
5.脚本实现(跳板机)
#!/bin/bash
#jumpserver
lb01=10.0.0.5
lb02=10.0.0.6
web01=10.0.0.7
web02=10.0.0.8
web03=10.0.0.9
nfs=10.0.0.31
backup=10.0.0.41
db01=10.0.0.51
m01=10.0.0.61
zabbix=10.0.0.71
menu(){
cat <<-EOF
+-------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) m01 |
| 10) zabbix |
| h) help |
+-------------------------+
EOF
}
#菜单函数
menu
#连接函数
connect(){
ping -c 1 -w 1 $1 &>/dev/null
if [ $? -eq 0 ];then
ssh root@$1
else
echo -e "\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\033[0m"
fi
}
#控制不让输入ctrl+c,z
trap "" HUP INT TSTP
while true
do
read -p "请输入要连接的主机编号:" num
case $num in
1|lb01)
connect $lb01 lb01
;;
2|lb02)
connect $lb02 lb02
;;
3|web01)
connect $web01 web01
;;
4|web02)
connect $web02 web02
;;
5|web03)
connect $web03 web03
;;
6|nfs)
connect $nfs nfs
;;
7|backup)
connect $backup backup
;;
8|db01)
connect $db01 db01
;;
9|m01)
connect $m01 m01
;;
10|zabbix)
connect $zabbix zabbix
;;
h|help)
clear
menu
;;
close)
break
;;
esac
done
SSH安全优化
SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址
5.使用防火墙限制来源IP地址
SSH服务登录防护需进行如下配置调整,先对如下参数进行了解
Port 6666 # 变更SSH服务远程连接端口
PermitRootLogin no # 禁止root用户直接远程登录
PasswordAuthentication no # 禁止使用密码直接远程登录
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟
将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整
###SSH###
#Port 6666
#PasswordAuthentication no
#PermitRootLogin no
GSSAPIAuthentication no
UseDNS no
###END###
标签:10.0,172.16,端口,day04,ssh,远程管理,m01,root
From: https://blog.51cto.com/u_16000550/6210009