dengdc 发布的文章

使用 FRP 将本地 SSH 服务暴露到远程主机

FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,可以帮助我们穿透 NAT 和防火墙,将本地的服务暴露到公网上。在本篇博客中,我们将讲解如何使用 FRP 将本地的 SSH 服务暴露到远程主机,实现安全的远程访问。

1. 安装 FRP

首先,你需要从 FRP 的 GitHub 页面 下载适合你系统的版本。假设你已经成功解压 FRP 文件,并准备好 frpc(客户端)和 frps(服务器端)的可执行文件。

2. FRP 配置

FRP 配置分为两部分:客户端配置 (frpc.toml) 和服务器端配置 (frps.toml)。

FRP 服务器端配置 (frps.toml)

在远程主机上配置 FRP 服务器。frps.toml 配置文件内容如下:

# frps.toml
bindPort = port1 

FRP 服务器将监听 port1 端口,用于 FRP 客户端与 FRP 服务器之间的控制和数据传输。

客户端通过 FRP 服务器的port1端口与服务器建立连接,所有的代理服务请求和管理通信都会通过这个端口来进行。这是 FRP 服务器暴露的端口,客户端需要连接到此端口来请求访问服务。

frps.toml 配置中设置了 bindPort = port1,这意味着 FRP 服务器在 port1 端口监听来自客户端的连接请求。

frpc.toml 配置中,客户端设置 serverPort = port1,表示客户端连接到服务器的 port1 端口进行通信。

FRP 客户端配置 (frpc.toml)

# frpc.toml
serverAddr = "127.0.0.1"  # FRP 服务器地址,服务器和客户端在同一台机器上
serverPort = port1         # FRP 服务器端口,确保与 frps.toml 中的配置一致

[[proxies]]
name = "test-tcp"         # 为该代理指定一个名称
type = "tcp"              # 使用 TCP 协议进行代理
localIP = "127.0.0.1"     # 本地机器的 IP 地址
localPort = 22            # 本地 SSH 服务的端口,默认 SSH 端口为 22
remotePort = port2         # 远程服务器上的端口port2,将会映射到本地的 22 端口

用于暴露本地服务(如 SSH)到远程主机。

客户端的本地服务(如 SSH 服务,默认是 22 端口)通过 FRP 被映射到远程服务器上的某个端口(如 port2 端口)。此端口是客户端的本地服务经过 FRP 隧道转发到远程服务器后的端口。

  • frpc.toml 配置文件中,localPort = 22 表示客户端本地服务(如 SSH)运行在 22 端口。
  • remotePort = port2 表示远程服务器上的端口号,用于通过 FRP 将本地 22 端口的流量转发到远程服务器的 port2 端口。

3. 启动 FRP 服务

在远程服务器上启动 FRP 服务器端:

./frps -c ./frps.toml

在本地机器上启动 FRP 客户端:

./frpc -c ./frpc.toml

4. 验证连接

当 FRP 客户端和服务器都成功启动后,本地机器上的 SSH 服务(通常运行在 22 端口)将被暴露到远程服务器的 port2 端口。你可以通过以下命令进行连接测试:

ssh -p port2 username@remote_host

5. 查看端口状态

你可以在远程服务器或本地机器上通过 netstat 命令查看端口是否成功监听。

在 Linux 上使用以下命令查看 port2 端口的状态:

netstat -na | grep port2
tcp        0      0 0.0.0.0:port2            0.0.0.0:*               LISTEN

6. 总结

通过以上步骤,你可以使用 FRP 将本地的 SSH 服务暴露到远程服务器。这样,即使在 NAT 或防火墙后面,你也可以通过 FRP 安全地访问本地服务。FRP 提供了高效、灵活的端口转发机制,适合多种网络环境和使用场景。

为了避免每次ssh登录输入密码,可以配置公私钥。

PS: 如何配置公私钥

  1. 生成密钥对
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"
  1. 秘钥添加到远程服务器

    生成的公钥 (~/.ssh/id_rsa.pub) 添加到目标服务器的 ~/.ssh/authorized_keys 文件中。

ssh-copy-id user@remote_host  # 公钥直接复制到远程服务器
  1. 使用私钥连接或者直接连接
ssh -i ~/.ssh/id_rsa user@remote_host
ssh user@remote_host