Назад | Перейти на главную страницу

Идемпотентно добавить ключ хоста ssh для имени сервера в `known_hosts`?

ssh-keygen -R $HOSTNAME может удалить ключ (ключи) хоста ssh из своего known_hosts. Могу ли я добавить конкретный ключ хоста (для имени хоста / ip) в known_hosts идемпотентным образом?

Я хочу встроить ssh'ing в сервер. Это может быть запущено кем-то, кто раньше не подключался к этому серверу по ssh, и, следовательно, ключ хоста сервера не будет в known_hosts файл, поэтому им будет предложено принять его. Я бы хотел убрать этот шаг, чтобы все было налажено. Как я могу это сделать?

ssh -o StrictHostKeyChecking=no … отключил эту безопасность, у которой есть свои недостатки. ssh-keyscan $HOSTNAME > ~/.ssh/known_hosts будет работать, но known_hosts файл будет постоянно расти и обновит файл с ток ключ хоста. Есть ли способ сделать это идемпотентнодля фиксированного, определенного сочетания имени сервера и ключа хоста? т.е. «Если у вас нет $ HOST_KEY для $ HOSTNAME, добавьте его в свой known_hosts»?

Этот сценарий будет работать в Ubuntu 18.04 с клиентом OpenSSH v7.6.

Ты можешь использовать ssh-keygen чтобы проверить, есть ли known_hosts файл содержит записи для определенного хоста, например:

lacek@Teloth:~$ ssh-keygen -f ~/.ssh/known_hosts -F 192.168.153.254
# Host 192.168.153.254 found: line 18 
192.168.153.254 ssh-rsa AAAAB3Nza.....

Вы можете использовать это, чтобы проверить наличие ключа хоста и добавить его, если он не найден, примерно так:

#!/bin/bash

HOSTNAME=host.to.ssh.into
KNOWNHOSTS=~/.ssh/known_hosts

ssh-keygen -F $HOSTNAME -f $KNOWNHOSTS | grep -q found || ssh-keyscan $HOSTNAME >>$KNOWNHOSTS 2>/dev/null