mac安装frp实现远程桌面并配置开机自启

4,856 阅读4分钟

mac安装frp实现远程桌面并配置开机自启

下载软件

https://github.com/fatedier/frp/releases  # 下载frp_0.44.0_darwin_amd64.tar.gz,这里下载的是Intel CPU架构的,m1或者其他系统选择对应的软件包

image-20220812101619552

解压软件包,配置frpc.ini(客户端配置文件)

配置文件内容

[common]
server_addr = net.congwei.cc # frp服务端地址
server_port = 5443 # frp服务端开放端口
token = abcd1234 # 设置的验证token密码


[Remote_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 5900 # mac电脑远程桌面默认端口
remote_port = 15900 # 服务端对应端口

运行frp

终端中运行

cd /Users/xxxx/Downloads/frp_0.44.0_darwin_amd64 # 切换到frp文件夹,xxxx为当前用户的home文件夹
sudo ./frpc -c ./frpc.ini  # 运行frp客户端

配置没有问题的话,此时客户端电脑就连接到服务器了

服务端frp面板也就能看到客户端已上线,但还没连接

image-20220812135007424

此时就可以用其他电脑远程桌面这个配置了frp内网穿透的电脑了

mac聚焦搜索,搜 屏幕共享

image-20220812135332408

输入ip和设置的端口,点击连接,大功告成

image-20220812135525349

如果连不上,注意配置哪里是否有错误,以及检查服务器防火墙,端口是不是没有开放等

如果不知道怎么管理防火墙可以自己搜索或者看我其他Linux文章

设置开机自启

终端每次都要输命令运行,终端窗口还不能关,这不优雅。这里可以利用Mac系统的launchctl实现开机自启

launchctl 是根据plist文件的信息来启动任务的,所以我们要新加一个frp的plist

mac系统一般提供两种自启方式,1.是跟随系统启动就开始运行,无论用户有没有登陆账号。2.只有用户登陆了账号进入桌面才开始自动运行

  • /Library/LaunchDaemons -->只要系统启动,无论用户有没有登陆系统也会被执行

  • /Library/LaunchAgents -->只有用户登陆系统后才会被执行

其他一些不同文件夹有不同的含义,权限依次升高,权限越大风险越大

~/Library/LaunchAgents 由用户自己定义的任务项 /Library/LaunchAgents 由管理员为用户定义的任务项 /Library/LaunchDaemons 由管理员定义的守护进程任务项 /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项 /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

这里选择了权限较小的~/Library/LaunchAgents,用户登录之后才自动运行(我这里是作为ddns+端口映射的补充,以防万一),如果想要电脑启动就能远程访问请选择/Library/LaunchDaemons文件夹下创建plist文件

sudo vim ~/Library/LaunchAgents/frpc.plist

不喜欢vim也可以,touch命令创建文件,用其他编辑器编辑

frpc.plist文件加入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>frpc</string>
<key>ProgramArguments</key>
<array>
<string>/Users/xxxx/program/frp/frpc</string>
<string>-c</string>
<string>/Users/xxxx/program/frp/frpc.ini</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

注意/Users/xxxx/program/frp替换成你frp程序存放的位置。我这里是在home目录下创建了program文件夹存放

image-20220812224553434

最后在终端运行命令给frpc.plist赋权,以及加载任务

sudo chown root ~/Library/LaunchAgents/frpc.plist
sudo launchctl load -w ~/Library/LaunchAgents/frpc.plist

后面一条命令可能会有个warning,不影响使用

重启电脑,进入系统可以在“活动监视器”里查看frpc进行是否在运行

image-20220812225403777

如果想取消这个开机自启可以运行下面的命令

sudo launchctl unload -w ~/Library/LaunchAgents/frpc.plist

launchctl常用命令

# 加载任务, -w 会将plist文件中无效的key覆盖掉,建议加上
launchctl load -w frpc.plist

# 删除任务
launchctl unload -w frpc.plist

# 查看任务列表, 使用 grep '任务部分名字' 过滤
launchctl list | grep 'frpc'

# 开始任务
launchctl start  frpc.plist

# 结束任务
launchctl stop   frpc.plist

launchctl补充内容

如果运行的是sh脚本等其他需要规律运行的任务,也可以设置定时运行或者循环间隔运行

  • StartInterval: 脚本每间隔多长时间(单位:秒)执行一次;
  • StartCalendarInterval: 脚本在多少分钟、小时、天、星期几、月时间上执行

plist事例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <!-- Label唯一的标识 -->
  <key>Label</key>
  <string>com.demo.plist</string>
  <!-- 要运行的脚本 -->
  <key>ProgramArguments</key>
  <array>
    <string>/Users/xxxx/run.sh</string>
  </array>
  <!-- 要运行的时间 -->
  <key>StartCalendarInterval</key>
  <dict>
        <key>Minute</key>
        <integer>00</integer>
        <key>Hour</key>
        <integer>22</integer>
  </dict>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/demo/run.log</string>
<!-- 标准错误输出文件,错误日志 -->
<key>StandardErrorPath</key>
<string>/Users/demo/run.err</string>
</dict>
</plist>

plist参数说明:

Label:对应的需要保证全局唯一性;

Program:要运行的程序;

ProgramArguments:命令语句

StartCalendarInterval:运行的时间,单个时间点使用dict,多个时间点使用 array

StartInterval:时间间隔,与StartCalendarInterval使用其一,单位为秒

StandardInPath、StandardOutPath、StandardErrorPath:标准的输入输出错误文件

定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的。

参考

Mac执行定时任务之Launchctl

Mac上,执行定时任务:launchctl