Получить отпечаток существующего открытого ключа SSH
Этот вопрос спрашивает о получении отпечатка ключа SSH при создании нового ключа с ssh-keygen
,
Но как определить отпечаток существующего открытого ключа в .pub
файл?
➥ Как получить:
- SHA256 хеш существующего ключа?
Что-то вроде этого:SHA256:3VvabBNtRF0XEpYRFnIrhHX6tKZq/vzU+heb3dCYp+0 blah@blah.com
- MD5 (это MD5?) Существующего ключа?
Что-то вроде этого:b6:bf:18:b8:72:83:b7:fb:7d:08:98:72:1f:9f:05:27
- Randomart для существующего ключа?
Что-то вроде этого:
+--[ RSA 2048]----+
| o=. |
| o o++E |
| + . Ooo. |
| + O B.. |
| = *S. |
| o |
| |
| |
| |
+-----------------+
4 ответа
В последних версиях ssh-keygen каждый получает отпечаток открытого ключа RSA в системах на основе Unix с чем-то вроде:
$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
где путь относится к файлу открытого ключа.
Установите пакеты openssh и openssl, которые содержат команды.
# get the SHA256 and ascii art
ssh-keygen -l -v -f /path/to/publickey
# get the MD5 for private key
openssl pkey -in /path/to/privatekey -pubout -outform DER | openssl md5 -c
# get the MD5 for public key
openssl pkey -in /path/to/publickey -pubin -pubout -outform DER | openssl md5 -c
Вышеуказанное работает, если у вас есть доступ к удаленному хосту. Если нет, чтобы получить хэши sha256 и Art по умолчанию с удаленного хоста 'pi' (например), вы можете сделать это:
$ ssh-keyscan pi | ssh-keygen -lvf -
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
2048 SHA256:P/Da4p1YbLDgnbGIkVE9SykONlVynPkwwap54RMW6+A pi (RSA)
+---[RSA 2048]----+
| .+=+= |
| +.oo% |
| ..+ * * |
| .oB . . |
| .oB.oS |
| E+=+ @ |
| ..o.= B |
| .B o |
| .+.+ |
+----[SHA256]-----+
256 SHA256:eMaAlpPMA2/24ajrpHuiL7mCFCJycZNfuNfyB3cyx+U pi (ECDSA)
+---[ECDSA 256]---+
| . . . |
| .=++. . .|
| o&ooo . . o |
|+..+ *o=o o + + E|
|+.. . +.So o = |
| . . o . . |
|o.o . |
|*o.. |
|BO+ |
+----[SHA256]-----+
256 SHA256:cpQtotFCbt4TXxa1474whR1Wkk3gOczhumE23s9pbxc pi (ED25519)
+--[ED25519 256]--+
| . ..==o |
| o . o *.*. |
| = + + + % |
| o = = + * + |
| o + S B + |
| + + B E |
| = o .|
| o +..o|
| ..+oo|
+----[SHA256]-----+
$ _
Если вместо этого вам нужен хэш md5:
$ ssh-keyscan pi | ssh-keygen -E md5 -lf -
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
256 MD5:b3:74:1f:a7:e8:96:ee:e0:5d:7e:31:4d:5c:7c:5c:d2 pi (ECDSA)
2048 MD5:cb:1f:5b:85:fb:6f:c9:89:06:68:ce:96:88:f6:11:ed pi (RSA)
256 MD5:d7:93:a1:8e:53:06:4d:fe:41:5c:fa:4b:70:84:c3:88 pi (ED25519)
$ _
Если вы находитесь на фактическом хосте и хотите получить их, тогда вы просто отделяете часть после канала следующим образом:
$ sudo ssh-keygen -E sha256 -lf /etc/ssh/ssh_host_ecdsa_key
256 SHA256:eMaAlpPMA2/24ajrpHuiL7mCFCJycZNfuNfyB3cyx+U root@raspberrypi (ECDSA)
$ _
И sha256 является значением по умолчанию, поэтому вы должны использовать 'md5', чтобы получить это.
Надеюсь, это поможет.
Патрик
Если вам нужен только отпечаток пальца и ничего больше, например, для добавления ключа в цифровой океан через doctl и новый сервер, вы можете сделать это.
FINGERPRINT="$(ssh-keygen -l -E md5 -f ~/.ssh/${DROPLET_NAME}.pub | awk '{print $2}'| sed 's|MD5:||')"
DROPLET_TAG="machineid-${tagname}"
DROPLET_NAME="${tagname/_/-}"
ssh-keygen -t ed25519 -f ~/.ssh/${DROPLET_NAME} -P "" -C "${DROPLET_NAME}"
export SSH_PUB="$(cat ~/.ssh/${DROPLET_NAME}.pub)"
export SSH_PRIVATE="$(cat ~/.ssh/${DROPLET_NAME})"
FINGERPRINT="$(ssh-keygen -l -E md5 -f ~/.ssh/${DROPLET_NAME}.pub | awk '{print $2}'| sed 's|MD5:||')"
doctl compute ssh-key create ${DROPLET_NAME} --public-key "$(cat ~/.ssh/${DROPLET_NAME}.pub)"