Я нашел надежное решение: Просто поместите скрипт в /usr/lib/systemd/system-shutdown/.
См. также: https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
Непосредственно перед выполнением действительных действий halt/poweroff/reboot/kexec systemd-shutdown запустит все исполняемые файлы в каталоге /usr/lib/systemd/system-shutdown/ и передаст им один аргумент: либо "halt", либо "poweroff", либо "reboot", либо "kexec", в зависимости от выбранного действия. Все исполняемые файлы в этом каталоге выполняются параллельно, и выполнение действия не будет продолжено до завершения всех исполняемых файлов.
Вероятно, самый простой способ — избежать локальной переадресации, которая кажется ненужной в вашем случае, и использовать директиву ProxyJump
, которая позволяет указать один или несколько прокси-серверов перехода (, то есть один или несколько промежуточных хостов (. s ), к которому вы подключаетесь и с которого вы достигаете целевого хоста ).
Вам потребуется два подключения:
Удаленная переадресация, которую вы уже установили, с вашей Linux-системы на vps:
ssh -R 15000:localhost:22 vps-user@vps
Я предполагаю, что вы можете подключиться к vps через порт 22
(, как это подразумевается в вашем вопросе ).
Это позволит vps перенаправлять соединения, которые он получает через порт 15000
, на порт 22
вашего Linux-бокса.
Подключение локального MacBook к vps:
ssh -J vps-user@vps -p 15000 linuxbox-user@localhost
-J
— это ярлык для указания директивы ProxyJump
. (см. страницу руководстваssh(1)
).
Опять же подразумевается, что вы можете подключиться к vps по порту 22
.
Эта команда подключит ваш локальный MacBook к порту 22
на vps, а оттуда к порту 15000
на том же vps (, где слушает linux box ), предоставляя вам вход в ваш linux box без дополнительных подключений.
Соответствующие .ssh/config
файлы будут:
На вашей Linux-системе:
Host vps
RemoteForward 15000 localhost:22
User vps-user
Что позволяет вам просто ввести:
ssh vps
На локальном MacBook:
Host linuxbox
ProxyJump vps-user@vps
Hostname localhost
Port 15000
User linuxbox-user
Что оставляет вас с необходимостью просто выпустить:
ssh linuxbox
Если вы используете аутентификацию с открытым ключом (, как вы предположительно делаете, по крайней мере, чтобы разрешить автоматическую настройку удаленной переадресации ), вы также можете добавить директиву IdentityFile
в оба ваших файла .ssh/config
. чтобы убрать необходимость вводить пароли.
Если выполняются некоторые условия, вы также можете напрямую подключить локальный MacBook к порту 15000
на vps,избегая необходимости локальной переадресации или перехода через прокси. А именно, условия:
Порт 15000
на vps не фильтруется брандмауэром.
Вы устанавливаете GatewayPorts yes
в конфигурации sshd
на vps (обычно в/etc/ssh/sshd_config
).
Этот параметр по умолчанию имеет значение no
и определяет, может ли удаленная переадресация привязать порт прослушивания к другим адресам, кроме петлевого (, следовательно, IP-адрес, отличный от 127.0.0.1
или ::1
). Дополнительную информацию см. на странице руководства sshd_config(5)
.
В этом сценарии вам понадобятся только эти две команды:
Обратная переадресация с вашего linux-бокса на vps (обратите внимание на *:
, предшествующий удаленному порту, что означает «прослушивать любой адрес»):
ssh -R *:15000:localhost:22 vps-user@vps
Простое подключение MacBook к vps:
ssh -p 15000 -l linuxbox-user vps
Которые преобразуются в следующие .ssh/config
файлы:
В вашем Linux-боксе (снова обратите внимание на *:
, предшествующий удаленному порту ):
Host vps
RemoteForward *:15000 localhost:22
User vps-user
На локальном MacBook:
Host linuxbox
Hostname vps
Port 15000
User linuxbox-user
Обратите внимание, однако, что таким образом вы сделаете свой Linux-бокс доступным для Интернета , что, скорее всего, вам не нужно.
Я предполагаю, что Linux-бокс автоматически выполняет обратный туннель к VPS, потому что если бы вы могли сделать это с macbook, в этом не было бы необходимости.
Итак, все, что вам нужно сделать на macbook, это:
написать bash-скрипт:
#!/bin/bash
ssh -f -N -L 12345:localhost:1500 vps-user@vps
sleep 5
ssh -f -N linuxbox-user@localhost -p 12345
Убедитесь, что он исполняемыйchmod +x /path/to/script
Затем создайте псевдоним в конце/home/username/.bashrc
alias sshlinuxbox="/path/to/script"
Затем все, что вам нужно сделать, это ввести sshlinuxbox
после открытия нового терминала, чтобы обновить.bashrc.