grep
не необходимо, можно сделать это с awk
один:
awk 'BEGIN{FS="|"} $1 == "AUGUSTYN" { print NR " " $1 " " $2 " " $3}'
rpm -qa | grep el
rpm -qa | grep centos
rpm -qa | grep rhel
(к сожалению, гораздо более простой [118323]ssh-keyyscan host | ssh-keygen -l -f /dev/stdin[118324] не работает)[117927].
nmap[118360] предоставляет эту возможность с помощью сценария [118361]ssh-hostkey[118362]. для возврата шестнадцатеричного отпечатка пальца ключа:
Вернуть содержимое ключа: Вернуть визуальный пузырь ключа
Вернуть все вышеперечисленное:
Источник: [118363]nmap docs
Недавно мне пришлось сделать это самому, поэтому я решил добавить ответ, который показывает. как это можно сделать (с версиями 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
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 -
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 "$@"
Для своего сервера я использую это:
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)