Добавить открытый ключ в файл known_hosts

Я пытаюсь скопировать открытый ключ из сервера A в файл known_hosts на сервере B. Они оба являются Linux-серверами. Первоначально я думал об открытии файла открытого ключа и копировании его содержимого в файл known_hosts, но я подозреваю, что это неправильный метод. Кто-нибудь знает, как правильно это сделать?

Мой открытый ключ находится в формате ssh-rsa AADGD...

Может кто-нибудь помочь?

Спасибо!

Ответ 1

Я ответил почти аналогичный ответ на SuperUser несколько дней назад. Важные части:

  • Формат отличается
  • На каждом сервере есть разные ключи (типы) (убедитесь, что вы вставляете тот, который фактически используется)
  • Существует ssh-keyscan, который может создать формат для вас

В противном случае просто префикс вашего ключа с IP-адресом сервера (вы можете добавить также имя хоста после запятой), удалите комментарий с конца строки, и вы в порядке. Формат выглядит следующим образом:

11.22.33.44 ssh-rsa AADGD...

И еще одно замечание: если вы используете HashKnownHosts yes (Debian и Ubuntu делает), вам нужно повторно использовать ваш known_hosts, например:

ssh-keygen -Hf ~/.ssh/known_hosts

Ответ 2

Вот как я это сделал.

  1. Сгенерируйте ключ на хост-сервере. Используя приведенную ниже команду.

* ssh-keyscan -t rsa полное имя сервера

Command line and output

  1. Теперь скопируйте выделенный раздел (на рисунке) и добавьте этот ключ в файл known_host на исходном сервере. Конечно, местоположение этого файла может быть различным для разных сред.

Ответ 3

Просто столкнувшись с этой проблемой, вот как я подошел к ней:

Со временем копирую файлы механически через

ssh-keyscan server-name >> ~/.ssh/known_hosts

дал мне повторяющиеся записи в .ssh/known_hosts.

Другие ручные методы требовали от меня создания каталога .ssh еще не существует, и т.д.

Я решил просто позволить ssh справиться с этим:

ssh -o StrictHostKeyChecking=no server-name ls

Параметр -o StrictHostKeyChecking=no автоматически отвечает "да" на

The authenticity of host 'server-name (12.345.678.900)' can't be established.
RSA key fingerprint is XXXXXXX.
Are you sure you want to continue connecting (yes/no)?

сообщение (укажите здесь все предупреждения о случайном подключении к компьютерам, которые вы не знаете).

Команда ls - это просто пуховая команда, которая будет выполнена и заставит SSH отключиться после завершения. Вы можете изменить его на любую команду пуха, которая вам нравится.

ssh позаботится о создании .ssh dir (при необходимости), добавлении только одной копии ключа и т.д.

Платформа: macOS 10.14

Ответ 4

Предполагая, что у вас есть файл с именем publickey.pub, сделайте это:

  1. scp public key .pub на желаемых серверах
  2. запустить для экземпляров AWS ubuntu sudo/bin/bash -c "cat/$USER_PATH/public_key.pub >> $ USER_PATH/.ssh/authorized_keys"
  3. для known_hosts = запустить 'sudo/bin/bash -c "cat/$USER_PATH/public_key.pub >> $ USER_PATH/.ssh/known_hosts"
  4. Тест с помощью SSH

Примечание. Обязательно проверьте формат открытого ключа. Те, которые я видел до этого момента, начинаются с алгоритма шифрования, например, ssh-rsa