Ошибка аутентификации при попытке скопировать файл с Linux на Windows с помощью SCP.

Вопрос или проблема

Я пытаюсь использовать команду SCP для копирования файла с Linux на Windows, ошибка, которую я получаю, практически идентична этой проблеме; https://stackoverflow.com/questions/61721025/pam-unix-sshd-authentication-failure-even-though-the-login-works.

И вот команда SCP, которую я использую в Linux: scp /volume1/homes/%userName%/imageConvert/x.png %username%@Ipv4Address:/C:/8/, чтобы скопировать изображение x.png в папку C:\8 на Windows.

Я исследовал подобные проблемы и выяснил, что это может быть брандмауэр, блокирующий SSH/SCP. Я проверил Windows Defender Advanced Security, если удаленный хост блокируется, и не вижу ничего, что показывало бы блокировку?

Насколько я понимаю, вы используете SCP из bash в систему Windows. Из bash shell я вижу, что вы использовали переменные Windows. В этом случае bash не может расширять эти ПЕРЕМЕННЫЕ. Например, ваша команда bash содержит переменную Windows %userName%, и bash не может расширять эту переменную. Вот быстрый тест.

Git bash, вы не получите никакого вывода

$ echo %userName%

CMD или PowerShell, вы получите вывод

> echo %userName%

Чтобы решить вашу проблему, просто используйте абсолютные пути (расширенные значения) или используйте ПЕРЕМЕННЫЕ, которые bash поймет и интерпретирует.

Ответ или решение

Ошибка "Authentication Failed" при использовании команды SCP для копирования файлов с Linux на Windows может быть вызвана несколькими причинами. Ниже представлены теоретическая основа, примеры и применение решения для данной проблемы в профессиональном контексте.

Теория

SCP (Secure Copy Protocol) — это протокол для безопасного копирования файлов между хостами через сеть с использованием SSH (Secure Shell) для безопасности данных. Он широко используется для копирования файлов между серверами Linux, но также может применяться для копирования данных на Windows-системы, при наличии на последних SSH-сервера, например, OpenSSH.

Для успешного копирования файлов необходимы следующие условия:

  1. SSH-сервер на Windows: На целевой Windows-машине должен быть установлен и запущен SSH-сервер. Обычно это OpenSSH, который входит в стандартный набор инструментов для Windows 10 и более новых версий.

  2. Корректная аутентификация: Должны быть предоставлены корректные учетные данные (логин и пароль или SSH-ключи) для доступа к Windows-системе.

  3. Адресация и права доступа: Должен быть указан правильный IP-адрес или имя хоста целевой машины, а также файл должен быть копируемым в папку, для которой у пользователя есть права на запись.

  4. Корректный синтаксис команд: Команда SCP должна быть синтаксически корректной, с использованием доступных переменных окружения.

  5. Настройки брандмауэра: Брандмауэр на Windows может блокировать SSH-трафик, поэтому необходимо убедиться, что порт 22 (по умолчанию для SSH) открыт для входящих подключений.

Примеры

  1. SSH-сервер на Windows: Чтобы убедиться, что SSH-сервер установлен на Windows, выполните следующую команду в PowerShell:

    Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

    Результаты команды должны показать, что OpenSSH Server установлен и запущен. Если нет, то его можно установить через Optional Features в Settings.

  2. Синтаксис SCP Команды: Пример корректной команды в bash:

    scp /volume1/homes/username/imageConvert/x.png user@ipv4address:/C:/8/

    В этой команде username — это учетная запись на Windows, а ipv4address — это IP-адрес Windows-машины в сети. Обратите внимание на корректное использование переменных и абсолютных путей.

  3. Брандмауэр: Проверьте, открыт ли порт 22 на Windows с использованием команды:

    netsh advfirewall firewall show rule name=all | Select-String -Pattern 'OpenSSH'

Применение

  1. Исправление синтаксиса и переменных: Убедитесь, что в вашей команде SCP используются корректные переменные. Поскольку вы работаете в bash, Windows-переменные %userName% не будут распознаваться. Используйте соответствующие переменные bash, такие как $USER в Linux, и указывайте их непосредственно в Linux-консоли до запуска команды SCP.

  2. Проверка настроек SSH-сервера на Windows: Убедитесь, что ваш Windows SSH сервер активен. Зайдите в панель управления и убедитесь, что служба "OpenSSH SSH Server" работает (меню "Services").

  3. Открытие порта на брандмауэре: Используйте PowerShell или графический интерфейс Windows Defender для открытия порта 22. В PowerShell это можно сделать следующей командой:

    New-NetFirewallRule -Name "OpenSSH" -DisplayName "OpenSSH SSH" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
  4. Тестирование аутентификации: Проверьте доступ к вашей Windows-машине с Linux используя SSH для убедительности в том, что данные аутентификации корректные:

    ssh user@ipv4address

    Если вход успешный, проблема скорее всего в специфике SCP синтаксиса.

  5. Дополнительные параметры SCP: Используйте опцию -v для сканирования возможных ошибок и получения подробной информации о процессе подключения:

    scp -v /volume1/homes/username/imageConvert/x.png user@ipv4address:/C:/8/

Эти шаги помогут устранить неполадки и правильно настроить SCP для успешного копирования файла с Linux на Windows. Помните, что каждый элемент, начиная от правильной конфигурации SSH-сервера на Windows до настройки переменных в bash, важно учесть для решения проблемы.

Оцените материал
Добавить комментарий

Капча загружается...