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