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

С небольшим количеством предосторожности это должно работать:

foo-status=$(mktemp -t)
(foo; echo $? >$foo-status) | bar
foo_status=$(cat $foo-status)
264
13.03.2018, 17:30
10 ответов

Основное соединение

Является самым легким, если Вы планируете заранее.

Откройте основное соединение в первый раз. Для последующих соединений направьте ведомые соединения посредством существующего основного соединения. В Вашем ~/.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 Войти. См. “Символы ESC” в руководстве для получения дополнительной информации.

В этом потоке Отказа сервера существует также некоторая интересная информация.

Вставка копии

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

remote.example.net$ base64 <myfile
(copy the output)
local.example.net$ base64 -d >myfile
(paste the clipboard contents)
Ctrl+D

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

remote.example.net$ tar -czf - myfile | xsel

local.example.net$ xsel | tar -xzf -
143
27.01.2020, 19:26
  • 1
    Если мы можем передать файлы с помощью SSH, почему люди все еще нуждаются/используют в SFTP? –  Pacerier 31.10.2014, 17:55
  • 2
    @Pacerier, поскольку SFTP является способом передать файлы с помощью SSH. –  Gilles 'SO- stop being evil' 31.10.2014, 18:05
  • 3
    Почему людям даже нужен SFTP, если они могут передать файлы с помощью SSH-SFTP? огромное спасибо –  Pacerier 01.11.2014, 00:23
  • 4
    Метод вклеивания копии особенно удобен с цепочечными соединениями (т.е. переходящий через несколько хостов для достижения заключительного) –  golimar 07.10.2015, 17:13
  • 5
    @Pacerier SFTP имеет некоторые дополнительные команды как файлы списка, или удалите удаленный файл и т.д. –  rahmu 24.02.2018, 23:22

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

mkdir -p /mnt/sshfs

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

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

38
27.01.2020, 19:26
  • 1
    Соединение с файлом ключей: sshfs -oIdentityFile=~/.ssh/keyfile.pem user@192.168.1.2:/ /mnt/sshfs/ –  sshow 20.09.2015, 15:23

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

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

9
27.01.2020, 19:26

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

$ ~?
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 сессию при установке a ControlMaster в ssh_config. Если Вы делаете это:

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

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

54
27.01.2020, 19:26
  • 1
    Это все еще работает? Я не мог найти !args в сообщении справки. –  xuhdev 15.07.2016, 08:04
  • 2
    @xuhdev это находится все еще там на OpenSSH_7.2p2, args не находится в первом сообщении справки (~?), но во втором (после того как каждый входит ssh> подсказка с ~C, можно ввести help в ssh> подсказка) –  sdaau 20.09.2017, 11:59
  • 3
    Это похоже на хорошее решение (хотя я не попробовал его), я не понял, что можно получить родительский буфер командной строки, стиль энергии. На практике можно было бы просто предпочесть открывать новую терминальную вкладку так, чтобы они не забывали, как возвратиться в сессию (как то, когда я никогда не могу помнить, как выйти из emacs). –  Sridhar Sarnobat 02.04.2018, 03:49

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

1
27.01.2020, 19:26
  • Используйте ssh-xfer, измененный ssh-агент, который эффективно перегружает существующий ssh канал стороны для использования передачи файлов.
  • Используйте zssh, который является эффективно zmodem по ssh. Если Вы когда-либо использовали rzsz, это будет казаться очень знакомым.
  • Реверс (-R, для удаленного-к-локальному) или вперед (-L, для локального-к-удаленному), порты для работы передач файлов, принимая Вас имеют некоторого передающего файл демона, слушающего на другом конце.

Но ни один из них не действительно необходим, IMO. Поддержка протоколов SSH несколько каналов на единственном соединении и мультиплексировании поддержек клиентов OpenSSH. Принятие Вас имеет ControlMaster и ControlPath настроенный (ControlPersist полезно также),

  # first connection
$ ssh remote

  # will multiplex over the same connection the original ssh opened
$ sftp remote
15
27.01.2020, 19:26
  • 1
    zmodem напоминает мне о загрузке последнего условно-бесплатного программного обеспечения от локального BBS.. :-) –  Stuart Woodward 08.06.2013, 17:17
  • 2
    xfer путь точно, что я искал, но Вы знаете, почему патч ssh-xfer не включен в OpenSSH в восходящем направлении? Некоторое пламя? –  Ferran Basora 13.11.2015, 13:09

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

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

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

8
27.01.2020, 19:26

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

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

SecureCRT имеет три основных функции для передачи файлов к, и от системы Вы - SSH'd в:

  • ZModem, YModem, XModem, 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. Это - больше featureful, чем встроенный клиент SFTP и также интегрируется с SecureCRT.

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

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

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

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

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

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

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

3
27.01.2020, 19:26

Другой (IMO).

# to remote host
cat localfile.conf | ssh user@hostname 'cat -> /tmp/remotefile.conf'

# from remote host
ssh user@hostname 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

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

73
27.01.2020, 19:26

Если вам нужно перейти через один (или несколько )прокси-серверов, OpenSSH версии 7.3 и выше поддерживает-J.

Учитывая, что A → B → C, на хосте A просто:

tar cf - file1 file_n | pv | ssh -C -J userB@hostB:portB userB@hostC -p portC 'tar xvf - -C hostC_destination_folder'
  • Используйте столько переходов, сколько хотите, с опцией -Jssh.
  • Опустите удаленный tar -C , чтобы оставить файлы в домашней папке.
  • Отправить любые файлы сразу (текстовый или двоичный ).
  • Увеличьте скорость, сжав поток с помощью ssh-C(или tar-z). Особенно полезно, если данные представляют собой обычный текст (несжатый ).
  • pvотслеживание прохождения данных по конвейеру. Альтернативой может бытьprogress.

На основе ответов Флориана Фиды и Дэна Гартуэйта .

Здесь как работать с Midnight Commander.

0
20.08.2021, 13:39

Теги

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