Ответ 1
Вы можете настроить такое перевернутое соединение передачи w/ ssh -Rport:127.0.0.1:22 [email protected] for scp back.
Use scp [email protected]:port для доступа к нему.
Не проблема программирования, но актуальная для многих программистов...
Скажем, я открыл сеанс SSH на другом компьютере.
remote: html avalys $ls
welcome.msg index.html readme.txt
remote: html avalys $
Есть ли какая-либо команда, которую я могу ввести в свою удаленную оболочку, которая немедленно перенесет один из файлов в текущем каталоге (например, welcome.msg) на мой локальный компьютер, т.е.
удаленный: html avalys $stransfer welcome.msg
Получение/home/avalys/html/welcome.msg на welcome.msg
/home/avalys/html/welcome.msg 100% 23KB 23.3KB/s 00:00
remote: html avalys $
Единственный способ, которым я знаю, это открыть параллельный сеанс SFTP и CD в мой текущий каталог в сеансе SSH, который является реальной PITA при удаленном администрировании сервера.
EDIT: Я знаю о возможности использования обратного соединения sftp/scp, но это требует большего набора текста. Было бы здорово, если бы я мог набрать только имя какой-либо команды (например, "stransfer" ) и файлы, которые я хочу передать, и иметь его Just Work.
Вы можете настроить такое перевернутое соединение передачи w/ ssh -Rport:127.0.0.1:22 [email protected] for scp back.
Use scp [email protected]:port для доступа к нему.
Вот мое предпочтительное решение этой проблемы [как указано в повторяющемся вопросе, который я задал]. Настройте обратный туннель ssh при создании сеанса ssh. Это облегчается с помощью двух функций bash: grabfrom() должен быть определен на локальном хосте, а grab() должен быть определен на удаленном хосте. Вы можете добавить любые другие переменные ssh, которые вы используете (например, -X или -Y), как вам удобно.
function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 [email protected] [email protected]:~; };
Использование:
localhost% grabfrom [email protected]
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>
Положительных:
Отрицательных:
Будущая работа: Это все еще довольно клочья. Очевидно, что можно было бы решить проблему аутентификации, настроив соответствующие ключи ssh, и еще проще разрешить спецификацию удаленного каталога, добавив параметр для grab()
Сложнее решать другие негативы. Было бы неплохо выбрать динамический порт, но насколько я могу судить, нет элегантного способа передать этот порт оболочке на удаленном хосте; Насколько я могу судить, OpenSSH не позволяет вам устанавливать произвольные переменные среды на удаленном хосте, а bash не может принимать переменные среды из аргумента командной строки. Даже если вы можете выбрать динамический порт, нет способа убедиться, что он не используется на удаленном хосте без первого подключения.
В ходе исследования я нашел программу, которая работает как замена для клиента openssh, zssh.
sudo apt-get install zssh
zssh [email protected]
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz
Работает как шарм.
Вы можете подключить ssh-соединение с помощью sshfs. Таким образом, вы можете передавать файлы в одном и том же ssh-соединении, используя любой клиент ssh, который вам больше всего нравится. Вы даже можете настроить его, если хотите.
Если вы занимаетесь исправлением (что IMHO не следует исправлять), посмотрите ssh-xfer
Вы можете написать bash script с именем stransfer, который будет принимать аргумент имени файла, затем он будет вставлять имя файла в команду scp, предполагая, что сервер и путь к файлам на сервере не изменяются.
Или, если файл всегда один и тот же, вы можете создать псевдоним в файле ~/.bashrc.
alias getwelcome = 'scp avalys @remotehost:/home/avalys/html/welcome.msg.'
У меня была такая же мысль, что Павел Томблин написал в комментарии к этому вопросу. В старых сеансах терминала использовались протоколы и инструменты x-, y- и z-модема (sz
и rz
для вариантов z-модема), чтобы добиться чего-то подобного. Я не уверен, что они будут работать через сеанс ssh, но, возможно, стоит попробовать.
Fink поставляет пакет lrzsz
с этим инструментом в Mac OS X.
Создание этой вики сообщества, потому что я плохо себя чувствую для получения репутации после того, как Пол попал туда первым...
В школе, если я переношу файл из одной Linux-системы в другую, я обычно удаляю с помощью ssh, а затем использую scp для переноса файла из удаленной системы обратно на свой компьютер. Не уверен, что это то, что вы ищете, или если это даже применимо в вашем случае, но обычно это мой способ обойтись, чтобы открыть другое окно терминала.
Чтобы уточнить, не знакомы ли вы с scp, вам все равно нужно указать местоположение, которое вы хотели бы разместить на своем компьютере, но для меня это вообще легче запомнить, чем расположение файла на удаленном компьютере. Вот ссылка, которая может быть полезна: http://www.computerhope.com/unix/scp.htm
https://superuser.com/info/259481/reverse-scp-over-ssh-connection
sftp server
get file.txt
По-видимому, вы также можете перемещаться вокруг n вещей в консоли sftp, а get
- полный путь к файлу. Копирует в каталог, из которого вы запустили sftp
.