По сути, я хочу иметь возможность делать что-то вроде teamviewer, где независимо от конфигурации сети, при условии, что и мой ssh-сервер (машина A), и ssh-клиент (машина B) имеют доступ в Интернет (и какой-то третий сервер, машина C). ), Я могу получить доступ - причина этого в том, что я хочу иметь возможность перемещать машину A, подключать ее к источнику питания, автоматически подключать ее к одной из нескольких предварительно настроенных сетей Wi-Fi (каждая уникальная / другая) без настройки переадресации портов или аналогичных параметров в сетях и возможности входа в нее через Интернет с компьютера B
Как я могу сделать это? Я не возражаю против установки чего-либо на сервере со статическим IP-адресом для помощи при рукопожатии, но я также не против стороннего сервера, если что-то уже существует (как это делает, скажем, teamviewer)
отредактируйте для ясности: у меня есть 3 машины, AB и C
A - это безголовый Raspberry Pi, который будет включаться / выключаться в случайных местах, подключаться к предварительно настроенной сети Wi-Fi
B - это машина с соответствующим монитором, клавиатурой и т. Д., К которой я хочу подключиться
C - это арендованный сервер AWS, который у меня есть со статическим IP-адресом, может надежно подключаться по SSH от B и может устанавливать все необходимое, чтобы помочь B подключиться к A
источник
ssh
туннели, очень кратко. Я никогда не мог заставить их не спать, хотя, даже сautossh
; если восходящая линия связи по какой-либо причине прервалась, их всегда нужно будет перезапускать вручную. В конце концов я установил для себя небольшой VPN с OpenVPN, и он отлично справился со своей задачей.Ответы:
Поскольку у вас есть компьютер C в Интернете, создайте там специальную учетную запись
sesame
, и на A вы создадите учетную запись с открытым / закрытым ключом, с которого вы скопировали открытый ключ вsesame
учетную запись на C.Теперь вы можете войти в систему от А до С, но вместо этого вы делаете:
(возможно, вы захотите объединить это с оператором сна или, например, с 10 секундами и обернуть это в бесконечный цикл, чтобы восстановить соединение, если WiFi отключился из-за его разрыва)
С компьютера B обычно входите в систему под любой учетной записью, которая у вас есть на C (может быть, но не обязательно
sesame
, что я использую другие учетные записи). И как только вы попали на C, войдите в A, используя:Конечно, вы можете использовать номер, отличный от 19930.
Можно запустить
ssh -N -R ...
из,/etc/rc.local
если ваш закрытый ключ на A не защищен паролем. В этом случае убедитесь, что вы создалиsesame
отдельную учетную запись с ограниченными функциональными возможностями, поэтому, когда ваша машина A будет взломана / украдена, риск для вашего сервера C будет ограничен. Именно поэтому я рекомендую использовать отдельную учетную запись, чтобы перейти от B к C.Вы можете фактически установить оболочку входа в систему для
sesame
в/etc/passwd
к/bin/false
, так что вы можете больше не использовать учетную запись для входа в систему .источник
sesame
учетную запись на C, возможно, вы можете заставить ее работать/bin/false
как оболочку входа (так как ssh никогда не входит в систему), или иначе ограничить ее, добавивcommand=
параметр в~/.ssh/authorized_keys
/bin/false
.ssh localhost -p portnum
конечно)Установите туннель IPv6 (например, Sixxs ) на Raspberry Pi. Теперь у вас будет постоянный статический IPv6-адрес, который будет подключаться к сети всякий раз, когда ваш Pi подключен к сети. Убедитесь, что вы обеспечили безопасность своего Pi, так как он сейчас подключен к миру.
Если ваш B подключен к сети IPv6, подключите его напрямую к Pi. Если B не подключен к сети IPv6, используйте C в качестве сервера перехода, где вы подключаетесь через IPv4 к C, а затем через ssh через IPv6 от C к вашему Pi.
источник
Также взгляните на это:
Используемая технология такая же, как описанная в принятом ответе, но она использует некоторые сценарии для автоматизации вещей и для повышения универсальности решения. Он также создает все конфигурации внутри контейнера Docker, так что основная система безопасна на случай, если что-то будет взломано.
Однако он не обеспечивает автоматическое соединение от А до С, его необходимо инициировать вручную. Может быть, вы можете немного изменить решение, чтобы оно выполняло именно то, что вы хотите.
источник
Возможно, вам нужно использовать не ssh или концепцию туннелирования. Я предлагаю использовать концепцию обмена сообщениями, например, WhatsApp или Telegram. Но я думаю, если вы хотите использовать что-то вроде vim, это не так хорошо, как ssh.
У Telegram есть клиент telegram-cli, который вы можете изменить, чтобы принять и выполнить определенную команду и реализовать ее в распа ..
Если вы используете Telegram, вы можете упростить свою сеть и, по крайней мере, уменьшить количество машин C, чтобы использовать Hub, поскольку сервер C заменен сервером сообщений Telegram. Telegram уже имеет клиент для iphone и android, поэтому я не думаю, что вам нужен ваш B Машина тоже, вы можете установить клиент Telegram для конкретной ОС, если вы хотите .. безопасность? телеграмма сообщение зашифровано .. Если кто-то хочет сделать ваш распи? сначала они будут делать сервер телеграмм ..
Таким образом, если ваш raspi может подключаться к серверу телеграмм (просто ваше raspi подключается к Интернету), даже если raspi находится за брандмауэром / прокси / частным IP / динамическим IP, вы всегда можете сделать это удаленно.
С помощью этой концепции вы можете сделать пульт в любом месте и в любое время ..
источник
Я думаю, что вы должны взглянуть на переадресацию порта SSH. Короче говоря, вы сначала запускаете ssh из A в C, используя приведенный ниже синтаксис, а затем используете этот порт для туннелирования обратно из C в A. При этом вы не попадете в домашний брандмауэр A, потому что R-Pi уже имеет туннель
ssh -R 2210: localhost: 22 myCoolAwsSite.com
Пожалуйста, рассмотрите последствия безопасности, когда вы делаете это. Вы можете добавить немного cron jujitsu, чтобы восстановить соединение после перезагрузки.
источник