У меня две машины за брандмауэром, а порты 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
и т.п.