====== Настройка 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
* подключение должно пройти без пароля.
* проверяем на удалёнке:
ss -ltnp | grep 8004
---
===== 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:
sudo ufw allow 8004/tcp
---
===== 9. Обновление ключей =====
Перегенерируйте пару и повторите шаг 3.
---
==== Готово ====
Сервис работает от непривилегированного пользователя, автоматически восстанавливает туннель при разрывах.