
У меня есть удаленная машина за брандмауэром, к которой я хочу подключиться через SSH. Насколько я понимаю, это можно сделать с помощью обратного туннеля ssh.
Итак, я использую команду
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa.pub [email protected]
Моя главная проблема заключается в том, что я хочу выполнять эту команду при каждом запуске компьютера, чтобы компьютер был доступен после перезагрузки.
Я попытался использовать cron, добавив команду как в crontab моего пользователя, так и в /etc/cron
. Однако проблема в том, что обе команды запрашивают пароль. Я создал the id_rsa.pub
файл и отправил его на удаленный сервер, но он все равно не работает.
Если я вошел в систему (например, через teamviewer), я могу запустить команду, и пароль не запрашивается. Если я запускаю команду как root ( sudo
), то запрашивается (пустой) пароль для файла rsa. Я подозреваю, что моя проблема здесь, т. е. когда cron выполняет команду, ssh запрашивает пароль и команда зависает.
Я пробовал использовать как файл rsa моего пользователя, так и файл rsa root, но ни с одним из них мне не удалось подключиться.
решение1
Просто добавьте «sleep 60;» перед командой ssh:
@reboot sleep 60;ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
После перезагрузки ваша сеть по-прежнему не работает.
решение2
После объединения нескольких источников я создал службу для автоматического запуска обратного канала ssh. Файлы конфигурации и необходимые шаги находятся в этом репозитории
решение3
Лучшим решением может бытьавтосш:
«autossh — это программа для запуска копии ssh и ее мониторинга, перезапуская ее по мере необходимости в случае ее отказа или прекращения передачи трафика».
Как говорится в цитате, это имеет дополнительное преимущество, поскольку обеспечивает возможность «постоянной доступности».
решение4
Исправление проблемы SSH
Вы не можете аутентифицировать удаленную машину с помощьюпубличныйключ, вам нужно использоватьчастныйkey для этого. Открытый ключ должен быть на удаленном сервере. Если вы не уверены, то просто скопируйте открытый ключ на удаленный сервер, например так:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remoteserver
и затем выполните команду с закрытым ключом:
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
Выполнение этой команды при загрузке
Как вы уже сделали с crontab, запустите crontab -e
редактирование cron. Добавьте следующую строку, чтобы выполнить эту команду, как только ваш компьютер загрузится.
@reboot ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]