Я создал обратный SSH-туннель, который создает сокет UNIX на удаленном сервере (назовем его proxy_srv), чтобы я мог подключить владельца туннеля (с именем target_srv в оставшейся части этого вопроса) в 2 этапа: создать ссылку из Сокет Unix к порту TCP с помощью socat
и подключение к этому порту с помощью клиента SSH (клиент SSH, по-видимому, не принимает подключение к сокету Unix, поэтому я использовал эту уловку socat
в качестве обходного пути).
Используемые команды (достаточно воспроизвести, немного больше на практике, с файлами идентификации и со) в следующем порядке:
Из target_srv:
me@target_srv:% ssh -CNR /tmp/$(hostname):127.0.0.1:22 me@proxy_srv -o ExitOnForwardFailure=yes
Из proxy_srv:
me@proxy_srv:% socat TCP-LISTEN:2222 UNIX-CONNECT:/tmp/target_srv
С любого другого компьютера, который может получить доступ к proxy_srv:
ssh someone@proxy_srv
Цель всего этого - автоматически построить туннель из компьютеров, использующих сети GPRS, в точку доступа, чтобы я мог получить к ним доступ в случае проблем, учитывая тот факт, что у меня нет физического доступа к ним (слишком далеко),
У меня есть 2 основные проблемы:
когда кто-то удаляет файл сокета Unix на proxy_srv, туннель не заканчивается, поэтому я не могу воссоздать его (легко обойти, просто используйте выделенного пользователя, но все же немного касательно меня),
самое главное, если по какой-то причине что-то в target_srv было перезапущено, либо в результате физической перезагрузки, либо в результате сбоя системы, после чего все происходило автоматически, файл в proxy_srv не удалялся, и туннель не мог быть восстановлен. Конечно, я мог бы просто удалить его и надеяться, что проблема не в конфликте с другим компьютером, но я думаю, что должен быть лучший способ по крайней мере обойти это, например, обнаружение файлов сокетов, которые больше не имеют прослушивателей, и автоматическое удаление их регулярно (внутри выделенной папки, конечно).
Любая идея?