использование google gcloud для ssh-туннеля на Linux-машину внутри сети

У меня есть машина VirtualBox с Ubuntu 16.04 (т.е. машина A), работающая на OSX, подключенная к сети университетского городка. Я хотел бы время от времени подключаться к машине по ssh со своего ноутбука, чтобы удаленно помогать своим коллегам, и я рассмотрел разные варианты.

Кажется, один из вариантов - «обратный ssh» (связанный с «переадресацией портов» или «ssh-туннелированием»). У моего ноутбука нет фиксированного IP-адреса, поэтому я не могу использовать прямой обратный ssh. Возможное решение - использовать прокси-машину. Идея состоит в том, что, когда мне нужно помочь моим коллегам, они будут вводить инструкции по подключению с машины A, это создаст работающий экземпляр GCP, и я смогу затем подключиться к машине A извне, используя этот мост (прокси ?) Опорная машина.


                                            / Academic intranet
                          +----------+     |  
                          |   GCE    |     |  +----------+
                          | instance |<----|--| Machine A|
                          +----------+     |  +----------+
                                           |  
                                            \ 



                                            / Academic intranet
                          +----------+     |  
+-------------+    ssh    |   GCE    | ssh |  +----------+
| Laptop dynIP|---------->| instance |-----|->| Machine A|
+-------------+           +----------+     |  +----------+
                                           |
                                            \

У нас есть облачная учетная запись Google и gcloud установлена ​​на машине A. Насколько я могу судить, в GCP уже есть очень простой способ настроить туннель в GCP:

https://cloud.google.com/community/tutorials/ssh-tunnel-on-gce

Я попробовал, и все работает. Это заставляет меня предположить, что то же самое должно быть возможно на GCP для последнего шага: чтобы я мог открыть окно браузера SSH на запущенном экземпляре GCP, чтобы я мог оттуда подключиться к машине A по ssh.

Любые идеи?

ИЗМЕНИТЬ:

Вот как далеко я продвинулся по туннелю ssh по инструкциям gce:

На машине A:

gcloud compute instances create --zone us-west1-a tunnel
gcloud compute ssh --zone us-west1-a tunnel -- -N -p 22 -D localhost:2210

На своем ноутбуке я могу открыть https://console.cloud.google.com/compute/instances, а затем откройте окно браузера для подключения по SSH.

Из имени хоста экземпляра GCP tunnel, я думаю, мне не хватает чего-то вроде:

ssh-into-machine-A-from-here

Это последняя команда, которую мне не хватает. Или, может быть, туннелю ssh в gcloud нужны дополнительные флаги / параметры.


person 719016    schedule 11.10.2019    source источник
comment
Похоже, он должен работать, но я не вижу необходимости запускать gcloud на машине A. См. Следующее ... blog.devolutions.net/2017/3/what-is-reverse-ssh-port-forwarding Ваша первоначальная цель, похоже, состоит в том, чтобы использовать ssh в GCP Compute Engine (CE) с использованием собственного ssh ... см. cloud.google.com / compute / docs / instance / connected-advanced   -  person Kolban    schedule 11.10.2019
comment
Это работает до такой степени, что я могу использовать ssh в туннельную машину, созданную машиной A. Но оттуда я не знаю, как затем ssh на машину A. Я думаю, мне не хватает той последней команды ssh или той для настройки туннеля нужны другие флаги / параметры.   -  person 719016    schedule 11.10.2019
comment
Похоже, это ключ ... блог. devolutions.net/2017/3/what-is-reverse-ssh-port-forwarding Если я правильно это читаю, с машины A вы должны SSH в CE на GCP, используя специальные флаги. Это приведет к тому, что SSH на CE начнет прослушивание локального порта. Затем вы войдете в CE и выполните локальный SSH на CE, который затем будет использовать существующее соединение, установленное первой командой.   -  person Kolban    schedule 11.10.2019
comment
После вашего последнего обновления .... похоже, что если вы войдете в свой CE, вы сможете запустить ssh -p 2210 username @ localhost, где username - это имя пользователя на машине A   -  person Kolban    schedule 11.10.2019
comment
Спасибо, @Kolban, мне нужно изменить какие-либо параметры, указанные выше в моем вопросе, или просто ввести две команды gcloud, а затем выполнить ssh -p 2210 username@localhost в экземпляре GCP?   -  person 719016    schedule 11.10.2019
comment
Я не полностью понял ваш сценарий, но считаю, что это может помочь тебе.   -  person llompalles    schedule 15.10.2019
comment
Спасибо за ссылку @llompalles. Возможно, последняя команда ssh, которая позволит мне подключиться к машине A из работающего экземпляра GCP, потребует специальных учетных данных, подобных тем, которые описаны в предоставленной вами ссылке. Прочитав его, в примерах всегда говорится о подключении к экземпляру GCP, когда у них нет имени, а не о подключении к машине A из запущенного ssh-соединения экземпляра GCP. Может быть, последняя команда, которая мне нужна, действительно проста, и я где-то упускаю суть.   -  person 719016    schedule 15.10.2019
comment
Я добавил диаграмму, чтобы объяснить, чего я пытаюсь достичь.   -  person 719016    schedule 15.10.2019


Ответы (2)


0) Создайте экземпляр на GCP с помощью такой команды, как:

gcloud compute instances create --zone us-west1-a tunnel

0b) Щелкните ссылку "SSH" на странице https://console.cloud.google.com/compute/instances, чтобы открыть окно браузера.

0c) В окне браузера отредактируйте файл sshd_config, чтобы включить GatewayPorts yes.

0d) Настройте интерфейс командной строки gcloud и подключитесь в первый раз, как показано ниже:

gcloud compute ssh --zone us-west1-a tunnel

Это создаст ключи ssh в $HOME/.ssh/google_compute_engine. Отключитесь от него. Теперь, когда ключи созданы, выполните следующие шаги.

1) Чтобы установить пересылку с GCE на машину A: выполните на машине A следующее:

ssh -i ~/.ssh/google_compute_engine -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -f -N -R 2022:*:22 gce_user@gce_address

2) Теперь, чтобы подключиться к компьютеру A со своего ноутбука, вы можете использовать окно браузера с экземпляром GCP и выполнить:

ssh -p 2022 A_machine_user@localhost

Затем он должен запросить пароль на A_machine_user и соединить вас с машиной A.

person Konstantin Svintsov    schedule 17.10.2019
comment
Я попробую @ konstantin-svintsov. Как мне получить gce_address из запущенного сеанса ssh на туннельной машине GCE? И как мне включить GatewayPorts в конфигурации GCE sshd. Это флаг команды gcloud compute instances create или команды gcloud compute ssh? Заранее спасибо. - person 719016; 17.10.2019
comment
* Sshd_config находится в / etc / ssh / sshd_config * gce_user - мне удалось создать нового пользователя только для этого и добавить открытый ключ ssh к ключам ssh в сведениях об экземпляре виртуальной машины. * Мне пришлось открыть новый порт с помощью настроек брандмауэра: docs.bitnami.com / google / faq / Administration / use-firewall - person Christian; 08.06.2020

Я не на 100% уверен, что правильно понял ваш вопрос, но, насколько я понял, создание VPN должно быть для вас лучшим решением. Лучший и самый безопасный способ подключения вашего экземпляра GCE к машине A.

Вы можете найти здесь обсуждение такой же реализации.

Другой вариант, который находится в том же духе, - виртуальный частный сервер, такой как OpenSSH на машине A. Здесь есть руководство о том, как реализовать это с помощью виртуального частного сервера, такого как OpenSSH, и как его настроить.

person Andrei Tigau    schedule 16.10.2019