init
This commit is contained in:
commit
d11e0c71eb
66
README.md
Normal file
66
README.md
Normal file
@ -0,0 +1,66 @@
|
||||
# PMGR
|
||||
|
||||
pmgr is wrapper utility for systemd to manage user services for prox‐
|
||||
ies. See example for SSH SOCKS-proxy below.
|
||||
|
||||
# Installation
|
||||
|
||||
Just place pmgr into your PATH.
|
||||
|
||||
```
|
||||
install -m755 pmgr ~/.local/bin/pmgr
|
||||
```
|
||||
|
||||
# Usage example
|
||||
|
||||
For SSH SOCKS-proxy create template user unit ~/.config/sys‐
|
||||
temd/user/ssh-proxy@.service with contents:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=SSH tunnel to %I
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment="LOCAL_ADDR=localhost"
|
||||
EnvironmentFile=%h/.config/proxy-manager/ssh-proxy@%i
|
||||
ExecStart=/usr/bin/ssh -NT \
|
||||
-o ServerAliveInterval=60 \
|
||||
-o ExitOnForwardFailure=yes \
|
||||
-D ${LOCAL_ADDR}:${LOCAL_PORT} ${TARGET}
|
||||
RestartSec=5
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
```
|
||||
|
||||
Create environment file ~/.config/pmgr/environment/ssh-proxy@myserver
|
||||
with contents:
|
||||
|
||||
```
|
||||
TARGET=user@myserver
|
||||
LOCAL_ADDR=127.0.0.1
|
||||
LOCAL_PORT=1080
|
||||
```
|
||||
|
||||
In there 'mysserver' may be a domain name, SSH Hostname (set in
|
||||
~/.ssh/config) or IP address of remote server.
|
||||
|
||||
Now you can enable your proxy with systemctl:
|
||||
|
||||
```
|
||||
systemctl --user start ssh-proxy@myserver
|
||||
```
|
||||
|
||||
With pmgr:
|
||||
|
||||
```
|
||||
pmgr -e ssh-proxy@myserver
|
||||
```
|
||||
|
||||
Proxy usage:
|
||||
|
||||
```
|
||||
curl --proxy socks5h://localhost:1080 eth0.me
|
||||
```
|
24
UNLICENSE
Normal file
24
UNLICENSE
Normal file
@ -0,0 +1,24 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
distribute this software, either in source code form or as a compiled
|
||||
binary, for any purpose, commercial or non-commercial, and by any
|
||||
means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors
|
||||
of this software dedicate any and all copyright interest in the
|
||||
software to the public domain. We make this dedication for the benefit
|
||||
of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of
|
||||
relinquishment in perpetuity of all present and future rights to this
|
||||
software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org/>
|
121
pmgr
Executable file
121
pmgr
Executable file
@ -0,0 +1,121 @@
|
||||
#!/bin/sh
|
||||
|
||||
# pmgr -- proxy manager
|
||||
|
||||
PMGR_VERSION=0.0.1
|
||||
PMGR_WORKDIR="${PMGR_WORKDIR:-"$HOME"/.config/pmgr}"
|
||||
PMGR_ENV_DIR="${PMGR_ENV_DIR:-"$PMGR_WORKDIR"/environment}"
|
||||
|
||||
mkdir -p "$PMGR_WORKDIR"
|
||||
mkdir -p "$PMGR_ENV_DIR"
|
||||
|
||||
usage()
|
||||
{
|
||||
printf \
|
||||
'pmgr -- proxy manager based on systemd user units. See pmgr(1)
|
||||
|
||||
Usage: pmgr [options] [<arguments>]
|
||||
|
||||
Options:
|
||||
-l list proxies
|
||||
-e enable (start) proxy
|
||||
-d disable (stop) proxy
|
||||
-r restart proxy
|
||||
-s show proxy status
|
||||
-j view proxy logs
|
||||
-o print PMGR_ENV_DIR
|
||||
-R run systemctl --user daemon-reload
|
||||
-a add to autostart
|
||||
-A remove from autostart
|
||||
-h print this help message and exit
|
||||
-v print version and exit
|
||||
|
||||
Environment:
|
||||
PMGR_WORKDIR [default: ~/.config/pmgr]
|
||||
PMGR_ENV_DIR [default: $PMGR_WORKDIR/environment]
|
||||
' | sed 's/^ //g'
|
||||
}
|
||||
|
||||
list_proxies()
|
||||
{
|
||||
|
||||
{
|
||||
printf '\e[1mHOST PROTO FILE STATUS AUTOSTART\033[0m\n'
|
||||
for file in $(find "$PMGR_ENV_DIR" -type f); do
|
||||
unit="${file##*/}"
|
||||
if systemctl --user is-active "$unit" >/dev/null 2>&1; then
|
||||
active='\033[32mactive\033[0m'
|
||||
else
|
||||
active=inactive
|
||||
fi
|
||||
printf '%s %s %s %b %s\n' \
|
||||
"${unit#*@}" \
|
||||
"${unit%@*}" \
|
||||
"$(echo "$file" | sed "s%$HOME%~%")" \
|
||||
"$active" \
|
||||
"$(systemctl --user is-enabled "$unit")"
|
||||
done
|
||||
} | column -t
|
||||
}
|
||||
|
||||
[ $# -eq 0 ] && { usage; exit 0; }
|
||||
|
||||
while getopts le:d:r:s:j:oRa:A:hv opt; do
|
||||
case "$opt" in
|
||||
l)
|
||||
list_proxies
|
||||
exit "$?"
|
||||
;;
|
||||
e)
|
||||
for unit in $(find "$PMGR_ENV_DIR" -type f -printf '%f\n'); do
|
||||
if systemctl --user is-active "$unit" >/dev/null 2>&1; then
|
||||
systemctl --user stop "$unit"
|
||||
fi
|
||||
done
|
||||
systemctl --user start "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
d)
|
||||
systemctl --user stop "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
r)
|
||||
systemctl --user restart "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
s)
|
||||
systemctl --user status "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
j)
|
||||
journalctl --user --unit "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
o)
|
||||
echo "$PMGR_ENV_DIR"
|
||||
exit 0
|
||||
;;
|
||||
R)
|
||||
systemctl --user daemon-reload
|
||||
exit "$?"
|
||||
;;
|
||||
a)
|
||||
systemctl --user enable "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
A)
|
||||
systemctl --user disable "$OPTARG"
|
||||
exit "$?"
|
||||
;;
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
v)
|
||||
printf 'v%s\n' "$PMGR_VERSION"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
:
|
||||
esac
|
||||
done
|
126
pmgr.1
Normal file
126
pmgr.1
Normal file
@ -0,0 +1,126 @@
|
||||
.\" vim: set filetype=groff:
|
||||
.TH PMGR 1 "2023-04-25" "pmgr 0.0.1"
|
||||
.SH NAME
|
||||
pmgr - proxy manager based on systemd user units.
|
||||
|
||||
.SH SYNOPSYS
|
||||
.SY pmrg
|
||||
.OP \-ledrsjoRaAhv
|
||||
[\fIservice\fR]
|
||||
.YS
|
||||
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
pmgr is wrapper utility for systemd to manage user services for proxies.
|
||||
See example for SSH SOCKS-proxy in EXAMPLES section below.
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-l
|
||||
list proxies
|
||||
.TP
|
||||
.B \-e \fIservice\fR
|
||||
enable (start) proxy
|
||||
.TP
|
||||
.B \-d \fIservice\fR
|
||||
disable (stop) proxy
|
||||
.TP
|
||||
.B \-r \fIservice\fR
|
||||
restart proxy
|
||||
.TP
|
||||
.B \-s \fIservice\fR
|
||||
show proxy status
|
||||
.TP
|
||||
.B \-j \fIservice\fR
|
||||
view proxy logs
|
||||
.TP
|
||||
.B \-o
|
||||
print PMGR_ENV_DIR
|
||||
.TP
|
||||
.B \-R
|
||||
run systemctl --user daemon-reload
|
||||
.TP
|
||||
.B \-a \fIservice\fR
|
||||
add to autostart
|
||||
.TP
|
||||
.B \-A \fIservice\fR
|
||||
remove from autostart
|
||||
.TP
|
||||
.B \-h
|
||||
print this help message and exit
|
||||
.TP
|
||||
.B \-v
|
||||
print version and exit
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.TP
|
||||
.B PMGR_WORKDIR
|
||||
Working directory. Deafult is ~/.config/pmgr
|
||||
.TP
|
||||
.B PMGR_ENV_DIR
|
||||
Directory for systemd environment files, depends on PMGR_WORKDIR by default.
|
||||
Default is $PMGR_WORKDIR/environment
|
||||
|
||||
.SH EXAMPLES
|
||||
.PP
|
||||
For SSH SOCKS-proxy create template user unit
|
||||
~/.config/systemd/user/ssh-proxy@.service with contents:
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
[Unit]
|
||||
Description=SSH tunnel to %I
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment="LOCAL_ADDR=localhost"
|
||||
EnvironmentFile=%h/.config/proxy-manager/ssh-proxy@%i
|
||||
ExecStart=/usr/bin/ssh -NT \\
|
||||
-o ServerAliveInterval=60 \\
|
||||
-o ExitOnForwardFailure=yes \\
|
||||
-D ${LOCAL_ADDR}:${LOCAL_PORT} ${TARGET}
|
||||
RestartSec=5
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
.EE
|
||||
.in
|
||||
.PP
|
||||
Create environment file
|
||||
~/.config/pmgr/environment/ssh-proxy@myserver with contents:
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
TARGET=user@myserver
|
||||
LOCAL_ADDR=127.0.0.1
|
||||
LOCAL_PORT=1080
|
||||
.EE
|
||||
.in
|
||||
.PP
|
||||
In there 'mysserver' may be a domain name, SSH Hostname (set in ~/.ssh/config)
|
||||
or IP address of remote server.
|
||||
|
||||
Now you can enable your proxy with systemctl:
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
systemctl --user start ssh-proxy@myserver
|
||||
.EE
|
||||
.in
|
||||
.PP
|
||||
With pmgr:
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
pmgr -e ssh-proxy@myserver
|
||||
.EE
|
||||
.in
|
||||
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
.BR systemctl (1),
|
||||
.BR journalctl (1),
|
||||
.BR systemd.special (7),
|
||||
.PP
|
||||
https://wiki.archlinux.org/title/systemd/User
|
Loading…
Reference in New Issue
Block a user