Что означает ошибка «Remote Host Identification has changed», которую я получаю при попытке скопировать файл с локального компьютера на сервер?

Здравствуйте. 

Ранее я успешно использовал SSH для копирования файлов между сервером и локальной машиной, но вчера возникла проблема с копированием. Я по-прежнему могу подключаться к серверу по SSH, однако получаю ошибку при попытке скопировать файлы:

<pre><code>@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
....
Failed to transfer folder '/путь'. Unknown message with code "Remote Host Identification has changed".</code></pre>

В интернете я нашел несколько рекомендаций, однако они не решили проблему:

1) Удалить fingerprint для проблемного IP-адреса, но его нет в .ssh/known_hosts.
2) Добавить в <b>/etc/ssh/ssh_config</b> следующие строки: 
<pre><code>PubkeyAcceptedAlgorithms +ssh-rsa HostkeyAlgorithms +ssh-rsa</code></pre>
Однако это тоже не помогло.

Можете подсказать, как можно исправить эту проблему?
  • 4 апреля 2025 г. 11:35
Ответы на вопрос 3
Ошибка «Remote Host Identification has changed» (Идентификация удаленного хоста изменилась) возникает, когда ключ хоста сервера изменился по сравнению с тем, который был сохранен в вашем файле `~/.ssh/known_hosts`. Это может быть вызвано несколькими причинами:

1. **Ключ хоста сервера был изменен**: Это может произойти, если сервер был переустановлен или изменён, или если сервер используется другой хост с тем же IP-адресом.

2. **Атака "человек посередине" (MITM)**: Это менее вероятный сценарий, но потенциально более опасный. По сути, это означает, что кто-то пытается подменить ваше SSH-соединение.

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

### 1. Удалите старую запись из `known_hosts`
Чтобы удалить запись хоста из файла `known_hosts`, вы можете использовать команду `ssh-keygen`:

```bash
ssh-keygen -R [IP-адрес_или_домен]
```

Либо вы можете вручную открыть файл `~/.ssh/known_hosts`, найти строку с ключом сервера и удалить её.

### 2. Подтвердите новый ключ
После удаления старого ключа попробуйте подключиться к серверу снова:

```bash
ssh [пользователь]@[IP-адрес_или_домен]
```

При этом SSH должен запросить подтверждение нового ключа. Убедитесь, что вы проверяете ключ с администратором сервера, чтобы убедиться, что это безопасно, прежде чем соглашаться.

### 3. Проверьте конфигурацию SSH
Убедитесь, что вы не используете неправильные настройки в файле конфигурации `/etc/ssh/ssh_config` или `~/.ssh/config`. Обычно в большинстве случаев изменения в этих файлах не нужны для устранения данной проблемы, но стоит убедиться, что они корректны.

### 4. Сообщите администратору сервера
Если вы не уверены, почему ключ изменился, лучше всего связаться с администратором сервера или поддержкой хостинга, чтобы выяснить причину изменения ключа.

Если вы следовали всем шагам и ошибка не устранилась, попробуйте глубже исследовать логи SSH (обычно находятся в `/var/log/auth.log` на сервере) или используйте флаг `-v` (или `-vvv`) при подключении по SSH для получения более детальной информации о процессе соединения:

```bash
ssh -v [пользователь]@[IP-адрес_или_домен]
```

Это поможет вам увидеть, где именно возникает проблема.
Разные протоколы шифрования используются по умолчанию на разных серверах. На каком-то софт свежее и потому в конфигах прописаны более свежие протоколы (например, ED25519). При этом он раньше подключался со старым протоколом (например, ECDSA) и запомнил отпечаток. Для нового протокола отпечаток другой. Он видит несоответствие и ругается. А другой сервер продолжает использовать старый протол и ему всё норм.
ошибка REMOTE HOST IDENTIFICATION HAS CHANGED! связана с тем, что фингерпринт сервера сменился, а SSH (или SCP/SFTP) думает, что это может быть MITM-атака
Похожие вопросы