Могу подключиться по SSH к удаленному серверу, но не могу использовать SCP?

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

Я могу подключиться к удалённому серверу по SSH, используя аутентификацию с открытым ключом и ввод пароля.

Тем не менее, я получаю сообщение о запрете доступа, когда пытаюсь скопировать файл с помощью SCP, используя тот же пароль. Вот мой вывод:

$ scp -v [файл] [пользователь]@[удалённыйсервер.com]:/home/[моя директория]

Выполнение: программа /usr/bin/ssh хост [удалённыйсервер.com], пользователь [пользователь], команда scp -v -t /home/[моя директория]
OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Марта 2009
debug1: Чтение данных конфигурации /home/[моя директория].ssh/config
debug1: Применение параметров для [удалённыйсервер.com]
debug1: Чтение данных конфигурации /etc/ssh/ssh_config
debug1: Применение параметров для *
debug1: Подключение к [удалённыйсервер.com] [[удалённыйсервер.com]] порт 22.
debug1: Соединение установлено.
debug1: файл идентификации /home/[пользователь]/.ssh/aws_corp тип -1
debug1: Удалённая версия протокола 2.0, удалённая версия ПО OpenSSH_5.3p1 Debian-3ubuntu7
debug1: совпадение: OpenSSH_5.3p1 Debian-3ubuntu7 пат OpenSSH*
debug1: Включение режима совместимости для протокола 2.0
debug1: Локальная версия строки SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
debug1: SSH2_MSG_KEXINIT отправлено
debug1: SSH2_MSG_KEXINIT получено
debug1: kex: сервер->клиент aes128-ctr hmac-md5 none
debug1: kex: клиент->сервер aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) отправлено
debug1: ожидание SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT отправлено
debug1: ожидание SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Хост '[удалённыйсервер.com]' известен и совпадает с RSA ключом хоста.
debug1: Найден ключ в /home/[моя директория]/.ssh/known_hosts:12
debug1: ssh_rsa_verify: подпись верна
debug1: SSH2_MSG_NEWKEYS отправлено
debug1: ожидание SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS получено
debug1: SSH2_MSG_SERVICE_REQUEST отправлено
debug1: SSH2_MSG_SERVICE_ACCEPT получено
debug1: Аутентификации, которые могут продолжиться: publickey
debug1: Следующий метод аутентификации: publickey
debug1: Попытка использовать закрытый ключ: /home/[моя директория]/.ssh/aws_corp
debug1: PEM_read_PrivateKey не удалось
debug1: чтение PEM закрытого ключа завершено: тип <неизвестно>
Введите пароль для ключа '/home/[моя директория]/.ssh/aws_corp':

debug1: чтение PEM закрытого ключа завершено: тип RSA
Соединение закрыто [удалённый сервер]
соединение потеряно

Я искал ответы, но не могу найти точно такую же проблему или просто не могу разобраться. В любом случае я буду признателен за любую помощь. Спасибо!

Ваш scp не говорит “доступ запрещён” нигде. Он просто говорит “Соединение закрыто”, что может означать, что на сервере отсутствует команда scp, или она не может быть запущена по какой-то причине.

  • Попробуйте ssh [пользователь]@[удалённыйсервер.com] scp. Если он говорит “использование: scp …”, то scp в порядке. Если говорит “команда не найдена”, то…

  • Если у вас есть административный доступ на удалённом сервере, проверьте журналы там; возможно, даже запустите sshd -rdddp 222 в режиме отладки.

У меня была эта проблема. В моем случае, когда я пытался запустить scp на сервере (в jail chroot), я получал ошибку неизвестного пользователя. Чтобы исправить это:

Обратите внимание на <jail> в коде ниже, это полный путь к файловой системе chrooted jail, которую вы создали для входа в ssh сессии.

sudo cp -vf /usr/bin/strace <jail>/bin
ldd <jail>/bin/strace
sudo cp -vf ...

Скопируйте каждую из отсутствующих библиотек с основной системы в директорию <jail>/lib64

В сеансе chroot jail выполните:

strace scp

Скопируйте библиотеку/библиотеки, которые не удалось найти согласно выводу, в директорию /lib64, используя опцию -vf. В моем случае, мне было необходимо скопировать libnss_compat.so.2

После этого scp в chrooted jail заработал!

У меня была такая же проблема, и я заставил его работать, используя опцию scp -O (буква ‘o’)
scp -O пользователь@удалённый:/<путь/файл> .

Опция -O: “Использовать оригинальный протокол SCP для передачи файлов вместо
протокола SFTP.” На некоторых sshd серверах использование sftp может быть запрещено.

С включённым подробным выводом (scp -v) вы увидите, какой протокол используется для копирования:

debug1: Sending subsystem: sftp   (по умолчанию) 
или 
debug1: Sending command: scp -v -f /<путь>/<файл>   (с -O)

Надеюсь, это поможет.

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

Отвечая на вопрос о том, почему вы можете подключаться к удаленному серверу через SSH, но сталкиваетесь с трудностями при использовании SCP, стоит рассмотреть несколько важных аспектов, которые могут оказать влияние на эту ситуацию.

Причины, по которым SCP может не работать:

  1. Отсутствие команды SCP на сервере:
    Убедитесь, что на удаленном сервере установлена команда SCP. Это можно проверить, подключившись к серверу через SSH и выполнив следующую команду:

    which scp

    Если команда не найдена, возможно, вам потребуется установить ее или использовать другой метод передачи файлов (например, SFTP).

  2. Проблемы с библиотеками в окружении chroot:
    Если вы работаете в окружении chroot, это может вызвать проблемы, так как не все необходимые библиотеки и исполняемые файлы могут быть доступны в этом окружении.
    Для диагностики можно использовать strace:

    sudo cp -vf /usr/bin/strace <jail>/bin
    ldd <jail>/bin/strace

    Это позволит отслеживать, какие библиотеки и файлы требуются и какие отсутствуют.

  3. Использование протокола SFTP вместо SCP:
    Ваша версия SCP может по умолчанию использовать протокол SFTP. Некоторые SSH-серверы не поддерживают SFTP (или не настроены на это). Попробуйте использовать опцию -O, чтобы заставить SCP использовать оригинальный протокол копирования файлов, вместо SFTP:

    scp -O [user]@[remoteserver.com]:/[path/to/file] .

    Это вызовет SCP использовать старый протокол передавая информации, что может помочь решить проблему.

  4. Проблемы с аутентификацией:
    В выводе, который вы предоставили, вы видите сообщение Connection closed by [remote server]. Это может указывать на проблемы с аутентификацией, особенно если вы используете ключи RSA, прошедшие через естество проверки. Убедитесь, что ваш SSH-ключ правильно настроен и добавлен в файл authorized_keys на сервере:

    cat /home/[user]/.ssh/aws_corp.pub | ssh [user]@[remoteserver.com] 'cat >> .ssh/authorized_keys'
  5. Проверка прав доступа:
    Убедитесь, что у вас есть соответствующие права доступа на целевой каталог на удаленном сервере. Вашим пользователям могут не хватать разрешений для записи в указанный каталог. Проверьте это, выполнив:

    ls -ld /home/[my dir]

Рекомендации по диагностике:

  • Проверьте логи на сервере SSH:
    Если у вас есть доступ к логам на удаленном сервере, это может помочь в диагностике проблемы. Логи могут находиться в файле /var/log/auth.log или /var/log/secure.

  • Навигируйте настройки сервера:
    Если вы администратор, вы можете временно запустить SSH-сервер в режиме отладки:

    sudo /usr/sbin/sshd -d
  • Работа с конфигурациями:
    Убедитесь в правильности настроек SSH на сервере, находящихся в файле /etc/ssh/sshd_config, включая параметры Subsystem и разрешения для протокола SCP.

Следуя указанным рекомендациям, вы сможете определить и, возможно, устранить причину, по которой SCP не работает, несмотря на успешные подключения по SSH.

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

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