autossh反向代理
参考: https://blog.csdn.net/wesleyflagon/article/details/85304336
autossh一个用来启动ssh并且监控ssh的程序(所以在autossh中有[SSH OPTIONS]的选项),在ssh通道断开的情况下会重新启动ssh,也就是会重连(这个很重要)。
autossh利用ssh构建一个ssh转发的回路,然后发送一个test data,并且期待这个test data能返回来。
v1.3版本之后,添加了echo_port参数:可以在反射服务器上指定一个port,这个port将会把test data反射回来。这样可以防止远程的反射服务上端口被占用的情况。v1.3之前的版本没有echo_port这个参数,所以不加echo_port参数的时候,默认echo_port=port +1。
- -f
在运行ssh之前自动加载到后台.参数传递到ssh的时候会把-f flag去掉。-f选项在ssh和autossh上的意义是大不一样的。在autossh中加-f:when used with autossh ssh will be unable to ask for passwords or passphrases. When -f is used, the “starting gate” time (see AUTOSSH_GATETIME) is set to 0.
AUTOSSH_GATETIME:Specifies how long ssh must be up before we consider it a successful connection. The default is 30 seconds. Note that if AUTOSSH_GATETIME is set to 0, then not only is the gatetime behaviour turned off, but autossh also ignores the first run failure of ssh. This may be useful when running autossh at boot.
还是不要加-f 😦 。
-
-M
可以省略参数-M port,相当于自动选择一个随机本地端口port和echo_port=port + 1。
举例
autossh -M 10001:10002 -N -R 10000:127.0.0.1:22 example.com
本地端口10001转发到remote端口10002,执行ssh -N -R 10000:127.0.0.1:22 example.com,并且设置监视端口10001和10002用于监视这个ssh会话。
正向反向代理
解决方案1(比价靠谱)
https://zhuanlan.zhihu.com/p/112227542
https://www.lixl.cn/2020/010618877.html
ssh正向反向代理讲的很清楚:https://www.jianshu.com/p/50c4160e62ac
实现外网访问内网
https://segmentfault.com/a/1190000002718360
比较明确,但是没有图:https://segmentfault.com/a/1190000002718360
机器状况
机器号 | IP | 用户名 | 备注 |
---|---|---|---|
A | 192.168.0.A | usr_a | 目标服务器,在局域网中,可以访问 A |
B | B.B.B.B | usr_b | 代理服务器,在外网中,无法访问 A |
C | - | - | 可以直接访问 B,无法直接访问 A |
目标
从 C 机器使用 SSH 访问 A
解决方案2
在 A 机器上做到 B 机器的反向代理;在 B 机器上做正向代理本地端口转发。
环境需求
-
每台机器上都需要 SSH 客户端
-
A、B 两台机器上需要 SSH 服务器端。通常是 openssh-server。
在 Ubuntu 上安装过程为
sudo apt-get install openssl-server
实施步骤
-
建立 A 机器到 B 机器的反向代理【A 机器上操作】
ssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B
port_b1
为 B 机器上端口,用来与 A 机器上的22端口绑定。https://www.jianshu.com/p/50c4160e62ac
-
建立 B 机器上的正向代理,用作本地转发。做这一步是因为绑定后的 端口只支持本地访问【B 机器上操作】
ssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost
为本地转发端口,用以和外网通信,并将数据转发到
,实现可以从其他机器访问。其中的
*
表示接受来自任意机器的访问。- 本地端口转发:
https://www.jianshu.com/p/50c4160e62ac
在本地(运行命令的机器上)起一个监听端口,把所有对该本地端口的访问转发到服务器。命令行格式为:
$ ssh -L <local-port-to-listen>:<remote-host>:<remote-port> <sshserver> <local-port-to-listen> 本地端口,也就是命令运行的机器的端口。 <remote-host>:<remote-port> 目标机器和端口,是真正提供服务(真正要访问的服务)的端口。 <sshserver> ssh服务器,是提供端口转发功能的服务器。 这个命令的功能就是把"本地机器:<local-port-to-listen>"映射到内网"<remote-host>:<remote-port>",这个功能通过sshserver实现。
-
现在在 C 机器上可以通过 B 机器 ssh 到 A 机器
ssh -p <portb2> usra@B.B.B.B
至此方案完成。
SSH 参数解释
-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理