1

Я установил образ сервера Ubuntu на VirtualBox. Далее я настроил переадресацию портов 2222 => 22.

Когда я использую следующую команду, все работает нормально:

ssh -p 2222 java@127.0.0.1

Пароль запрашивается, и я могу войти в Ubuntu на VBox.

Однако, когда я использую:

ssh -p 2222 java@localhost

я получаю следующее

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @ ВНИМАНИЕ: ДИСТАНЦИОННАЯ ИДЕНТИФИКАЦИЯ ХОЗЯИНА ИЗМЕНИЛАСЬ! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ ВОЗМОЖНО, ЧТО-то кто-то делает противное! Кто-то может подслушивать вас прямо сейчас (атака «человек посередине»)! Также возможно, что ключ хоста был только что изменен. Отпечаток ключа RSA, отправленный удаленным хостом, ......... Пожалуйста, обратитесь к системному администратору. Добавьте правильный ключ хоста в /Users/cristian/.ssh/known_hosts, чтобы избавиться от этого сообщения. Ключ RSA для оскорбления в /Users/cristian/.ssh/known_hosts:2 Ключ хоста RSA для [localhost]: 2222 изменился, и вы запросили строгую проверку. Проверка ключа хоста не удалась.

Конечно

ping localhost PING localhost (127.0.0.1): 56 байтов данных 64 байта из 127.0.0.1: icmp_seq = 0 ttl = 64 время = 0,038 мс

Есть идеи почему?

Спасибо

2 ответа2

1

Мой обходной путь для локальных хостов, которые часто переустанавливаются, - настроить ssh так, чтобы локальные IP-адреса использовали /dev /null для файла hosts (опасно, будьте осторожны).

0

Просто для повторения проблемы (чтобы прояснить некоторые вопросы в комментариях): Оригинальный вопрос гласит, что NAT используется, поэтому и хост, на котором запущена виртуальная машина, и сама виртуальная машина идентифицируются 127.0.0.1, иначе как localhost. Таким образом, с хоста можно войти в виртуальную машину, используя переадресацию портов (как указано), сопоставив порт 2222 хоста с портом 22 виртуальной машины. Если у нас есть несколько виртуальных машин, которые мы запускаем, и все с одинаковой конфигурацией сети, для клиента ssh все равно, что цель меняется (потому что это так).

Итак, к первоначальному вопросу, для решения данной проблемы: вместо того, чтобы сконфигурировать ssh для использования /dev/null для файла hosts (что можно сделать для каждого хоста в ~/.ssh/config , специально для localhost), можно просто дать виртуальным машинам уникальное имя в /etc/hosts и затем обращаться к ним, используя имя хоста, а не 127.0.0.1 или localhost. Следовательно, каждая виртуальная машина будет иметь свое собственное имя в файле известного хоста хоста. Например,

$ sudo vim /etc/hosts
...
127.0.0.1   localhost my_real_hostname
127.0.0.1   my_vm1
127.0.0.1   my_vm2
...

Новые виртуальные машины могут быть добавлены по мере необходимости (либо добавление виртуальных машин в одну строку, либо в отдельных строках, что может облегчить написание сценариев добавления / удаления с помощью sed (упражнение, оставленное читателю)).

Затем для входа в виртуальную машину используйте новое имя хоста, которое на самом деле просто отображается на 127.0.0.1 (опять же, при условии, что переадресация портов настроена в расширенных сетевых настройках VirtualBox виртуальной машины),

$ ssh -p 2222 vm_user@my_vm2
The authenticity of host '[my_vm2]:2222 ([127.0.0.1]:2222)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[my_vm2]:2222' to the list of known hosts.

И удалить это,

$ ssh-keygen -R '[my_vm2]:2222'
# Host [my_vm2]:2222 found: line 16
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Обратите внимание, что то же самое можно сделать (несколько раз) с локальным хостом, который вызывал исходную проблему,

$ ssh-keygen -R '[localhost]:2222'
# Host [localhost]:2222 found: line 16
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .