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

StackOverflow https://stackoverflow.com/questions/440524

Вопрос

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

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

удаленный доступ:html avalys$ ls
добро пожаловать.msg index.html readme.txt
удаленный доступ:html avalys$

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

удаленный доступ:html avalys$ stransfer welcome.msg
Выборка /home/avalys/html/welcome.msg для welcome.msg
/главная страница/avalys/html/welcome.сообщение 100% 23 КБ 23.3КБ/с 00:00
удаленный доступ:html avalys$

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

Редактировать:Я знаю о возможности использования обратного соединения sftp / scp, но это требует большего набора текста.Было бы здорово, если бы я мог ввести просто название какой-нибудь команды (например"stransfer"), и файл (ы) Я хочу перенести, и чтобы он просто работал.

Это было полезно?

Решение

Вы можете установить такое перевернутое соединение для передачи с помощью / ssh -Порт: 127.0.0.1: 22 user @ host для scp back.

Используйте scp user @ host: port для доступа к нему.

Другие советы

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

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

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

Вот мое предпочтительное решение этой проблемы [как указано на дублирующий вопрос - Спросил я].Настройте обратный 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
  • Это может быть реализовано в виде пары из двух однострочных функций bash

Негативы:

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

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

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

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

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

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

https://superuser.com/questions/259481/reverse-scp-over-ssh -связность

sftp server
get file.txt

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top