【工具类】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> port

nmap -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次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值