Назад | Перейти на главную страницу

Google Cloud Compute (GCE) с использованием gcloud не создает действительный отформатированный открытый ключ для SSH

У нас есть проблемы с SSH, как с самим созданием ключей, так и с gcloud, создающим ключи.

Чтобы продемонстрировать, что это не проблема, созданная нами самими, мы выполнили следующее:

  1. Мы создали временный сервер через gcloud: gcloud compute instances create temp-machine --scopes compute-rw
  2. Затем мы подключаемся к экземпляру временной машины по SSH: gcloud compute ssh temp-machine
  3. Поскольку у нас не было определенного ключа, команда на шаге 2 создает для нас пару ключей со следующими результатами:

    WARNING: The private SSH key file for Google Compute Engine does not exist.
    WARNING: You do not have an SSH key for Google Compute Engine.
    WARNING: [/usr/bin/ssh-keygen] will be executed to generate a key.
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/davebeach/.ssh/google_compute_engine.
    Your public key has been saved in /home/davebeach/.ssh/google_compute_engine.pub.
    
  4. Как только gcloud создает пару ключей, он переходит к использованию ключей для входа в экземпляр temp-machine. Он успешно входит в систему и добавляет запись в google_known_hosts на локальном компьютере.

    updating project ssh metadata...\Updated     [https://www.googleapis.com/compute/v1/projects/pro-ppm].
    Updating project ssh metadata...done.
    Warning: Permanently added 'compute.3605686430923056095' (ECDSA) to the list of known hosts.
    
  5. Затем мы закрываем соединение и пытаемся повторно запустить соединение SSH. Когда он пытается использовать ключи, созданные gcloud на предыдущих шагах, он заявляет, что ключи имеют недопустимый формат:

    OpenSSH_7.3p1, OpenSSL 1.0.2j  26 Sep 2016
    debug1: Reading configuration data /Users/davebeach/.ssh/config
    debug1: Reading configuration data /usr/local/etc/ssh/ssh_config
    debug2: resolving "130.211.121.82" port 22
    debug2: ssh_connect_direct: needpriv 0
    debug1: Connecting to 130.211.121.82 [130.211.121.82] port 22.
    debug1: Connection established.
    key_load_public: invalid format
    
  6. Вход в систему продолжается, и вместо этого он находит файл google_known_hosts, извлекает ключ из этого файла и использует этот файл для успешной аутентификации на сервере:

    debug1: identity file /Users/davebeach/.ssh/google_compute_engine type -1
    debug1: key_load_public: No such file or directory
    debug1: identity file /Users/davebeach/.ssh/google_compute_engine-cert type -1
    debug1: identity file /Users/davebeach/.ssh/id_ed25519 type 4
    debug1: key_load_public: No such file or directory
    debug1: identity file /Users/davebeach/.ssh/id_ed25519-cert type -1
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_7.3
    debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7p1 Debian-5+deb8u3
    debug1: match: OpenSSH_6.7p1 Debian-5+deb8u3 pat OpenSSH* compat 0x04000000
    debug2: fd 3 setting O_NONBLOCK
    debug1: Authenticating to 130.211.121.82:22 as 'davebeach'
    debug1: using hostkeyalias: compute.3605686430923056095
    debug3: hostkeys_foreach: reading file "/Users/davebeach/.ssh/google_compute_known_hosts"
    debug3: record_hostkey: found key type ECDSA in file /Users/davebeach/.ssh/google_compute_known_hosts:6
    debug3: load_hostkeys: loaded 1 keys from compute.3605686430923056095
    debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-
    ......
    debug1: Server host key: ecdsa-sha2-nistp256   SHA256:f9dkkPHglZNpR0XtAK33OWYNlyLc/jjHsbTpQvyhcys
    debug1: using hostkeyalias: compute.3605686430923056095
    debug3: hostkeys_foreach: reading file "/Users/davebeach/.ssh/google_compute_known_hosts"
    debug3: record_hostkey: found key type ECDSA in file /Users/davebeach/.ssh/google_compute_known_hosts:6
    debug3: load_hostkeys: loaded 1 keys from compute.3605686430923056095
    debug1: Host 'compute.3605686430923056095' is known and matches the ECDSA host key.
    debug1: Found key in /Users/davebeach/.ssh/google_compute_known_hosts:6
    
  7. Содержимое google_known_hosts создается только gcloud (при первом подключении).

Почему мы никогда не можем заставить экземпляр принимать ключи, которые создает gcloud, и почему он использует ключи google_known_hosts в качестве приемлемых ключей? Есть ли параметр в SSHD_CONFIG, который вызывает это и т. Д.? А что не так с форматом исходного ключа, который создается от нашего имени?

Этот вывод вашего первого вызова мне кажется актуальным:

Your identification has been saved in /home/davebeach/.ssh/google_compute_engine.

Эти выходные данные вашего второго вызова кажутся мне важными:

debug1: identity file /Users/davebeach/.ssh/google_compute_engine type -1

Первый вызов указывает, что файл ключа был сохранен, второй вызов указывает, что он пытался загрузить файл ключа, но это не удалось. Причина, по которой второй вызов не может загрузить ключевой файл, созданный при первом вызове, по-видимому, заключается в том, что вы не используете то же имя файла.

При первом вызове путь начинается с /home во втором вызове путь начинается с /Users. Вы должны убедиться, что все пути в переменных вашей среды верны, в частности HOME. Вы также должны убедиться, что все пути в ваших файлах конфигурации верны, в частности, я бы обратил внимание на любые пути в ~/.ssh/config.

Почему мы никогда не можем заставить экземпляр принимать ключи, которые создает gcloud, и почему он использует ключи google_known_hosts в качестве приемлемых ключей?

Вы генерируете ключи хоста сервера экземпляра. Он не имеет ничего общего с ключами аутентификации.

Есть ли параметр в SSHD_CONFIG, который вызывает это и т. Д.?

Причинение чего?

А что не так с форматом исходного ключа, который создается от нашего имени?

Как выглядит ключ?