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

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

232 голоса | спросил Shawn J. Goff 7 +04002010-10-07T21:53:52+04:00312010bEurope/MoscowThu, 07 Oct 2010 21:53:52 +0400 2010, 21:53:52

9 ответов


127

Мастер-соединение

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

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

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

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

Поэтому, когда у вас есть активное соединение, вы можете быстро:

Переадресация

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

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

Если вы не включили удаленную переадресацию с самого начала, вы можете сделать это в существующем сеансе ssh. Введите Введите ~ C Введите -R 22042: localhost: 22 Введите . Для получения дополнительной информации см. «Экраны символов» в руководстве.

Существует также интересная информация в этот поток ошибок сервера .

Copy-Paste

Если файл мал, вы можете ввести его и скопировать-вставить с вывода терминала. Если файл содержит непечатаемые символы, используйте кодировку, например 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 -
ответил Gilles 8 +04002010-10-08T01:42:47+04:00312010bEurope/MoscowFri, 08 Oct 2010 01:42:47 +0400 2010, 01:42:47
51

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

$ ~?
Поддерживаемые escape-последовательности:
  ~. - завершить соединение (и любые мультиплексированные сеансы)
  ~ B - отправить BREAK на удаленную систему
  ~ C - открыть командную строку
  ~ R - запрос запроса (только протокол SSH 2)
  ~ ^ Z - приостановить ssh
  ~ # - список переадресованных соединений
  ~ & Амп; - background ssh (при ожидании завершения соединения)
  ~? - это сообщение
  ~~ - отправить escape-символ, введя его дважды
(Обратите внимание, что escape-файлы распознаются сразу после новой строки.)

$ ~ C
SSH > Помогите
Команды:
      -L [bind_address:] port: host: hostport Запрос локального переадресации
      -R [bind_address:] port: host: hostport Запрос удаленного доступа
      -D [bind_address:] port Запрос динамической переадресации
      -KR [bind_address:] порт Отмена удаленного доступа
      ! args Выполнить локальную команду

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

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

$ ~ C
SSH > ! scp file user @ myserver:

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

ответил Corey Henderson 29 22011vEurope/Moscow11bEurope/MoscowTue, 29 Nov 2011 03:05:19 +0400 2011, 03:05:19
48

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

# на удаленный хост
cat localfile.conf | ssh user @ hostname 'cat -> /tmp/remotefile.conf»

# с удаленного хоста
ssh user @ hostname 'cat /tmp/remotefile.conf'> /tmp/localfile.conf

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

ответил Florian Fida 7 Jam1000000amWed, 07 Jan 2015 01:10:26 +030015 2015, 01:10:26
36

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

mkdir -p /mnt /sshfs

root @ IS1300: ~ # sshfs 192.168.1.2://mnt /sshfs
root @ IS1300: ~ # umount /mnt /sshfs

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

ответил Quandary 9 +04002010-10-09T04:25:11+04:00312010bEurope/MoscowSat, 09 Oct 2010 04:25:11 +0400 2010, 04:25:11
13
  • Используйте ssh-xfer , модифицированный ssh-agent, который эффективно перегружает существующий боковой канал ssh для использование файлов.
  • Используйте zssh , который эффективно zmodem над ssh. Если вы когда-либо использовали rzsz, это будет казаться очень знакомым.
  • Обратный (-R, для удаленных локальных) или переадресация (-L, для локально-удаленных) портов для выполнения переноса файлов, предполагая у вас есть демон, передающий передачу файлов, на другом конце.

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

   # первое соединение 
$ ssh remote

   # будет мультиплексировать по тому же соединению, который был открыт исходный ssh ​​
$ sftp remote
ответил ephemient 23 MaramFri, 23 Mar 2012 03:09:43 +04002012-03-23T03:09:43+04:0003 2012, 03:09:43
9

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

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

ответил Larry Jones 8 J0000006Europe/Moscow 2011, 00:52:58
7

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

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

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

ответил Robert 23 Maypm13 2013, 19:09:07
3

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

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

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

  • ZModem , YModem , XModem , < a href = "http://en.wikipedia.org/wiki/Kermit_%28protocol%29" rel = "nofollow"> Kermit и ASCII - SecureCRT - это эмулятор терминалов старой школы , поддерживая несколько внутриполосных протоколов передачи файлов.

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

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

    (sz) - это программа «отправить 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 имеет базовый интерфейс командной строки, который имитирует программу sftp для OpenSSH, за исключением того, что она имеет такие возможности, как завершение команды Tab . Таким образом, получение удаленного файла с именем somefile.tar.gz может быть таким же простым, как get so Tab Enter .

  • Перетаскивание . Если вы перетаскиваете файл в окно терминала, он автоматически вводит rz для вас и начинает отправку файла.

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

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

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

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

ответил Warren Young 15 SunEurope/Moscow2013-12-15T05:22:15+04:00Europe/Moscow12bEurope/MoscowSun, 15 Dec 2013 05:22:15 +0400 2013, 05:22:15
1

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

ответил Nils 29 22011vEurope/Moscow11bEurope/MoscowTue, 29 Nov 2011 02:08:14 +0400 2011, 02:08:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132