Рейтинг:0

Как написать скрипт для проверки правильности ключа в файле known_hosts

флаг tr

Я хотел бы реализовать функцию в скрипте, которая проверяет правильность ключа, соответствующего данному хосту в файле known_hosts. Очевидный способ сделать это — попытаться подключиться по ssh и выполнить синтаксический анализ, если это приведет к предупреждению known_hosts. Это неоптимально по следующим причинам:

  • Если хост нет в файле know_hosts это нужно проверять отдельно
  • Он основан на конкретной формулировке предупреждения, которая может быть изменена.
  • Он запускает для вас команду ssh на целевом сервере, которую вам не нужно запускать и которая может завершиться ошибкой по разным причинам, например, из-за того, какая оболочка входа указана.
  • Требуются действительные учетные данные

Я пытался найти вариант в ssh-keyscan и ssh-keygen команды, которые могли бы на это проверить, но не нашли их.

Как проще всего сделать эту проверку?

Рейтинг:1
флаг vn
#!/usr/bin/env bash

ХОСТ=$1

установить -o pipefail

HOST_KEY_LINE=$(ssh-keygen -F "$HOST" | хвост -n1)

если [$? -ne 0]; тогда
  echo "$HOST отсутствует в файле known_hosts"
  выход 1
фи

KEY_TYPE=$(эхо "$HOST_KEY_LINE" | awk '{print $2}')
HOST_KEY=$(эхо "$HOST_KEY_LINE" | awk '{print $3}')

ACTUAL_KEY=$(ssh-keyscan -t "$KEY_TYPE" "$HOST" 2>&1 | tail -n1 | awk '{ print $3 }')

если [$? -ne 0]; тогда
  echo "Не удалось получить ключ от $HOST: $ACTUAL_KEY"
  выход 1
фи

если [ "$HOST_KEY" = "$ACTUAL_KEY" ]; тогда
  echo "у known_hosts правильный ключ"
  выход 0
фи

echo "known_hosts имеет неверный ключ"
Рейтинг:0
флаг us

Если у вас есть список всех доступных хостов, вы можете использовать следующее:

ssh-keyscan -t rsa,dsa -f hosts_list > ~/.ssh/known_hosts_revised

Это создаст новый known_hosts_revised который вы можете использовать, чтобы сделать diff с текущим ноу_хост чтобы увидеть различия.

hosts_list содержание должно быть таким:

1.2.3.4,1.2.4.4 имя.мой.домен,имя,n.мой.домен,n,1.2.3.4,1.2.4.4

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.