ssh的反向代理
记录一下因为项目上需要一个公网ip的端口接收数据,但是目前环境并不是公网ip,所以就只能用到ssh的反向代理
ssh 反向代理 - 不拨牙 - 博客园 (cnblogs.com) 参考的是这个博客
因为是临时的使用就不去研究这么多原理了,正好之前想要在外访问家里的服务器,真不错,学有所用了。
总结一下:
准备 一个公网ip (因为我家是移动,搞不到公网ip,只能用腾讯云服务器提供的公网ip) 一台家用的机器
公网ip 称为A机器 ip 101.230.2.23 name:tengxun
家用电脑 称为B机器 ip 192.168.2.22 name:jiayong
首先安装ssh 和autossh
1.机器A上配置sshd
sudo vim /etc/ssh/sshd_config
配置GatewayPorts为yes
重启 sshd sudo service sshd restart
2.在B机器上输入ssh-copy-id tengxun@101.230.2.23 免密登录
3.在B机器上输入 autossh -M 23332 -NR 23333:localhost:22 tengxun@101.230.2.23 然后会运行卡住 然后在任意机器上运行 ssh jiayong@101.230.2.23 -p 23333 就可以进入B机器了
注意:这里面的23332 和23333在A机器必须允许在防火墙打开 ,如果是腾讯云或者阿里云必须要在安全组里面添加上,否则不会通的。可以通过以下两条命令来开放端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-ports
上面测试成功就说明两边已经通了
下面继续反向隧道自启动
sudo vim /etc/systemd/system/autossh.service 创建新的文件
里面内容为
[Unit]
Description=autossh
[Service]
ExecStart=/usr/bin/autossh -M 23332 -NR 23333:localhost:22 tengxun@101.230.2.23 -i /home/xxx/.ssh/id_rsa -o StrictHostKeyChecking=no
[Install]
WantedBy=multi-user.targe
然后在B机器运行
sudo systemctl daemon-reload
sudo systemctl enable autossh.service
sudo systemctl start autossh.service
sudo systemctl status autossh.service
以后开机的时候都会运行的。
这个功能也就这样结束了,还是挺好的。
2026年更新
-----------------------------------------------------------------------优雅的分界线--------------------------------------------------------------------------------------
现在有一个最新的 很快很简单 https://github.com/fatedier/frp/releases
下载一个版本frp frp_0.71.0_linux_amd64.tar.gz
root@iZ0xia1g:~/code/frp/frp_0.71.0_linux_amd64# ls
frps frps.toml LICENSE
修改 frps.toml内容如下
# 服务端与客户端绑定的通信端口(必须确保云服务器安全组和本地防火墙已放行此端口)
bindPort = 7000
# 身份认证配置
auth.method = "token"
# 相当于连接密码,建议修改为复杂的随机字符串,防止被他人恶意接入
auth.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# (可选)Web 仪表盘配置,用于在浏览器监控 FRP 状态
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
-------------------------------------------------------------------------------------优雅的分界线--------------------------------------------------------------------------------------------
内网的也是 一定要下载相同版本的frp
保留下frpc的内容
y@hine:~/code/frp/frp_0.71.0_linux_amd64$ ls
frpc frpc.toml LICENSE
修改frpc.toml 如下
# 公网服务器的 IP 地址
serverAddr = "47.273.164.1"
# 与服务端配置的 bindPort 保持一致
serverPort = 7000
# 身份认证(必须与服务端 token 完全一致)
auth.method = "token"
auth.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 定义需要穿透的 SSH 服务
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
# 映射到公网服务器的端口(外部访问此端口即可连入内网)
remotePort = 6000
分别运行sudo ./frpc -c ./frpc.toml
和sudo ./frps -c ./frps.toml 就可以实现内网穿透了
每次开机都要运行对应的服务 。不管是放在.bashrc 还是systemd 还是启懂脚本里 都可以
一般建议放在 systemd 下面是frpc的 frps的同理
sudo vim /etc/systemd/system/frpc.service
[Unit] Description=Frp Client After=network.target [Service] User=root WorkingDirectory=/你的frp解压绝对路径 ExecStart=/你的frp解压绝对路径/frpc -c /你的frp解压绝对路径/frpc.toml Restart=on-failure [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start frpc
sudo systemctl enable frpc
浙公网安备 33010602011771号