Вопрос или проблема
Когда я использовал 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-ключу, чтобы избежать необходимости вручную вводить пароли, это становится приятным способом автоматизировать передачу файлов.
- Ключевой момент
- на Mac
- установите
lrzsz
brew install lrzsz
- добавьте iTerm2 для поддержки
Z-Modem
- ссылка: robberphex/iTerm2-zmodem
- установите
- на Mac
- Детали
Ответ на ваш вопрос заключается в использовании клиента, который понимает протоколы SZ и RZ.
Один из таких клиентов, который отлично работает на Mac – это SecureCRT. Я использую его каждый день – он намного лучше встроенной оболочки OSX (да, он поддерживает локальную оболочку). У меня нет проблем с отправкой и получением данных с удалённых Macs (по ssh к их обычной оболочке) и Linux. Возможно, другие эмуляторы ssh также поддерживают rz/sz, но мне нравится мой, поэтому я не искал других, а другие ответы на этот пост также не дают вам ответа (scp – это не sz) – так что по крайней мере мой ответ является реальным актуальным ответом, и вы уже знаете это программное обеспечение.
Ответ или решение
Проблема, с которой вы столкнулись, заключается в том, что команда rz
отправляет сообщение о начале протокола ZMODEM на ваш терминал iTerm2
. При этом терминал не поддерживает протокол ZMODEM, что и приводит к зависанию вашей сессии. Давайте рассмотрим решение этой проблемы и возможные альтернативы.
Решение
-
Установка lrzsz на Mac:
Убедитесь, что пакетlrzsz
установлен на вашем Mac. Вы можете установить его с помощью Homebrew, выполнив следующую команду в терминале:brew install lrzsz
-
Использование iTerm2 с поддержкой ZMODEM:
Чтобы iTerm2 мог работать с протоколом ZMODEM, вам необходимо установить расширение, которое его поддерживает. Вы можете использовать модуль, доступный по адресу robberphex/iTerm2-zmodem. Для этого выполните следующие шаги:- Скачайте и установите расширение.
- Настройте
iTerm2
для автоматической обработки файлов, получаемых черезrz
и отправляемых черезsz
.
-
Дополнительная информация:
Если вы не хотите настраивать 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 для упрощения процесса передачи файлов, так как это более современный и безопасный метод.