it-swarm-ru.tech

Скопируйте файл обратно в локальную систему с помощью ssh

Если я вошел в систему через SSH, есть ли способ скопировать файл обратно в мою локальную систему без запуска другого терминала или сеанса экрана и выполнения scp или чего-то подобного или без выполнения SSH из удаленной системы обратно в локальная система?

271
Shawn J. Goff

Мастер связи

Это проще всего, если вы планируете заранее.

Откройте мастер-соединение в первый раз. Для последующих соединений маршрутизируйте подчиненные соединения через существующее главное соединение. В вашей ~/.ssh/config , настройте совместное использование соединения так, чтобы оно происходило автоматически:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Если вы начнете сеанс ssh с тем же пользователем (пользователь, порт, компьютер), что и с существующим соединением, второй сеанс будет туннелироваться поверх первого. Установка второго соединения не требует новой аутентификации и выполняется очень быстро.

Таким образом, пока у вас есть активное соединение, вы можете быстро:

Forwarding

На существующем соединении вы можете установить обратный туннель SSH. В командной строке ssh создайте удаленную пересылку, передав -R 22042:localhost:22 где 22042 - это случайно выбранный номер, который отличается от любого другого номера порта на удаленном компьютере. Затем ssh -p 22042 localhost на удаленном компьютере соединяет вас обратно с исходным компьютером; ты можешь использовать scp -P 22042 foo localhost: для копирования файлов.

Вы можете автоматизировать это дальше с помощью RemoteForward 22042 localhost:22. Проблема в том, что если вы подключаетесь к одному и тому же компьютеру с несколькими экземплярами ssh или если кто-то другой использует порт, вы не получите переадресацию.

Если вы не включили удаленную пересылку с самого начала, вы можете сделать это в существующем сеансе ssh. Тип Enter ~C Enter -R 22042:localhost:22 Enter, См. "Escape-символы" в руководстве для получения дополнительной информации.

Также есть некоторая интересная информация в эта ветка Ошибка сервера .

Копировать вставить

Если файл небольшой, вы можете напечатать его и скопировать и вставить из вывода терминала. Если файл содержит непечатаемые символы, используйте кодировку, например base64 .

 remote.example.net $ base64 <myfile 
  (скопировать вывод) 
 local.example.net $ base64 -d> myfile 
  (вставьте содержимое буфера обмена) Ctrl+D

Удобнее, если у вас активна переадресация X, скопируйте файл на удаленный компьютер и вставьте его локально. Вы можете передавать данные в и из xclip или xsel . Если вы хотите сохранить имя файла и метаданные, скопируйте и вставьте архив.

remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -
144

Другим (ИМО) простым способом будет:

# to remote Host
cat localfile.conf | ssh [email protected] 'cat -> /tmp/remotefile.conf'

# from remote Host
ssh [email protected] 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

Или, если вы предпочитаете что-то похожее на GUI, попробуйте Midnight Commander . Они вызывают функцию Shell-Link. Большинство дистрибутивов имеют em в своих системах пакетов как mc.

75
Florian Fida

SSH поддерживает несколько команд через escape-символ (~ по умолчанию):

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

$ ~C
ssh> help
Commands:
      -L[bind_address:]port:Host:hostport    Request local forward
      -R[bind_address:]port:Host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward
      !args                                  Execute local command

!args кажется наиболее близким к тому, что вы хотите. Обратите внимание, что вам нужно включить PermitLocalCommand в вашем /etc/ssh_config файл в порядке для ~C команды для работы (см. man ssh_config).

Вы можете повторно использовать тот же сеанс ssh, если вы установили ControlMaster в ssh_config. Если вы делаете это:

$ ~C
ssh> !scp file [email protected]:

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

54
Corey Henderson

Это все очень сложные методы.
Вы можете смонтировать удаленную файловую систему на локальном компьютере с помощью sshfs:

mkdir -p /mnt/sshfs

[email protected]:~# sshfs 192.168.1.2:/ /mnt/sshfs
[email protected]:~# umount /mnt/sshfs

Затем вы можете скопировать и вставить файл с помощью nautilus, gnome, konqueror, dolphin, bash или чего-либо еще.

38
Quandary
  • Используйте ssh-xfer , модифицированный ssh-agent, который эффективно перегружает существующий боковой канал ssh для передачи файлов.
  • Используйте zssh , что эффективно zmodem над ssh. Если вы когда-либо использовали rzsz, это покажется вам очень знакомым.
  • Обеспечить регресс (-R, для удаленного в локальный) или вперед (-L, для локальных-удаленных) портов для передачи файлов, если у вас есть какой-нибудь демон передачи файлов, прослушивающий на другом конце.

Но ничего из этого действительно не нужно, ИМО. Протокол SSH поддерживает несколько каналов в одном соединении, а клиент OpenSSH поддерживает мультиплексирование. Предполагая, что у вас есть ControlMaster и ​​ControlPathнастройка (ControlPersist тоже полезно),

# первое соединение
 $ ssh remote 
 
 # будет мультиплексировать через то же соединение, что и исходный ssh
 $ sftp remote 
15
ephemient

Еще более простой подход: откройте Filezilla (или ваш любимый ftp-браузер), откройте ssh-соединение с тем же сайтом, найдите файл и перетащите его в локальную файловую структуру. Если вы новичок в Filezilla, воспользуйтесь функцией "менеджер сайтов", чтобы быстро подключиться в следующий раз.

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

9
Larry Jones

То, что я нашел лучшим и наиболее эффективным решением, это использовать xclip-copyfile а также xclip-pastefile.

На сервере вы используете xclip-copyfile для копирования одного или нескольких файлов. Эти файлы затем доступны на вашем локальном сервере. Там вы можете использовать xclip-pastefile.

Это обходит необходимость использовать scp или иметь локальный ssh-сервер. Я использую это с Cygwin, например. Единственная проблема заключается в том, что для этого требуется установить xclip, если у вас его еще нет. О, и это работает с двоичными файлами тоже.

8
Robert

Одна из многих причин, по которым мы используем SecureCRT - несмотря на то, что предпочитаем программное обеспечение с открытым исходным кодом, где это практически возможно, - это простота передачи файлов. В мире F/OSS просто нет прямой замены.

SecureCRT начиналась как чистая программа для Windows в середине 1990-х, но была портирована на Mac OS X и Linux пару лет назад .

SecureCRT имеет три основных функции для передачи файлов в систему и из системы, в которую вы используете SSH:

  • ZModem , YModem , XModem , Kermit и ASCII - SecureCRT - это эмулятор терминала старой школы, поддерживающий несколько внутриполосных протоколов передачи файлов.

    Самым простым в использовании является ZModem. Когда вы печатаете что-то вроде sz file-to-download в удаленной командной строке, удаленная sz программа записывает escape escape , которая сообщает SecureCRT немедленно начать загрузку file-to-download в каталог загрузки по умолчанию.

    Приятным моментом является то, что каталог загрузки настраивается для каждой сессии. Мы используем это, чтобы иметь каталоги для сайтов на нашем файловом сервере в главном офисе, поэтому нам не нужно вручную сортировать загруженные файлы.

    (sz - это программа "send ZModem", входящая в пакет lrzsz . Она уже упакована для большинства систем Unixy. Если по какой-либо причине ваша удаленная система не он еще не установлен, и вы не можете легко установить бинарный пакет, исходный пакет небольшой и легко переносимый. Несколько раз мне приходилось отправлять lrzsz"sharchive) " или uuencode 'd tarball для урезанной удаленной системы, чтобы я мог ZModem файлы к ней.)

  • [~ # ~] sftp [~ # ~] - SecureCRT имеет тесно интегрированную базовую реализацию SFTP.

    Под "плотной интеграцией" я подразумеваю, что когда вы даете команду меню SFTP или сочетание клавиш, она открывает новую вкладку, подключенную к удаленному сайту через то же соединение SSH. Таким образом, вам не нужно снова входить в систему, и соединение устанавливается немного быстрее, чем если бы вы открыли отдельное SFTP-соединение с тем же сервером.

    Я характеризую функцию SFTP как "базовую", потому что у VanDyke Software есть отдельный продукт для передачи файлов SecureFX . Это более функционально, чем встроенный SFTP-клиент, а также интегрируется с SecureCRT.

    Функция SFTP SecureCRT позволяет вам настроить удаленные и локальные каталоги по умолчанию, которые отделены от конфигурации ZModem.

    Эта функция SFTP имеет базовый интерфейс командной строки, имитирующий программу OpenSSH sftp, за исключением того, что она имеет такие возможности, как Tab Завершение команды. Таким образом, получение удаленного файла с именем somefile.tar.gz может быть так же просто, как get soTabEnter,.

  • Drag-and-drop - если вы перетаскиваете файл в окно терминала, он автоматически набирает rz для вас и начинает отправку файла.

    Кроме того, вы можете открыть вкладку SFTP и перетащить файл на эту вкладку, чтобы отправить его через SFTP. Таким образом, отправка файла в удаленную систему может быть такой же простой, как Alt-P, перетащить, бросить.

    Мы находим, что передачи происходят намного быстрее через SFTP, возможно потому, что это протокол на основе TCP, поэтому он выигрывает от большого скользящие окна современного стеки TCP/IP . ZModem был разработан во времена, когда размер блока в 64 КБ считался "большим". Таким образом, большая часть потенциальной скорости в канале поглощается в ZModem, в то время как каждый конец ожидает подтверждения передачи блока.

    Приятной особенностью режима перетаскивания является то, что он снимает одно из стрессов при использовании ZModem. Когда вы набираете rz в удаленной системе, SecureCRT автоматически открывает окно выбора файлов. Затем у вас есть около минуты, чтобы найти и выбрать файл до истечения времени ожидания удаленной стороны. Это создает атмосферу гонки на часах, которая не нравится. Перетаскивание позволяет найти файл на досуге, а затем начать передачу одним быстрым движением мыши.

    Мы по-прежнему используем ручной метод, начиная передачу с явной команды rz. Это связано с тем, что SecureCRT позволяет настраивать каталог загрузки для каждой сессии, который мы указываем на папку на файловом сервере, которая всегда содержит последнюю версию программного обеспечения, которое работает на конкретном удаленном сайте. Для таких передач нет гонки на время, так как сборщик файлов открывается в правильном месте для начала.

3
Warren Young

Используйте "!" преобразовать файл в ASCII-представление вашего файла (например, ! uuencode myfile.bin >uuencode.dat). Тогда используйте ! cat uuencode.dat >target.dat. После этого используйте uudecode на целевой стороне: ! uudecode target.dat >myfile.bin

1
Nils