Получите цифровой отпечаток ключа сервера SSH

grep не необходимо, можно сделать это с awk один:

awk 'BEGIN{FS="|"} $1 == "AUGUSTYN" { print NR " " $1 " " $2 " " $3}'
86
08.02.2017, 12:49
5 ответов
[117924] Это можно сделать, объединив [118319]ssh-keyyscan[118320] и [118321]ssh-keygen[118322]:

rpm -qa | grep el
rpm -qa | grep centos
rpm -qa | grep rhel

(к сожалению, гораздо более простой [118323]ssh-keyyscan host | ssh-keygen -l -f /dev/stdin[118324] не работает)[117927].

75
27.01.2020, 19:30

Вернуть все вышеперечисленное:

Источник: [118363]nmap docs

20
27.01.2020, 19:30

Недавно мне пришлось сделать это самому, поэтому я решил добавить ответ, который показывает. как это можно сделать (с версиями OpenSSH 7.2 или новее) в одну строку используя подстановку процессов:

ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)

Следующий текст объясняет, как работают эти команды и подчеркивает некоторые из различия в поведении между старыми и новыми версиями OpenSSH утилиты.

Получение открытых хост-ключей

Команда ssh-keyscan была разработана для того, чтобы пользователи могли получать открытые хост-ключи без необходимости аутентификации. ключи без необходимости аутентификации на сервере SSH. Из man-страницы:

ssh-keyscan - это утилита для сбора открытых ключей ssh-хоста для нескольких хостов. Она была разработана для помощи в создании и проверке. ssh_known_hosts files.

Тип ключа

Тип извлекаемого ключа задается с помощью опции -t.

  • rsa1 (устаревший протокол SSH версии 1)
  • rsa
  • dsa
  • ecdsa (последние версии OpenSSH)
  • ed25519 (последние версии OpenSSH)

В современных релизах OpenSSH, по умолчанию используются следующие типы ключей: rsa (начиная с версии 5.1), ecdsa (начиная с версии 6.0) и ed25519 (начиная с версии 6.7).

В старых версиях ssh-keyscan (до версии OpenSSH 5.1), в качестве параметра по умолчанию тип ключа был устаревшим rsa1 (SSH Protocol 1), поэтому типы ключей должны быть явно указаны:

ssh-keyscan -t rsa,dsa hostname

Получить хэши отпечатков ключей Base64

ssh-keyscan печатает ключ хоста сервера SSH в Base64-кодировке формате. Чтобы преобразовать его в хэш отпечатка пальца, можно использовать утилиту ssh-keygen. использовать с опцией -l для печати отпечатка указанного открытого ключа. ключа.

При использовании Bash, Zsh (или оболочки Korn), процесс подстановка может быть использована для удобной однострочной команды:

ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)

Примечание: В версиях OpenSSH до 7.2, функции, используемые ssh-keygen для чтения файлов, не очень хорошо обрабатывали именованные каналы (FIFO), поэтому этот метод не работал, что требовало использования временных файлов.

Алгоритмы хэширования

Последние версии ssh-keygen печатают SHA256 хэши отпечатков ключей. Для получения MD5 хэшей отпечатков ключей сервера (старое поведение), опция -E можно использовать для указания алгоритма хэширования:

ssh-keygen -E md5 -lf <(ssh-keyscan hostname 2>/dev/null)

Использование конвейера

Если используется оболочка POSIX (например, dash), которая не поддерживает подстановку процессов, другие решения с использованием временных файлов будут работать. Однако в новых версиях OpenSSH (начиная с 7.2), можно использовать простой конвейер, поскольку ssh-keygen будет принимает - в качестве имени файла для стандартного потока ввода, что позволяет выполнить однострочную конвейерную команду.

ssh-keyscan hostname 2>/dev/null | ssh-keygen -E md5 -lf -
62
27.01.2020, 19:30

Aquí hay un script de shell (principalmente shell Bourne pero usando la palabra clave local, que está disponible en la mayoría de los/bin/sh)modernos que he escrito para hacer esto. Úselo como ssh-hostkey hostname. Mostrará las huellas dactilares en formato sha256 y md5 para todas las claves de host para el nombre de host o dirección IP dados. También puede especificar manualmente "md5" o "sha256" como segundo argumento para mostrar solo ese formato en particular.

Utiliza un archivo temporal en lugar de canalización para que sea compatible con paquetes OpenSSH más antiguos (como se describe en otras respuestas ). El archivo temporal usa/dev/shm(memoria compartida )si está disponible.

#!/bin/sh
usage () {
  printf '%s\n' "Usage: ssh-hostkey HOSTNAME [FPRINTHASH]"
}

ssh_hostkey () {
  local host="$1"
  local fprinthash="$2"
  local tmp=

  case "$host" in
    -h|--help|'')
      usage >&2
      return 1
      ;;
  esac

  case "$fprinthash" in
    md5|sha256|'') true;;
    *)
      usage >&2
      printf '%s\n' "Fingerprint hash may be 'md5' or 'sha256'" >&2
      return 2
      ;;
  esac

  if test -d /dev/shm
  then tmp="$(mktemp -d -p /dev/shm)"
  else tmp="$(mktemp -d)"
  fi

  trap 'trap - INT TERM EXIT; rm -rf "$tmp"' INT TERM EXIT
  ssh-keyscan "$host" > "$tmp/f" 2> /dev/null
  case "$fprinthash" in
    sha256|'') ssh-keygen -l -f "$tmp/f" 2> /dev/null;;
  esac
  case "$fprinthash" in
    md5|'') ssh-keygen -l -E md5 -f "$tmp/f" 2> /dev/null;;
  esac

  trap - INT TERM EXIT
  rm -rf "$tmp" > /dev/null 2>&1
}

ssh_hostkey "$@"
3
27.01.2020, 19:30

Для своего сервера я использую это:

ssh-keygen -l -E md5 -f <(cat /etc/ssh/ssh_host_*_key.pub)
ssh-keygen -l -E sha256 -f <(cat /etc/ssh/ssh_host_*_key.pub)
2
21.08.2020, 20:30

Теги

Похожие вопросы