Вопрос или проблема
Я хочу открыть сессию SSH к моим GCP VM-инстанциям с помощью gcloud, но, похоже, у меня возникают проблемы из-за моего HTTP-прокси-сервера.
После установки google-cloud-sdk на Ubuntu я запустил
gcloud into --run-diagnostics
, что завершилось с ошибкой
Проверка сетевого подключения...выполнено.
ОШИБКА: Проверка доступности не выполнена.
Невозможно подключиться к https://www.google.com (SSLHandshakeError)
Невозможно подключиться к https://accounts.google.com (SSLHandshakeError)
Невозможно подключиться к https://dl.google.com/dl/cloudsdk/channels/rapid/components-2.json (SSLHandshakeError)
Проблемы с сетевым подключением могут быть связаны с настройками прокси или брандмауэра.
Я вижу, что у некоторых людей были подобные проблемы, и в качестве временного решения им нужно было добавить свой внутренний CA в файл cacerts.txt, предположительно в “`/usr/lib/google-cloud-sdk/lib/third_party/httplib2/python3/httplib2“
http_proxy установлен на мой прокси-сервер
>echo $http_proxy
http://proxy.server.domain.com:8080
Когда я запускаю эту команду gcloud info --run-diagnostics --verbosity=debug --log-http
, я получаю ошибку
"error": {
"code": 401,
"message": "Запрос не содержит необходимого аутентификационного удостоверения. Ожидается OAuth 2 токен доступа, cookie для входа или другие действительные аутентификационные данные. См. https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
Моя Ubuntu 18.04 работает в подсистеме Linux для Windows 10.
Вот полная информация о сессии:
>gcloud info --run-diagnostics --verbosity=debug --log-http
DEBUG: Запуск [gcloud.info] с аргументами: [--log-http: "true", --run-diagnostics: "True", --verbosity: "debug"]
Сетевые диагностики обнаруживают и исправляют локальные проблемы сетевого подключения.
Проверка сетевого подключения...=======================
==== начало запроса ====
uri: https://www.google.com
method: GET
== начало заголовков ==
user-agent: gcloud/242.0.0 command/gcloud.info invocation-id/eb1baa5e0f47440c8dc896aea08d15ff environment/None environment-version/None interactive/True from-script/False python/2.7.15rc1 term/xterm-256color (Linux 4.4.0-17134-Microsoft)
== конец заголовков ==
== начало тела ==
== конец тела ==
==== конец запроса ====
=======================
==== начало запроса ====
uri: https://accounts.google.com
method: GET
== начало заголовков ==
user-agent: gcloud/242.0.0 command/gcloud.info invocation-id/cd0d8a31ff1846bfa8d5c9c38234b59c environment/None environment-version/None interactive/True from-script/False python/2.7.15rc1 term/xterm-256color (Linux 4.4.0-17134-Microsoft)
== конец заголовков ==
== начало тела ==
== конец тела ==
==== конец запроса ====
Проверка сетевого подключения...⠛=======================
==== начало запроса ====
uri: https://cloudresourcemanager.googleapis.com/v1beta1/projects
method: GET
== начало заголовков ==
user-agent: gcloud/242.0.0 command/gcloud.info invocation-id/64ab6960448d463cafdc317978f418cc environment/None environment-version/None interactive/True from-script/False python/2.7.15rc1 term/xterm-256color (Linux 4.4.0-17134-Microsoft)
== конец заголовков ==
== начало тела ==
== конец тела ==
==== конец запроса ====
Проверка сетевого подключения...⠶---- начало ответа ----
-- начало заголовков --
-content-encoding: gzip
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"
cache-control: private
content-length: 304
content-type: application/json; charset=UTF-8
date: Thu, 18 Apr 2019 00:12:09 GMT
server: ESF
server-timing: gfet4t7; dur=620
status: 401
transfer-encoding: chunked
vary: Origin, X-Origin, Referer
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
-- конец заголовков --
-- начало тела --
{
"error": {
"code": 401,
"message": "Запрос не содержит необходимого аутентификационного удостоверения. Ожидается OAuth 2 токен доступа, cookie для входа или другие действительные аутентификационные данные. См. https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
-- конец тела --
общее время выполнения (запрос+ответ): 0.733 сек
---- конец ответа ----
----------------------
=======================
==== начало запроса ====
uri: https://www.googleapis.com/auth/cloud-platform
method: GET
== начало заголовков ==
user-agent: gcloud/242.0.0 command/gcloud.info invocation-id/50be4ffdf73848c5a6a922809c6dd1cf environment/None environment-version/None interactive/True from-script/False python/2.7.15rc1 term/xterm-256color (Linux 4.4.0-17134-Microsoft)
== конец заголовков ==
== начало тела ==
== конец тела ==
==== конец запроса ====
Проверка сетевого подключения...⠧---- начало ответа ----
-- начало заголовков --
-content-encoding: gzip
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"
cache-control: private, max-age=0
content-length: 14
content-location: https://www.googleapis.com/auth/cloud-platform
content-type: text/plain
date: Thu, 18 Apr 2019 00:12:09 GMT
expires: Thu, 18 Apr 2019 00:12:09 GMT
server: GSE
status: 200
transfer-encoding: chunked
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
-- конец заголовков --
-- начало тела --
cloud-platform
-- конец тела --
общее время выполнения (запрос+ответ): 0.119 сек
---- конец ответа ----
----------------------
=======================
==== начало запроса ====
uri: https://dl.google.com/dl/cloudsdk/channels/rapid/components-2.json
method: GET
== начало заголовков ==
user-agent: gcloud/242.0.0 command/gcloud.info invocation-id/889d0c5e54df432eaa86e2f0641f2533 environment/None environment-version/None interactive/True from-script/False python/2.7.15rc1 term/xterm-256color (Linux 4.4.0-17134-Microsoft)
== конец заголовков ==
== начало тела ==
== конец тела ==
==== конец запроса ====
Проверка сетевого подключения...выполнено.
ОШИБКА: Проверка доступности не выполнена.
Невозможно подключиться к https://www.google.com (SSLHandshakeError)
Невозможно подключиться к https://accounts.google.com (SSLHandshakeError)
Невозможно подключиться к https://dl.google.com/dl/cloudsdk/channels/rapid/components-2.json (SSLHandshakeError)
Проблемы с сетевым подключением могут быть связаны с настройками прокси или брандмауэра.
Текущие эффективные настройки сетевого прокси Cloud SDK:
тип = http
хост = proxy.server.domain.com
порт = 8080
имя пользователя = None
пароль = None
Что вы хотите сделать?
[1] Изменить свойства сетевого прокси Cloud SDK
[2] Очистить все свойства прокси gcloud
[3] Выйти
Пожалуйста, введите ваш числовой выбор: 3
ОШИБКА: Сетевая диагностика не удалась (0/1 проверок прошло).
Диагностика свойств обнаруживает проблемы, которые могут быть вызваны свойствами.
Проверка скрытых свойств...выполнено.
Проверка скрытых свойств прошла.
Диагностика свойств пройдена (1/1 проверок прошло).
INFO: Явное отображение.
DEBUG: Проверки обновлений SDK отключены.
Обновление: После запуска
gcloud config set auth/disable_ssl_validation True
возможно, я смогу пройти эту проблему. Но затем появляется эта ошибка:
DEBUG: Запуск [gcloud.info] с аргументами: [--run-diagnostics: "True", --verbosity: "debug"]
Сетевая диагностика обнаруживает и исправляет локальные проблемы сетевого подключения.
Проверка сетевого подключения...
.........выполнено.
Проверка доступности пройдена.
Сетевая диагностика пройдена (1/1 проверок прошло).
Диагностика свойств обнаруживает проблемы, которые могут быть вызваны свойствами.
Проверка скрытых свойств...
выполнено.
ОШИБКА: Проверка скрытых свойств не удалась.
Установлены следующие скрытые свойства:
[auth/disable_ssl_validation]
Файлы свойств
Пользователь: /home/<USER>/.config/gcloud/configurations/config_default
Установка: /usr/lib/google-cloud-sdk/properties
ОШИБКА: Диагностика свойств не удалась (0/1 проверок прошло).
INFO: Явное отображение.
DEBUG: Проверки обновлений SDK отключены.
Необходимо установить пользовательский сертификат, если используется прокси, поскольку конфигурация по умолчанию приведет к указанной проблеме.
Временное решение уже опубликовано в PIT случае 35907316 с помощью следующей команды:
gcloud config set custom_ca_certs_file
/etc/ssl/certs/ca-certificates.crt
.
Ответ или решение
Ошибка при работе с gcloud: "Проблемы с подключением к сети могут быть вызваны настройками прокси или брандмауэра"
Если вы сталкиваетесь с проблемами подключения к сети при попытке открыть SSH-сессию к вашим виртуальным машинам (VM) в Google Cloud Platform (GCP) с использованием утилиты gcloud, возможно, это связано с настройками вашего HTTP-прокси-сервера. Рассмотрим, как можно решить эту проблему и восстановить нормальное соединение.
Шаг 1: Анализ ошибки
При диагностировании проблемы с помощью команды gcloud info --run-diagnostics
обнаруживается ошибка:
ERROR: Reachability Check failed.
Cannot reach https://www.google.com (SSLHandshakeError)
Cannot reach https://accounts.google.com (SSLHandshakeError)
Cannot reach https://dl.google.com/dl/cloudsdk/channels/rapid/components-2.json (SSLHandshakeError)
Проблемы с подключением к сети могут быть вызваны настройками прокси или брандмауэра.
Это указывает на проблемы с SSL-соединением, вероятно, вызванные вашим текущим прокси-сервером. Переменная окружения $http_proxy
указывает адрес вашего прокси-сервера: http://proxy.server.domain.com:8080
.
Шаг 2: Обходные пути
-
Добавление внутреннего CA в файл сертификатов:
- Разместите внутренние сертификаты Центра Сертификации (CA) в файле
cacerts.txt
, который, вероятно, находится по следующему пути:/usr/lib/google-cloud-sdk/lib/third_party/httplib2/python3/httplib2
.
- Разместите внутренние сертификаты Центра Сертификации (CA) в файле
-
Настройка пользовательского файла сертификатов:
- Используйте следующую команду для установки пользовательского файла сертификатов:
gcloud config set custom_ca_certs_file /etc/ssl/certs/ca-certificates.crt
Это должно помочь gcloud использовать правильные сертификаты для аутентификации с внешними сервисами через прокси.
- Используйте следующую команду для установки пользовательского файла сертификатов:
Шаг 3: Устранение ошибок аутентификации
При выполнении команды gcloud info --run-diagnostics --verbosity=debug --log-http
возникнет ошибка неаутентифицированного запроса (код 401), которая указывает на отсутствие необходимых учетных данных OAuth 2. Это происходит из-за того, что gcloud не может получить доступ к сервисам Google без валидного токена.
- Выполните аутентификацию, используя команду:
gcloud auth login
Это обеспечит корректное получение и использование OAuth-токена.
Шаг 4: Проверка настроек прокси
Неправильные настройки прокси могут стать причиной всех упомянутых проблем, особенно в рабочей среде с ограничениями доступа:
- Убедитесь, что настройки прокси указаны корректно в gcloud:
gcloud config set proxy/type http gcloud config set proxy/address proxy.server.domain.com gcloud config set proxy/port 8080
Шаг 5: Отключение проверки SSL
В качестве временного решения вы можете отключить проверку SSL, что позволило вам пройти часть проблем с подключением:
gcloud config set auth/disable_ssl_validation True
Тем не менее, это не рекомендуется как постоянное решение по соображениям безопасности.
Заключение
Каждый шаг из перечисленных — это часть комплексного пути к решению проблемы, связанной с использованием прокси в gcloud. Для более надежной и безотказной работы убедитесь, что конфигурация соответствует требованиям вашей сетевой среды, а все сертификаты корректно добавлены.