lrzsz не работает на моем Mac OS X

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

Когда я использовал secureCRT в Windows, я часто использовал sz и rz для передачи файлов между моим сервером Linux и клиентской машиной. Но я не могу использовать этот способ в iterm2 на MacOS X. Пакет lrzsz установлен на моем сервере Linux (ubuntu 13.04)
Но,

benjamin@my-ubuntu-13-04:~$ rz
�z ждёт получения.**B0100000023be50

Терминальный клиент повис. В чем проблема?

После команды rz соединение на самом деле не зависает – команда rz отправила сообщение о запуске протокола ZMODEM вашему iterm2 и ждёт, когда он даст правильный ответ ZMODEM. К сожалению, iterm2 не поддерживает протокол ZMODEM, и поэтому команда rz на удалённой стороне будет ждать, пока не истечёт время ожидания.

Команды rz и sz используют протокол ZMODEM в своих стандартных потоках ввода/вывода. Это полезно на удаленной стороне, но на локальной стороне вам понадобилась бы программа терминального эмулятора, которая могла бы либо поддерживать ZMODEM нативно, либо перенаправлять входящие данные в другую программу и вывод этой программы обратно на удалённый сервер; это позволило бы вам также использовать эквиваленты sz и rz локально на вашем Mac для получения поддержки ZMODEM.

В принципе, протокол ZMODEM можно использовать на любом терминальном соединении. Но протокол ZMODEM почти полностью устарел, потому что с соединениями SSH вы можете использовать что-то лучшее: командная строка MacOS включает команду OpenSSH scp, которая может использоваться для передачи файлов по протоколу SSH.

Вы можете как «отправить» файлы на удалённый сервер:

scp имя_файла_на_локальной_машине имя_пользователя@имя_удалённого_хоста:удалённый_каталог_или_имя_файла

… так и «забрать» файлы с удалённого сервера, если вы знаете имя удалённого файла:

scp имя_пользователя@имя_удалённого_хоста:удалённый_каталог/удалённый_файл локальный_каталог_или_имя_файла

Если локальные и удалённые имена пользователей совпадают, вы можете опустить часть имя_пользователя@. Имена удалённых каталогов могут быть как абсолютными (начинающимися с /), так и относительными по отношению к вашему домашнему каталогу на удалённом хосте. Если вы добавите опцию -r, вы можете копировать целые каталоги.

В отличие от ZMODEM, вам не нужно активное терминальное соединение с удалённым хостом для передачи файлов: scp создаст своё собственное SSH-соединение для передачи файлов. Если вы также используете аутентификацию по SSH-ключу, чтобы избежать необходимости вручную вводить пароли, это становится приятным способом автоматизировать передачу файлов.

Ответ на ваш вопрос заключается в использовании клиента, который понимает протоколы SZ и RZ.

Один из таких клиентов, который отлично работает на Mac – это SecureCRT. Я использую его каждый день – он намного лучше встроенной оболочки OSX (да, он поддерживает локальную оболочку). У меня нет проблем с отправкой и получением данных с удалённых Macs (по ssh к их обычной оболочке) и Linux. Возможно, другие эмуляторы ssh также поддерживают rz/sz, но мне нравится мой, поэтому я не искал других, а другие ответы на этот пост также не дают вам ответа (scp – это не sz) – так что по крайней мере мой ответ является реальным актуальным ответом, и вы уже знаете это программное обеспечение.

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

Проблема, с которой вы столкнулись, заключается в том, что команда rz отправляет сообщение о начале протокола ZMODEM на ваш терминал iTerm2. При этом терминал не поддерживает протокол ZMODEM, что и приводит к зависанию вашей сессии. Давайте рассмотрим решение этой проблемы и возможные альтернативы.

Решение

  1. Установка lrzsz на Mac:
    Убедитесь, что пакет lrzsz установлен на вашем Mac. Вы можете установить его с помощью Homebrew, выполнив следующую команду в терминале:

    brew install lrzsz
  2. Использование iTerm2 с поддержкой ZMODEM:
    Чтобы iTerm2 мог работать с протоколом ZMODEM, вам необходимо установить расширение, которое его поддерживает. Вы можете использовать модуль, доступный по адресу robberphex/iTerm2-zmodem. Для этого выполните следующие шаги:

    • Скачайте и установите расширение.
    • Настройте iTerm2 для автоматической обработки файлов, получаемых через rz и отправляемых через sz.
  3. Дополнительная информация:
    Если вы не хотите настраивать ZMODEM или столкнулись с проблемами, можете использовать более надежные и современные методы передачи файлов, такие как SCP. Это удобно и не требует наличия активной терминальной сессии:

    • Для отправки файлов на удаленный сервер:

      scp local-filename username@remote-hostname:remote-directory-or-filename
    • Для получения файлов с удаленного сервера:

      scp username@remote-hostname:remote-directory/remote-file local-directory-or-filename

    Если имена пользователей совпадают, вы можете опустить часть username@.

Вывод

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

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

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

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