homeassistant智能家居系统公网访问,frp技术实现,基于tunnel2local,腾讯云服务器

本来是想使用阿里云的esc服务器搭建frp的,但是前段时间我阿里云服务器第一年到期了,于是继续低价格99元薅腾讯的羊毛(滑稽)

我安装的是hassos系统,不是Raspberry Pi OS,注意版本,hassos没有图形化界面,是一种HA官方深度定制Linux操作系统。

在这里插入图片描述

食用本博客所需条件

一.homeassistant 左侧边栏中有选项卡 supervisor(插件商店)

二.有自己的云服务器(就是要一个公网ip的Linux操作系统),我的服务器是腾讯云服务器,操作系统是Ubuntu 18。

1. 安装tunnel2local

点击选项卡 supervisor(插件商店),再点击add-on store,点击右上角添加tunnel2local的仓库

在这里插入图片描述

将下面的链接Andrew’s addons repository 的tunnel2local插件源地址输入

https://github.com/zhujisheng/hassio-addons

其后你的选项卡将会新出现以下内容,代表安装成功

在这里插入图片描述

2.安装好tunnel2local插件之后直接去薅一台腾讯云的服务器,我选的是99块那个配置,注意使用ssh登录之前要先在安全组中打开对应端口号,腾讯云服务器默认不打开22端口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

端口22是ssh,端口7000是frp端口,9000是反向代理端口,如果规则不生效就建议重启,注意你的安全组要绑定实例服务器

3.ubuntu安装frp服务端

a.下载frp
①使用wget命令下载frp压缩包,我安装frp的版本是0.32.1,注意版本号
wget  "https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz"
②使用tar解压
tar zxvf frp_0.32.1_linux_amd64.tar.gz
③cd到解压后的frp目录,ls一下,查看到目录下有以下内容

在这里插入图片描述

其中以frps开头的文件是servers服务端的内容,而frpc开头的文件是client客户端的内容。

④修改frps服务器配置文件
vim frps.ini

将以下内容填入,端口7000,token后面会用上,注意之上要加一个字母,不能全数字,用于登录frp的密码

[common]
bind_port = 7000
token = a12345678
⑤在当前文件夹下测试frps
 ./frps -c ./frps.ini

⑥将frps设置为系统服务,使用以下命令

将配置文件复制到对应目录
sudo cp frps  /usr/bin/frps -c 
cd /etc/
sudo mkdir frps
cd  /home/ubuntu/frp_0.32.1_linux_amd64
sudo cp frps.ini  /etc/frps/frps.ini
编写开机自启文件
vi /etc/systemd/system/frps.service
将以下内容输入
[Unit]
Description=frps daemon

[Service]
Type=simple
ExecStart=/usr/bin/frps -c /etc/frps/frps.ini

[Install]
WantedBy=multi-user.target
启动并设为开机自启
sudo systemctl start frps
sudo systemctl enable frps

3.在tunnel2local设置frp客户端

①点击supervisor选项卡,打开安装好的tunnel2local插件,打开configuration选项卡配置,将以下内容复制到里面,其中frp_server改为你的服务器地址,save保存
frp_server: xxx.xxx.xxx.xxx
frp_server_port: 7000
frp_token: a12345678
local_host: homeassistant
local_port: 8123
tunnel_type: tcp
http_domain: hachina.802154.com
tcp_remote_port: 9000

在这里插入图片描述

②在tunnel2local 的info选项卡中,点击start开始
③在tunnel2local 的log选项卡中,出现以下内容,代表成功了,出现的url就是你的ha地址

在这里插入图片描述
在这里插入图片描述

又是闲的蛋疼写博客的一天,我B站id为胖大海fff,有时间我会在上面更新更多智能家居的视频
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Java连接JumpServer并访问对应的服务器有多种方法,其中一种常用的方法是使用JSch库。 以下是一个简单的示例代码,演示如何使用JSch连接JumpServer并访问对应的服务器: ```java import com.jcraft.jsch.*; public class SSHConnection { public static void main(String[] args) { String jumpServerHostname = "jumpServerHostname"; String jumpServerUsername = "jumpServerUsername"; String jumpServerPassword = "jumpServerPassword"; String targetServerHostname = "targetServerHostname"; String targetServerUsername = "targetServerUsername"; String targetServerPassword = "targetServerPassword"; int jumpServerPort = 22; int targetServerPort = 22; try { JSch jsch = new JSch(); // connect to jump server Session jumpServerSession = jsch.getSession(jumpServerUsername, jumpServerHostname, jumpServerPort); jumpServerSession.setPassword(jumpServerPassword); jumpServerSession.setConfig("StrictHostKeyChecking", "no"); jumpServerSession.connect(); System.out.println("Connected to jump server."); // create ssh tunnel to target server via jump server int assignedPort = jumpServerSession.setPortForwardingL(0, targetServerHostname, targetServerPort); System.out.println("SSH tunnel established to target server."); // connect to target server via ssh tunnel Session targetServerSession = jsch.getSession(targetServerUsername, "localhost", assignedPort); targetServerSession.setPassword(targetServerPassword); targetServerSession.setConfig("StrictHostKeyChecking", "no"); targetServerSession.connect(); System.out.println("Connected to target server."); // execute command on target server Channel channel = targetServerSession.openChannel("exec"); ((ChannelExec) channel).setCommand("tail -f /var/log/syslog"); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(System.err); InputStream in = channel.getInputStream(); channel.connect(); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; System.out.print(new String(tmp, 0, i)); } if (channel.isClosed()) { System.out.println("Exit status: " + channel.getExitStatus()); break; } Thread.sleep(1000); } channel.disconnect(); targetServerSession.disconnect(); jumpServerSession.disconnect(); } catch (Exception e) { System.err.println(e.getMessage()); } } } ``` 这个示例代码中,假设JumpServer的主机名是jumpServerHostname,用户名是jumpServerUsername,密码是jumpServerPassword,目标服务器的主机名是targetServerHostname,用户名是targetServerUsername,密码是targetServerPassword。这个代码通过SSH隧道连接到JumpServer,然后通过JumpServer连接到目标服务器,并在目标服务器上执行“tail -f /var/log/syslog”命令来查看系统日志。 你需要将这个示例代码中的主机名、用户名、密码和端口号替换为你自己的值,以便连接到你想要的JumpServer和目标服务器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值