Инструменты пользователя

Инструменты сайта


ac:autossh

Настройка AutoSSH‑туннеля с обратным проксированием (Ubuntu ≥ 20.04)

📋 Вводные данные

* Локальный сервер — Ubuntu, где будет работать autossh. * Удалённый сервер212.158.1.1, SSH‑порт по умолчанию 22. * Требуемый туннель: -R 8004\:localhost:8004 (открыть 8004 на удалённой стороне, прокинуть к локальному 8004).

1. Создаём системного пользователя

sudo adduser --system --group --home /home/autossh autossh 

* создаётся класс «system» без пароля, логин только по ключу.

2. Генерируем ключ и настраиваем разрешения

sudo -u autossh -H bash -c '
mkdir -p ~/.ssh && chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/id\_ed25519 -N ""
' 

* будут файлы id\_ed25519 и id\_ed25519.pub.

3. Копируем публичный ключ на удалённый сервер

sudo -u autossh ssh-copy-id -i /home/autossh/.ssh/id\_ed25519.pub autossh\@212.158.1.1 

* на удалённой стороне появится */home/autossh/.ssh/authorized\_keys*. * если пользователя autossh там нет — создайте так же и убедитесь, что он может слушать порт 8004.

4. Тестируем ручное соединение

sudo -u autossh ssh -i /home/autossh/.ssh/id_ed25519 -R 8004\:localhost:8004 autossh\@212.158.1.1 

* подключение должно пройти без пароля. * проверяем на удалёнке:

<code bash>

ss -ltnp | grep 8004 </code>

5. Создаём unit‑файл systemd

# /etc/systemd/system/autossh-tunnel.service
 
[Unit]
Description=AutoSSH Tunnel :8004→212.158.1.1
After=network-online.target
Wants=network-online.target
 
[Service]
User=autossh
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh \
          -M 20000 \
          -N \
          -o "ServerAliveInterval=60" \
          -o "ServerAliveCountMax=3" \
          -o "ExitOnForwardFailure=yes" \
          -i /home/autossh/.ssh/id_ed25519 \
          -R 8004:localhost:8004 autossh@212.158.1.1
Restart=always
RestartSec=5
PrivateTmp=true
ProtectSystem=full
 
[Install]
WantedBy=multi-user.target 

6. Активируем сервис

sudo systemctl daemon-reload
sudo systemctl enable --now autossh-tunnel.service 

==== Проверяем статус ====

systemctl status autossh-tunnel.service
journalctl -u autossh-tunnel.service -f 

7. Настройки на удалённом сервере (по желанию)

* Чтобы порт 8004 был доступен всем интерфейсам, в */etc/ssh/sshd_config* пропишите:

GatewayPorts yes 

затем `sudo systemctl reload sshd`.

* Порты < 1024 требуют *root* или CAP_NET_BIND_SERVICE — здесь не нужно.

8. Брандмауэр

* Локальный: ничего открывать не надо. * Удалённый: разрешаем входящее TCP/8004:

<code bash>

sudo ufw allow 8004/tcp </code>

9. Обновление ключей

Перегенерируйте пару и повторите шаг 3.

Готово

Сервис работает от непривилегированного пользователя, автоматически восстанавливает туннель при разрывах.

ac/autossh.txt · Последнее изменение: attid

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki