Last active
April 12, 2022 13:53
-
-
Save QiangZiBro/806d35bd6526ab92199297f2d47c5f03 to your computer and use it in GitHub Desktop.
frp安全连接的配置生成脚本
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env sh | |
###################################################################### | |
# @author : QiangZiBro ([email protected]) | |
# @created : 星期一 4 11, 2022 15:27:11 CST | |
# | |
# @description : Generate safe connection file of frp | |
###################################################################### | |
name=user # 被穿透机器要登录的用户名 | |
base=9090 # 设定一个端口段为穿透端口 | |
ip=1.1.1.1 # 跳板ip | |
sk=FuckSafe # 安全ssh的密钥 | |
filename=m # 生成的文件夹名 | |
for i in $@ | |
do | |
mkdir -p $filename$i | |
port=$((base+i)) | |
# ssh server_name 序号 | |
printf -v N "%02d" $i | |
# 连接机配置文件 | |
cat <<- EOF > $filename$i/visit.ini | |
[common] | |
server_addr = $ip | |
server_port = 7000 | |
token = 1234567 | |
[secret_ssh_visitor] | |
type = stcp | |
# stcp 的访问者 | |
role = visitor | |
# 要访问的 stcp 代理的名字 | |
server_name = secret_sshM$n | |
sk = $sk | |
# 绑定本地端口用于访问 ssh 服务 | |
bind_addr = 127.0.0.1 | |
bind_port = $port | |
EOF | |
# 连接机脚本文件 | |
cat << EOF > $filename$i/run.sh | |
#!/bin/bash | |
echo 接下来: | |
echo 【1】新开一个终端 | |
echo 【2】"ssh -oPort=$port $name@localhost" | |
if [[ "\$OSTYPE" == "darwin"* ]]; then | |
echo "ssh -oPort=$port $name@localhost" | pbcopy | |
fi | |
# 使用alacritty终端 | |
if command -v alacritty 2>&1 >/dev/null; then | |
alacritty & | |
elif [ -d /Applications/iTerm.app ]; then | |
open /Applications/iTerm.app | |
fi | |
# 本地frpc | |
http_proxy= && https_proxy= && frpc -c visit.ini | |
EOF | |
chmod +x $filename$i/run.sh | |
# 穿透机配置文件 | |
cat <<- EOF > $filename$i/frpc.ini | |
[common] | |
server_addr = $ip | |
server_port = 7000 | |
token = 1234567 | |
[secret_sshM$N] | |
type = stcp | |
sk = $sk | |
local_ip = 127.0.0.1 | |
local_port = 22 | |
EOF | |
# 穿透机系统文件 | |
mkdir -p $filename$i/systemd | |
cat << EOF > $filename$i/systemd/frpc.service | |
[Unit] | |
Description=Frp Client Service | |
After=network.target | |
[Service] | |
Type=simple | |
User=root | |
Restart=on-failure | |
RestartSec=5s | |
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini | |
ExecReload=/usr/local/frp/frpc reload -c /usr/local/frp/frpc.ini | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
起因
frp是一款内网穿透工具,可进行ssh/https的内网穿透。直接穿透ssh端口有安全风险,因此采用安全的frp连接是更好的一种方式。
安全的frp连接基本原理是连接机、服务机和穿透机使用一个密钥,你想连接穿透机时,必须在连接机上运行frpc,才能正确连接。这样避免被脚本小子直接扫ssh端口,多一层防范。
但是,需要配置较多的内容,于是编写一个脚本自动生成所有配置。
运行示例
功能解释
以上脚本生成100个目录,每个目录内容如下
配置包含穿透机和访问机的(本文忽略跳板机的配置部分)。
在访问机上,直接运行
run.sh
脚本,包含一系列工作流:运行frpc加密连接、打开终端、把访问的ssh指令复制到粘贴板上。我们要做的事情就是直接在新终端上粘贴回车,就可以连接。在穿透机上,使用生成的 frpc.ini 进行连接。当然,还可使用 frpc.service 进行开机自启,步骤如下: