SSH - способ передачи файлов без открытия отдельной сессии SFTP? - PullRequest
11 голосов
/ 13 января 2009

Не совсем вопрос программирования, но он актуален для многих программистов ...

Допустим, я открыл сеанс SSH с другим компьютером.

пульт: html avalys $ ls
welcome.msg index.html readme.txt
удаленный: html avalys $

Существует ли какая-либо команда, которую я могу ввести в моей удаленной оболочке, которая немедленно перенесет один из файлов в текущем каталоге (например, welcome.msg) на мой локальный компьютер, т.е.

remote: html avalys $ stransfer welcome.msg
Загрузка /home/avalys/html/welcome.msg в welcome.msg
/home/avalys/html/welcome.msg 100% 23 КБ 23,3 КБ / с 00:00
удаленный: html avalys $

Единственный известный мне способ сделать это - открыть параллельный сеанс SFTP и CD для моего текущего каталога в сеансе SSH, который является настоящим PITA при удаленном администрировании сервера.

РЕДАКТИРОВАТЬ: я знаю о возможности использования обратного соединения sftp / scp, но это требует большего набора текста. Было бы здорово, если бы я мог набрать только имя какой-либо команды (например, «stransfer») и файл (ы), которые я хочу передать, и получить его Just Work.

Ответы [ 9 ]

7 голосов
/ 13 января 2009

Вы можете установить такое инвертированное соединение передачи с / 1001 * для доступа к нему.

5 голосов
/ 23 апреля 2012

Исследуя это, я обнаружил программу, которая работает в качестве замены для клиента openssh, zssh.

sudo apt-get install zssh
zssh user@remote
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz

Работает как шарм.

2 голосов
/ 24 августа 2012

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

2 голосов
/ 09 февраля 2009

Вот мое предпочтительное решение этой проблемы [как дано для дублирующего вопроса , который я задал]. Настройте обратный туннель ssh после создания сеанса ssh. Это легко сделать с помощью двух функций bash: на локальном хосте необходимо определить grabfrom (), а на удаленном хосте - grab (). Вы можете добавить любые другие используемые вами ssh-переменные (например, -X или -Y) по своему усмотрению.

function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };

Использование:

localhost% grabfrom remoteuser@remotehost
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>

Положительные:

  • Работает без специального программного обеспечения на любом хосте, кроме OpenSSH
  • Работает, когда локальный хост находится за маршрутизатором NAT
  • Может быть реализована в виде пары двухстрочных функций из одной строки

Отрицательные:

  • Используется фиксированный номер порта, поэтому:
    • не будет работать с несколькими подключениями к удаленному хосту
    • может конфликтовать с процессом, использующим этот порт на удаленном хосте
  • Требуется локальный хост принимать ssh-соединения
  • Требуется специальная команда для начала сеанса
  • Неявно обрабатывает аутентификацию на локальном хосте
  • Он не позволяет указать каталог назначения на локальном хосте
  • Если вы перешли с нескольких локальных хостов на один и тот же удаленный хост, ssh не понравится изменение ключей

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

Более сложным является рассмотрение других негативов. Было бы неплохо выбрать динамический порт, но, насколько я могу судить, не существует элегантного способа передачи этого порта в оболочку на удаленном хосте; Насколько я могу судить, OpenSSH не позволяет вам устанавливать произвольные переменные окружения на удаленном хосте, а bash не может принимать переменные окружения из аргумента командной строки. Даже если вы можете выбрать динамический порт, нет способа гарантировать, что он не будет использоваться на удаленном хосте без предварительного подключения.

1 голос
/ 14 января 2009

У меня была та же мысль, что Пол Томблин написал в комментарии к вопросу. Старые терминальные сеансы использовались для использования протоколов и инструментов x-, y- и z-модема (sz и rz для вариантов z-модема) для достижения чего-то подобного. Я не уверен, будут ли они работать в течение сеанса SSH, но, возможно, стоит попробовать.

Fink поставляет пакет lrzsz с этим инструментом в Mac OS X.

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

1 голос
/ 13 января 2009

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

Или, если файл всегда один и тот же, вы можете создать псевдоним в файле ~ / .bashrc.

alias getwelcome = 'scp avalys @ remotehost: /home/avalys/html/welcome.msg.'

1 голос
/ 13 января 2009

Если вы залатываете вещи (которые ИМХО не следует исправлять), взгляните на ssh-xfer

0 голосов
/ 05 июня 2014

https://superuser.com/questions/259481/reverse-scp-over-ssh-connection

sftp server
get file.txt

Очевидно, вы также можете перемещаться по n материалам в консоли sftp, и get принимает полный путь к файлу. Копирует в каталог, из которого вы запустили sftp.

0 голосов
/ 13 января 2009

В школе, если я передаю файл из одной системы Linux в другую, я обычно удаленно использую ssh, а затем использую scp для передачи файла из удаленной системы обратно на мой компьютер. Не уверен, что это то, что вы ищете, или это применимо в вашем случае, но обычно это мой способ обойти необходимость открывать другое окно терминала.

Просто чтобы уточнить, если вы не знакомы с scp, вам все равно придется указать место, куда вы хотели бы поместить файл на свой компьютер, но для меня в любом случае это обычно легче запомнить, чем местоположение файла на удаленном компьютере. Вот ссылка, которая может быть полезна: http://www.computerhope.com/unix/scp.htm

...