У меня есть апельсиновый ноль с флешкой. Теперь я хочу сделать обратный туннель к моему vhost.

[Unit]
Description=UMTS Reverse SSH Service
ConditionPathExists=|/usr/bin
After=network.target

[Service]
ExecStart=/usr/bin/ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i %h/.ssh/orangepi -R 7878:localhost:3000 root@xxx

# Restart every >2 seconds to avoid StartLimitInterval failure
RestartSec=3
Restart=always

[Install]
WantedBy=multi-user.target

Этот сервис работает. Но если я выключу orangepi и перезапущу его, туннель не появится, потому что порт все еще заблокирован последним ssh-соединением на моем vhost!? Убийство этого pid решает проблему, но почему процесс не завершается, если туннель пропал?

1 ответ1

1

Я бы сказал, что ваша проблема заключается в:

После того, как = network.target

Вы должны изменить это на:

После того, как = network-online.target

network.target не означает, что сеть работает, и вы подключены как минимум к одному интерфейсу. Смотрите: https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

Преждевременно запущенный сервис, вероятно, ожидает тайм-аут и блокирует соединение. Убедитесь, что, запустив сервис вручную с помощью systemctl start your.service после загрузки, а не автоматически.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .