24-3.12 日作业.note
一、巩固练习:

1、对 SSH 服务进行安全加固,实施安全策略:
·环境:两台主机,一台 Server、一台 Client:
(1)配置 Server:
apt install -y ssh
adduser elysia //创建一个用户,后续用作测试
vim /etc/ssh/sshd_config
systemctl restart sshd(2)配置 Client:
ssh-keygen
ssh-copy-id -p 8089 skills@172.31.10.101 //使用 -p 指定服务器端口为 8089
# 需要先在服务端开启:(passwordauthentiction yes),否则权限会被拒绝(因为不允许使用密码进行ssh连接)
·可选操作:
cat >> /etc/ssh/ssh_config <<EOF
user skills
port 8089
EOF
systemctl restart ssh
# 因为服务的只允许skills用户登陆,那么客户端可以将默认登陆用户设置为 skills
# 因为服务器ssh端口为 8089,那么可以将客户端端口设置为 8089(3)测试:
1、使用 skills 用户进行登陆测试:

登陆成功
2、使用 elysia 用户进行登陆测试:

登陆失败
因为client的公钥没有传递给 elysia用户,ssh登陆时没有找到ssh密钥对,就会使用密码进行登陆,而服务端禁止了使用密码进行登陆,因此被拒绝。
(4)skills 用户登陆时,自动使用私钥(无需手动输入):
·使用 ssh-agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa //将本地私钥添加进代理
ssh skills@172.31.10.101
自动登陆成功
(5)通过 ssh web 快速登陆到远程主机:
两种方法:
1、编辑 /etc/ssh/ssh_config 文件:
cat >> /etc/ssh/ssh_config <<EOF
Host web
port 8089
hostname 172.31.10.101
user skills
EOF
systemctl restart ssh
或:
echo "hostname 172.31.10.101" >> /etc/ssh/ssh_config
# 因为 ssh 本身就定义了 一个 Host *,但是不建议这样操作,因为这样相当于定义了一个全局的变量(当 ssh [任何] 时,都会连接到 172.31.10.101)
2、编辑 hosts文件::
echo "172.31.10.101 web" >> /etc/hosts
二、综合项目:

1、实现1个Client登陆 n个 Servers:
ssh-keygen //生成密钥
# 生成密钥时,可以不输入密码(使用空密码)这样ssh登陆时可以做到一种另类的免密登陆(因为密码本身就是空的)

ssh-copy-id root@172.31.10.102 //将公钥传递给要登陆的 Servers
ssh-copy-id root@172.31.10.103
ssh-copy-id root@172.31.10.104
此时直接 ssh 登陆 servers 即可
ssh root@....
2、实现 n个client,登陆 一个 Server:
# 在 n 个 client 上 生成 ssh密钥,并将其 ssh 传输给 Server:
SERVER5:ssh-keygen
SERVER6:ssh-keygen
SERVER7:ssh-keygen
所有 Client 都将 公钥ssh传递给要登陆的一台服务器:
server5/6/7:ssh-copy-id root@172.31.10.104



# 此时 Client 就都能够登陆这一台 Server了:
## 如果使用ssh 不指定用户,则默认会使用当前用户进行登陆

三、延伸扩展:
1、配置 SSH 正向代理:
·环境:Client -- GW -- Server
(1)在本地配置 ssh 正向代理:
ssh -L 8080:192.168.10.1:22 -fN 172.16.10.254
ssh -L [指定本地监听的端口]:[指定目的地址]:[目的端口号] -fN [ssh正向代理服务器地址]
·此时可以查看到 8080 端口的监听:

·进行连接测试:
ssh -p [刚刚定义的端口] 127.0.0.1
ssh -p 8080 127.0.0.1
连接成功
(2)在 GW 上 配置代理:
ssh -fLN 0.0.0.0:2222:192.168.10.1:22 root@172.31.10.254
ssh -fLN [要监听的地址【自定义】]:[要监听的端口【自定义】]:[目的服务器]:[目的端口] root@172.31.10.254
(3)在 Client 上访问 GW 的 2222 端口:
ssh -p 2222 172.31.10.254
·1、也可以将 本地的 sshd 端口 更改,然后使用 ssh 的 22 端口进行代理:
echo "port 1034" >> /etc/ssh/sshd_config
systemctl restart sshd
ssh -fLN 0.0.0.0:22:192.168.10.1:22 -p 1034 root@172.31.10.254 //因为本地要使用sshd进行转发,因此当本地的sshd端口修改后,也需要手动指定端口为:1034·2、在 Client 上访问 GW 的 22 端口:
ssh -p 22 172.31.10.254
连接成功
2、配置 SSH 反向代理:
ssh 正向代理 使用 -L
ssh 反向代理 使用 -R
(1)配置 Sever:
# 在 Server 上配置后,会在 GW 上生成一个 监听端口
ssh -fNR *:5678:192.168.10.1:22 root@192.168.10.254
ssh -fNR [GW上要监听的地址【自定义】]:[GW上要监听的端口【自定义】]:[Server本地IP地址【GW能访问到的地址】]:[Server本地端口【GW能访问到的端口】] [GW地址【Server能访问到的地址】]·这个命令有时会遇到 bug:GW上监听的地址会变成回环地址‘127.0.0.1’:
bug:

解决方案:
# GW上配置:
echo "GatewayPorts yes" >> /etc/ssh/sshd_config
systemctl restart sshd·此时查看 端口:

(2)在 Client 上访问 GW 监听的端口:
ssh -p 5678 root@172.31.10.254
3、rsync命令:
·rsync概述:
rsync默认监听TCP端口873,提供快速增量文件传输,能同步更新两处计算机的文件与目录,传输时保留文件的所有属性,包括权限、时间戳、符号链接等。# 安装 rsync:
apt install -y rsync(1)在 本地使用 rsync:
1、将 /home 目录及其内容 复制到 /baskup 目录:
mkdir /baskup
rsync -av /home /baskup
(2)将本地的/home目录复制到远程机器:
# 两端都需要安装 rsync(本地和远程机器):apt install -y rsync