【工具类】ssh使用案例
文章目录
- 1. 一些概念
- 1.1 本地端口转发
- 1.2 动态端口转发
- 1.3 远程端口转发
- 1.4 归纳
- 2. 关于ssh的案例
- 2.1 ssh隧道
- 2.1.1 描述
- 2.1.2 实施
- 让host2免密登录host1
- 在host2上使用ssh动态端口转发创建ssh隧道
- host2使用ssh隧道
- 2.3 排查ssh客户端无法连接ssh服务端
- 2.4 启动ssh服务
1. 一些概念
1.1 本地端口转发
# 格式
ssh -L [local_ip:]local_port:target_ip:target_port user@ssh-server# eg: 访问127.0.0.1:8080即通过example.com访问192.168.1.123:80。只能单向访问。
ssh -L [127.0.0.1:]8080:192.168.1.123:80 user@example.com
1.2 动态端口转发
# 格式
ssh -D [local_ip:]local_port user@ssh-server # eg:创建了sockets代理(127.0.0.1:1080),任何使用此代理的网络活动将由gateway.example.com来动态决定转发到哪个ip:port
ssh -D 1080 user@gateway.example.com
1.3 远程端口转发
# 格式
ssh —R [remoete_ip:]remote_port:local_ip:local_port user@ssh-server# eg: 本地创建了一个web服务(localhost:3000),通过gateway.com暴露出去。外部访问gateway.com:8080时就能够访问到本地web服务(localhost:3000)
ssh -R 8080:localhost:3000 user@gateway.com
1.4 归纳
- 通过ssh-server访问指定的ip:port使用本地端口转发
- 通过ssh-server访问不定的ip:port使用动态端口转发
- 通过ssh-server暴露自己本地服务时使用远程端口转发
2. 关于ssh的案例
2.1 ssh隧道
2.1.1 描述
- 问题情景:机架有两台服务器(同一局域网内),一台网络质量好(host1),另一台网络质量糟糕(host2)
- 解决方案:使用host1作为代理,让host2共享host1的网络能力。可以使用ssh动态端口转发来建立ssh隧道实现。
2.1.2 实施
让host2免密登录host1
# host2: 将在/home/user0/.ssh/目录下生成密钥对文件
ssh-keygen -t rsa -C 'user0@xxx.com'
# host2: 上传host2公钥给host1,需要输入user0在host1上的登陆密码
ssh-copy-id -i /home/user0/id_rsa.pub user0@host1
在host2上使用ssh动态端口转发创建ssh隧道
# 创建隧道
ssh -D 8081 user0@host1 -N -C -f
-D 指定用于动态转发的端口
-N 禁止ssh隧道执行命令,仅做转发
-C 对转发数据进行压缩,效率更高
-f 后台运行
PS: ssh隧道在socket5协议上进行动态转发,使用ssh隧道需要配置socket5代理# 关闭隧道
ps aux | grep ssh
kill -9
host2使用ssh隧道
# 给单个命令传递环境变量的临时使用
http_proxy="socks5h://127.0.0.1:8081" https_proxy="socks5h://127.0.0.1:8081" apt update
PS: "socks5h"中的"socks5"表示使用socket5代理,"h"表示hostname解析也走ssh隧道。# 配置环境变量持久使用
echo 'export http_proxy=socks5h://127.0.0.1:8081' > ~/.bashrc
echo 'export https_proxy=socks5h://127.0.0.1:8081' > ~/.bashrc
source ~/.bashrc
PS: apt也有自己的代理配置
sudp vi /etc/apt/apt.conf.d/proxy.conf# /etc/apt/apt.conf.d/proxy.conf
Acquire::http::Proxy "socks5h://127.0.0.1:8081";
Acquire::https::Proxy "socks5h://127.0.0.1:8081";
2.3 排查ssh客户端无法连接ssh服务端
# 主机连通性检查
ping <ip>
nmap <ip># 端口连通性检查
telnet <ip> portnmap -p 80,443 <ip> # 指定端口扫面
nmap 1-1000 <ip> # 端口范围扫描nc -vz <ip> port
-v verbose
-z tcp
2.4 启动ssh服务
# 查看ssh服务状态
sudo systemctl status ssh# 开启ssh服务(REHL/CentOS是sshd)
sudo systemctl start ssh# ssh服务端配置文件: /etc/ssh/sshd_confg# 允许ssh通过防火墙
sudo ufw allow tcp/22
sudo ufw limit 22/tcp # 限制 SSH(22/tcp)连接频率: 默认每分钟6次