Вопрос или проблема
Я хочу скопировать файл iso с сервера на свой компьютер, используя rsync
. Я использовал следующую команду, но что-то не так, и я не могу понять, что. Я проверил местоположение файла ключа и оригинального файла.
rsync --progress -avz -e 'ssh -v -i ./.ssh/new_keys node@<ip_address>' node@<ip_address>:~/ubuntu-16.04.1-server-amd64.iso ./Downloads/Ubuntu_Server.iso
Это лог, созданный с помощью параметра -v
.
OpenSSH_7.3p1 Debian-1, OpenSSL 1.0.2h 3 May 2016
debug1: Чтение конфигурационных данных /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config строка 19: Применение опций для *
debug1: Подключение к <ip_address> [<ip_address>] порт 22.
debug1: Соединение установлено.
debug1: файл идентификации ./.ssh/new_keys тип 3
debug1: key_load_public: Нет такого файла или каталога
debug1: файл идентификации ./.ssh/new_keys-cert тип -1
debug1: Включение режима совместимости для протокола 2.0
debug1: Локальная версия строка SSH-2.0-OpenSSH_7.3p1 Debian-1
debug1: Удаленная версия протокола 2.0, удаленная версия программного обеспечения OpenSSH_7.2p2 Ubuntu-4ubuntu2.1
debug1: совпадение: OpenSSH_7.2p2 Ubuntu-4ubuntu2.1 пат OpenSSH* совместимость 0x04000000
debug1: Аутентификация к <ip_address>:22 как 'node'
debug1: SSH2_MSG_KEXINIT отправлено
debug1: SSH2_MSG_KEXINIT получено
debug1: kex: алгоритм: [email protected]
debug1: kex: алгоритм ключа хоста: ecdsa-sha2-nistp256
debug1: kex: шифр сервера->клиенту: [email protected] MAC: <implicit> сжатие: нет
debug1: kex: шифр клиенту->серверу: [email protected] MAC: <implicit> сжатие: нет
debug1: ожидая SSH2_MSG_KEX_ECDH_REPLY
debug1: Ключ хоста сервера: ecdsa-sha2-nistp256 SHA256:jXVkrQn/jcw9yrL/mQEvT0v2aXxRd9WZo7BjiO6i1eU
debug1: Хост '<ip_address>' известен и соответствует ключу хоста ECDSA.
debug1: Найден ключ в /home/papagolf/.ssh/known_hosts:1
debug1: повторная аутентификация после 134217728 блоков
debug1: SSH2_MSG_NEWKEYS отправлено
debug1: ожидая SSH2_MSG_NEWKEYS
debug1: повторная аутентификация после 134217728 блоков
debug1: SSH2_MSG_NEWKEYS получено
debug1: SSH2_MSG_EXT_INFO получено
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug1: SSH2_MSG_SERVICE_ACCEPT получено
debug1: Аутентификации, которые могут продолжаться: publickey
debug1: Следующий метод аутентификации: publickey
debug1: Предложение открытого ключа ECDSA: ./.ssh/new_keys
debug1: Сервер принимает ключ: pkalg ecdsa-sha2-nistp521 blen 172
Введите пароль для ключа './.ssh/new_keys':
debug1: Аутентификация прошла успешно (publickey).
Аутентифицировано к <ip_address> ([<ip_address>]:22).
debug1: канал 0: новый [клиент-сессия]
debug1: Запрос [email protected]
debug1: Вход в интерактивную сессию.
debug1: pledge: сеть
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Отправка окружения.
debug1: Отправка env LANG = en_US.utf8
debug1: Отправка команды: <ip_address> rsync --server --sender -vlogDtprze.iLsfx . ~/ubuntu-16.04.1-server-amd64.iso
debug1: client_input_channel_req: channel 0 rtype статус выхода ответ 0
debug1: client_input_channel_req: channel 0 rtype [email protected] ответ 0
bash: <ip_address>: команда не найдена
debug1: канал 0: свободен: клиент-сессия, nchannels 1
debug1: fd 0 очищает O_NONBLOCK
debug1: fd 1 очищает O_NONBLOCK
Передано: отправлено 2580, получено 2776 байт, за 0.6 секунд
Байты в секунду: отправлено 4231.2, получено 4552.7
debug1: Статус выхода 127
rsync: соединение неожиданно закрыто (0 байт получено до сих пор) [Получатель]
У меня было такое же сообщение об ошибке:
rsync: соединение неожиданно закрыто (0 байт получено до сих пор) [отправитель]
rsync ошибка: ошибка в потоке данных протокола rsync (код 12) в io.c(228) [отправитель=3.2.3]
Проблема: rsync
не был установлен на целевой системе.
После установки rsync
на целевой системе все прошло без ошибок.
Вам нужна только такая команда.
rsync --progress -avz -e 'ssh -v -i ./.ssh/new_keys' node@<ip_address>:~/ubuntu-16.04.1-server-amd64.iso ./Downloads/Ubuntu_Server.iso
Так что убирайте node@<ip_address>
из -e ssh '-v -i ...'
В моем случае такая команда
rsync -vaP -e "ssh -i ~/.ssh/id_rsa_test" ~/source/grafana-test-logs [email protected]:/mnt/test/logs
работала после того, как /mnt/test/logs
получил правильные разрешения, так что мне понадобились chmod
/chown
на удаленном сервере
В моем случае эта ошибка была вызвана тем, что сервер ssh Termux был отключен из-за оптимизации аккумулятора Android. После отключения этих оптимизаций (Бережливый режим
– Без ограничений
; termux-wake-lock
включен, другие приложения закрыты, адаптер питания подключен к устройству) и повторного запуска сервера передача файлов с помощью rsync
может быть продолжена.
У меня была эта проблема (ну, то же сообщение об ошибке, но не та же проблема),
Она исчезла, когда я удалил аргумент --compress
. В этом случае это было бы -z
в -avz
.
Ответ или решение
Ошибка "connection unexpectedly closed" при использовании команды rsync
с различными аргументами может возникать по нескольким причинам, и для их эффективного устранения необходимо внимательно изучить и проанализировать предоставленный вами вывод и контекст использования команды.
1. Понимание команды rsync
Ваш исходный запрос включает команду rsync
для копирования файла образа (ISO) с сервера на локальный компьютер:
rsync --progress -avz -e 'ssh -v -i ./.ssh/new_keys node@<ip_address>' node@<ip_address>:~/ubuntu-16.04.1-server-amd64.iso ./Downloads/Ubuntu_Server.iso
2. Анализ вывода
При выполнении команды rsync
с параметром -v
, {вывод подробной отладки} показывает процесс установки SSH-соединения и последующее выполнение команды rsync на удаленной машине. Однако, на этапе выполнения появляется проблема:
bash: <ip_address>: command not found
Это указывает на то, что система не может найти команду rsync
на удаленной машине, что и приводит к ошибке "connection unexpectedly closed."
3. Причина и решение
Основная причина возникновения этой ошибки заключается в том, что rsync
не установлен на сервере, с которого вы пытаетесь скопировать файл. Это проверено и подтверждено в вашем выводе:
- Проверьте установку
rsync
на удаленной машине, выполнив команду:
ssh -i ./.ssh/new_keys node@<ip_address> 'which rsync'
Если вывод будет пустым, значит, rsync
не установлен. Установите rsync
на удаленной машине:
sudo apt-get install rsync # для Ubuntu/Debian
После установки rsync
повторите команду rsync
.
4. Оптимизация команды
Одним из аспектов, который можно улучшить в вашем варианте команды, является убирание лишних повторов. Например, параметр node@<ip_address>
в строке -e
не требуется, и его можно удалить:
rsync --progress -avz -e 'ssh -v -i ./.ssh/new_keys' node@<ip_address>:~/ubuntu-16.04.1-server-amd64.iso ./Downloads/Ubuntu_Server.iso
5. Другие потенциальные проблемы
-
Проблемы с правами доступа: Если
rsync
установлен, но ошибка сохраняется, возможно, у вас нет прав на чтение файла на сервере или запись в целевую директорию на вашем локальном компьютере. -
Оптимизации батареи: В некоторых случаях, как вы упомянули, использование мобильного SSH-сервера может привести к отключению при оптимизации работы устройства. Убедитесь, что ваше устройство постоянно подключено к источнику питания и что все оптимизации отключены.
-
Сетевые проблемы: Проверьте соединение с сетью. Если у вас возникают задержки или прерывания, они могут вызвать подобные ошибки.
Заключение
Ошибка "connection unexpectedly closed" обычно указывает на проблемы с доступом или конфигурацией, а не на саму команду rsync
. Обратите внимание на наличие rsync
на удаленной машине, проверьте права доступа и учитывайте возможные факторы, влияющие на соединение. После исправления любых проблем команда должна выполняться корректно, и передача файла пройдет успешно.