Временное решение: сейчас я использую для этого службу systemd, используя invoke для ответа на пароль.
У меня проблемы с выполнением следующей команды через SSH:
ssh -t user@host "sshuttle -D --dns -r user@host:port -x 192.168.1.0/24 0/0"
работает (без демона):
ssh -user1@host1 ssh user2@host2 'sudo sshuttle --dns -r user3@host3:port -x 192.168.1.0/24 0/0'
Не работает (с демоном и сном):
ssh -user1@host1 ssh user2@host2 'sudo sshuttle -D --dns -r user3@host3:port -x 192.168.1.0/24 0/0 && curl ifconfig.co && sleep 3'
Я определил, что проблема полностью связана с аргументом -D (демон).
Все попытки приводят к успешным кодам возврата / выхода, но туннель не инициируется. Если я отброшу daemon arg, он будет работать нормально, но мне нужно, чтобы он работал в фоновом режиме.
Есть идеи, как я могу выполнить демон sshuttle через SSH?
Вы пробовали бегать ssh
с -t
флаг? Может быть что sshuttle
требует tty
чтобы бежать. то -t
flag принудительно устанавливает соединение с псевдо-терминалом.
Если это не сработает, другим вариантом может быть попытка запустить процесс в screen
. например:
ssh user1@host 'screen -dmS myscreen mycommand.sh'
Это дает процессу место для записи вывода. Поскольку в вашей команде sshuttle много метасимволов, вам может потребоваться разместить их в сценарии запуска где-нибудь в удаленной системе (например, mycommand.sh) или попытаться выяснить, как лучше всего избежать символов (например, &&
и @
), чтобы все это работало в одной строке.