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

Как сделать так, чтобы ssh сопоставлял known_hosts с host / ip: port, а не только с host / ip?

У меня две машины за брандмауэром, а порты ssh перенаправлены на 2201 и 2202.

Когда я

ssh host -p 2201  

он спрашивает, доверяю ли я машине, я говорю да, он добавляется в ~ / .ssh / known_hosts

Затем я

ssh host -p 2202  

Это не позволяет мне, потому что для этого IP уже есть запись в ~/.ssh/known_host:1 (файл был пуст, когда я начал, поэтому строка 1 - это строка, добавленная предыдущим запуском ssh).

Это происходит в CentOS 5.4.

В других дистрибутивах (я пробовал Arch) кажется, что ssh также сопоставляет known_hosts с портами, поэтому я могу без проблем иметь несколько отпечатков пальцев для нескольких портов на одном хосте / IP.

Как я могу добиться такого же поведения для CentOS?

Я ничего не мог найти в man ssh_config (или, по крайней мере, без отключения проверки отпечатков пальцев).

Я нашел временное решение. Если known_hosts В файле есть более одной записи для одного и того же IP-адреса, он проверит их все, прежде чем придет к выводу, что что-то не так. Но мне бы очень не хотелось, чтобы это было решением.

~/.ssh/config:

Host foohost-2201
    Hostname foohost.domain.tld
    # This should comply with the format used in OpenSSH 5.
    HostkeyAlias "[foohost.domain.tld]:2201"
    User username
    Port 2201

А если серьезно, то апгрейд.

Версия OpenSSH, поставляемая с CentOS 5, не поддерживает номера портов в known_hosts. Вам нужно будет собрать и установить более новую версию, если вы хотите, чтобы это работало.

Используйте это, если ваш клиент openssh не поддерживает записи на основе хоста + порта:

Директива GlobalKnownHostsFile может быть неправильно использованный чтобы указать на разные файлы для каждой из ваших двух машин с брандмауэром (здесь Алиса и Боб). Однако эти два файла должны быть заранее подготовлены с правильными ключами хоста от alice или bob, поскольку они не записываются при приеме неизвестных ключей.

Настроить это не очень весело, но как только это будет сделано, все заработает.

Моим предыдущим обходным путем до этого был «StrictHostKeyChecking no», который не позволяет ssh-agent пересылать ключи или перенаправлять порты (заблокированные openssh при использовании).

До недавнего времени мой .ssh / config выглядел так:

Host hoppingstation
        Hostname loginhost.somewhere.net
        User me
        LocalForward 2201 alice.somewhere.net:22
        LocalForward 2202 bob.somewhere.net:22
Host alice
        Hostname localhost
        Port 2201
        User root
        ForwardAgent yes
        GlobalKnownHostsFile /home/me/.ssh/known_hosts_alice
Host bob
        Hostname localhost
        Port 2202
        User root
        ForwardAgent yes
        GlobalKnownHostsFile /home/me/.ssh/known_hosts_bob

мое решение; добавить подробную информацию о хосте в ~/.ssh/config:

Host <someidentifier>
    Hostname ip.add.re.ss
    StrictHostKeyChecking no
    User username
    Port 2201

Host <someotheridentifier>
    Hostname ip.add.re.ss
    StrictHostKeyChecking no
    User username
    Port 2202

тогда ты можешь сделать ssh someidentifier даже не поставив -p и т.п.