LINUX.ORG.RU

Как удалить хост из known_hosts по ssh-алиасу

 ,


0

1

Привет,

У меня часто меняется ключ ssh-хоста, и ssh начинает ругаться на возможную MiTM. Я хочу скриптом при каждой смене ключа удалять его из known_hosts.

Удалять хочу не по IP, а по алиасу из ~/.ssh/config.

То есть хочу что-то такое:

$ cat ~/.ssh/known_hosts
10.0.0.1 ecdsa-sha2-nistp256 AAAA......
10.0.0.2 ecdsa-sha2-nistp256 AAAA......
10.0.0.3 ecdsa-sha2-nistp256 AAAA......
$ cat ~/.ssh/config
Host myserver
	HostName 10.0.0.2
	User peterstein
	IdentityFile ~/.ssh/id_rsa__myserver
	IdentitiesOnly yes
	Port 22
$ {ssh-KH-remove-alias} myserver
$ cat ~/.ssh/known_hosts
10.0.0.1 ecdsa-sha2-nistp256 AAAA......
10.0.0.3 ecdsa-sha2-nistp256 AAAA......

На что здесь можно заменить {ssh-KH-remove-alias}?

ssh-keygen -R myserver не работает:

$ssh-keygen -R myserver
Host myserver not found in /home/peterstein/.ssh/known_hosts


Последнее исправление: peterstein (всего исправлений: 1)
Ответ на: комментарий от MaZy

ну проверка ключа хоста — штука полезная же

да и вроде удаление по псевдониму не должно быть чем-то сложнореализуемым

peterstein
() автор топика
Ответ на: комментарий от peterstein

ну проверка ключа хоста — штука полезная же

и ты отпечаток каждый раз проверяшь, если часто меняется?

MaZy ★★★★★
()
Ответ на: комментарий от MaZy

он меняется когда я переустанавливаю ос на хосте. переустанавливать её надо сравнительно часто, и в этот момент я знаю, что он меняется

peterstein
() автор топика
Ответ на: комментарий от peterstein

А разве упомянутый выше StrictHostKeyChecking нельзя прописать в качестве опции для конкретного хоста в ~/.ssh/config?

ssh2 ★★★★★
()
Ответ на: комментарий от ssh2

можно.

но это полезная штука которую я не хочу отключать.

я знаю когда меняется ключ, и в этот момент надо (полу-)автоматически стереть старый. Если же ключ меняется в любое другое время, то это проблема о которой я хочу знать

peterstein
() автор топика

Перенести соответствие имён хостов из ~/.ssh/config в /etc/hosts и $HOSTALIASES.

Elyas ★★★★★
()

ssh-alias2host.awk

#!/bin/awk -f
BEGIN {
        ARGV[ARGC++]=ENVIRON["HOME"]"/.ssh/config";
        IGNORECASE=1;
        EXIT=1;
}
/^Host\>/ {
        isalias = $2==alias;
        next;
}
isalias && ( $1 ~ /^HostName$/ ) {
        print $2;
        EXIT=0;
        exit;
}
END {
        exit EXIT;
}

Запускать:

./ssh-alias2host.awk alias=myserver
ssh-keygen -R $(./ssh-alias2host.awk alias=myserver)

Bugs:

Синтаксис «key=value» не поддерживается. Только «key value».

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 2)

ssh-keygen -R myserver не работает:

ssh-keygen -R `dig +short myserver | tail -n1`

p.s.: не, не правильно задумку понял.

altwazar ★★★★
()
Последнее исправление: altwazar (всего исправлений: 2)

Костыльно, но работает:

#!/bin/bash
#пример: ./sshremove "myserver"
ssh-keygen -R `awk '
    $1 == "Host" {
        host = $2;
        next;
    }
    $1 == "HostName" { 
        $1 = "";
        sub( /^[[:space:]]*/, "" );
        sub( /^=/, "" );
        printf "%s;%s\n", host, $0;
    }
' ~/.ssh/config | grep $1 | awk -F ";" '{print $2}'`
altwazar ★★★★
()
Последнее исправление: altwazar (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.