美文网首页
使用autossh建立ssh隧道访问内网主机

使用autossh建立ssh隧道访问内网主机

作者: 铜锣饼 | 来源:发表于2021-06-22 23:59 被阅读0次

需求

image.png

myPC无法直接访问到S2和S3,S1也无法直接访问到S3
在myPC上,通过S1,S2,间接访问到S3
此类情形经常发生在myPC是内网,S1是本地主机,S2是云主机有外网IP,S3是云主机只有云内网IP时

安装autossh

# ubuntu
sudo apt install autossh
# centos
sudo yum install autossh

配置隧道

配置公钥,S2上有S1的公钥;
假设

服务器 IP 端口 用户名
S1 111.111.111.111 1111 user_s1
S2 222.222.222.222 2222 user_s2
S3 333.333.333.333 3333 user_s3

在S1上,编辑.ssh/config文件,没有就创建

Host  tunnel1
   HostName 222.222.222.222
   Port 2222
   User user_s2
   IdentityFile ~/.ssh/id_rsa
   LocalForward 111.111.111.111:1111 333.333.333.333:3333

在S1上运行autossh

autossh -M 0 -f -T -N tunnel1

访问

此时从myPC上访问 (S1) 111.111.111.111:1111,可以直接访问到 (S3) 333.333.333.333:3333

ssh -p1111 user_s3@111.111.111.111

最终效果示意图


image.png

注意:

  1. 其实user_s1是没有用到的,因此“S1上有myPC的公钥” 是不需要的
  2. S3上有没有S2的公钥,也是无关紧要的
  3. 如果S3上有myPC的公钥,则myPC就可以直接访问S3而不用用户名密码

简化版

如果MyPC仅需要通过S1访问S2,则配置文件简化为

Host  tunnel1
   HostName 222.222.222.222
   Port 2222
   User user_s2
   IdentityFile ~/.ssh/id_rsa
   LocalForward 111.111.111.111:1111 localhost:2222

访问方式

ssh -p1111 user_s2@111.111.111.111

另一种方式,不在S1与S2上建立隧道,仅仅做转发。这种方式也叫本地转发

Host  tunnel1
   HostName 111.111.111.111
   User user_s1
   Port 1111
   IdentityFile ~/.ssh/id_rsa
   LocalForward 111.111.111.111:1111 222.222.222.222:2222

访问方式

ssh -p1111 user_s2@111.111.111.111

注意这种方式其实是S1自己与自己建立了一个ssh通道,因此需要S1把自己的pubkey加入到自己的authorized_keys,否则要输入user_s1密码

此方式等同于直接运行命令

ssh -Nf -L 111.111.111.111:1111:222.222.222.222:2222 111.111.111.111

-N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
-f 告诉SSH客户端在后台运行
-L 做本地映射端口

相关文章

网友评论

      本文标题:使用autossh建立ssh隧道访问内网主机

      本文链接:https://www.haomeiwen.com/subject/yzjvyltx.html