SSH 隧道是一种安全可靠的数据传输方式,它可以将数据加密并通过 SSH 连接进行转发,从而在不安全的网络环境中实现安全的数据传输。本文将介绍如何在服务器上建立 SSH 隧道,实现数据的转发。

为什么要使用 SSH 隧道?

  • 安全数据传输: SSH 隧道通过加密数据传输,保护数据在网络传输过程中的安全。
  • 绕过网络限制: SSH 隧道可以绕过防火墙等网络限制,访问被屏蔽的网站或服务。
  • 远程访问本地资源: SSH 隧道可以将本地资源转发到远程服务器,实现远程访问本地资源。

建立 SSH 隧道的步骤

  1. 安装 SSH 客户端和服务器: 确保服务器和客户端都安装了 SSH 客户端和服务器。
  2. 配置 SSH 连接: 在客户端机器上,使用 SSH 命令连接到服务器,并指定端口转发规则。
  3. 启动 SSH 隧道: 执行 SSH 命令,启动 SSH 隧道。
  4. 验证 SSH 隧道: 使用网络工具验证 SSH 隧道是否成功建立。

示例

flowchart LR
    ssh1<-->ssh2
    subgraph B
    ssh2-->HTTP服务
    end
    subgraph A
    curl-->ssh1
    end

上图B服务有HTTP服务,但是A不能直接访问到B,但是B可以访问到A。
于是通过B连接到A建立一个远程端口1080转发到本地80端口。

ssh -NfR 1080:localhost:80 -p 1022 -i user.key user@server_ip
  • -N:表示不执行远程命令,只建立隧道。
  • -f:表示将 SSH 连接放到后台运行。
  • -R 1080:localhost:80:将远程 1080 端口转发到本地的 80 端口。
  • -L 1080:localhost:80:将本地 1080 端口转发到服务器的 80 端口。
  • -i user.key: 采用证书登录是使用
  • user@server_ip:服务器用户名和 IP 地址。

之后就可以使用SSH隧道访问本地资源了

# 在A服务器执行以下命令
curl localhost:1080

由于ssh隧道不稳定,需要定期检查 SSH 隧道是否正常运行,并及时更新 SSH 客户端和服务器。

可以通过安装autossh软件,它可以自动检测连接断开并重新建立连接,确保 SSH 连接持续保持。这对于需要长时间保持 SSH 连接的场景非常有用。

autossh -M 3001 -NfR 1080:localhost:80 -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -p 1022 -i user.key user@server_ip
  • -M:指定一个端口用于接收连接状态信息。
  • -o:指定 SSH 选项。