в командной строке ssh укажите отпечаток ключа хоста сервера

15

С помощью sshкомандной строки (OpenSSH) я могу указать отпечаток ключа хоста сервера?

Это возможно с помощью winscp.com (например) -hostkey="ssh-rsa 2048 AA:BB:CC...etc

Я прочитал справочную страницу пару раз, извиняюсь, если пропустил очевидное.

Я не хочу просто автоматически принимать ключ хоста, и я не хочу требовать от пользователя обновления их known_hosts, а скорее указать ключ хоста в некоторой форме в командной строке.

пайо
источник
-o UserKnownHostsFile может работать с временным файлом.
Payo

Ответы:

16

В OpenSSH нет опции командной строки для передачи отпечатка ключа хоста.

Хотя вы можете использовать временный файл (в том же формате, что и known_hosts) и sshиспользовать его, используя -o UserKnownHostsFile:

ssh -o "UserKnownHostsFile my_temp_known_host" host.example.com

См. ssh(Для -o) и ssh_config(для UserKnownHostsFile) справочных страниц.


Вы также можете рассмотреть возможность использования StrictHostKeyChecking yes.


Как указано в разделе «Автоматически принимать отпечаток ключа rsa из командной строки» , вы можете написать небольшой скрипт, который позволит вам добиться этого:

#!/bin/bash

TEMPFILE=$(mktemp)
echo "$1" > $TEMPFILE

ssh -o "UserKnownHostsFile $TEMPFILE" ${@:2}

rm $TEMPFILE

Если вы вызываете скрипт ssh_known_host, вы можете использовать его, передавая ключ в качестве первого аргумента:

ssh_known_host 'github.com ssh-dss AAAAB3NzaC1kc3MAAACBANGFW2P9xlGU3zWrymJgI/lKo//ZW2WfVtmbsUZJ5uyKArtlQOT2+WRhcg4979aFxgKdcsqAYW3/LS1T2km3jYW/vr4Uzn+dXWODVk5VlUiZ1HFOHf6s6ITcZvjvdbp6ZbpM+DuJT7Bw+h5Fx8Qt8I16oCZYmAPJRtu46o9C2zk1AAAAFQC4gdFGcSbp5Gr0Wd5Ay/jtcldMewAAAIATTgn4sY4Nem/FQE+XJlyUQptPWMem5fwOcWtSXiTKaaN0lkk2p2snz+EJvAGXGq9dTSWHyLJSM2W6ZdQDqWJ1k+cL8CARAqL+UMwF84CR0m3hj+wtVGD/J4G5kW2DBAf4/bqzP4469lT+dF2FRQ2L9JKXrCWcnhMtJUvua8dvnwAAAIB6C4nQfAA7x8oLta6tT+oCk2WQcydNsyugE8vLrHlogoWEicla6cWPk7oXSspbzUcfkjN3Qa6e74PhRkc7JdSdAlFzU3m7LMkXo1MHgkqNX8glxWNVqBSc0YRdbFdTkL0C6gtpklilhvuHQCdbgB3LBAikcRkDp+FCVkUgPC/7Rw==' git@github.com
Мартин Прикрыл
источник
Любая подсказка, почему -o UserKnownHostsFile=<(echo "hostname ssh-rsa ...")не работает?
kasperd
2
@kasperd Возможно, потому что созданный fd <()может быть прочитан только один раз, в то время как sshчитает файл повторно.
Мартин Прикрыл
Спасибо за ваш ответ и совет, используя StrictHostKeyChecking. Это решение будет работать для меня.
Payo
1
При редактировании я забыл упомянуть, что решение для сценариев позволяет избежать атаки «человек посередине»
RDP