Я хочу загрузить файл из активного сеанса SSH. Во многих случаях я , вероятно , мог бы просто использовать SFTP, scp
, и rsync
др , но бывают случаи , когда я повышенные разрешения на удаленном сервере , таким образом , я не могу использовать эти методы.
Если вы изо всех сил пытаетесь понять, что я имею в виду, представьте, что вы хотите загрузить что-то с /root/
или /var/log/auth.log
. Root-логин отключен (потому что мы не идиоты). Как вы получили этот файл? Скопировать его куда-нибудь в менее защищенный, а затем переместить? Это неуклюже Существуют также сценарии, в которых удаленный путь является сложным или временным, или даже не является путем, потому что я хочу, чтобы выходные данные удаленной команды хранились локально. Хранить удаленно, потом копировать? Глухой звук!
Есть несколько более неуклюжих способов достижения этих версий, но в идеальном мире у меня было бы что-то похожее на локальный доступ для записи с удаленного сервера, используя существующий сеанс SSH в качестве канала. Что-то вроде (это просто впечатление художника):
$oli@remote: cp /root/cheesecake /local/
И это только появляется в моем местном cwd
. И двунаправленный доступ не будет плохой вещью.
Прошло восемь долгих лет с тех пор, как я задал этот вопрос, и мы увидели реальный диапазон глухоты, но это остается проблемой, с которой я до сих пор иногда борюсь.
Я превратил вопрос в нечто более идеалистическое. Я полностью понимаю, что в настоящее время не может быть идеального ответа. Все прошлые и будущие усилия по достижению моего идеала приветствуются.
zssh
вероятно, ближе всего к zmodem-подобному рабочему процессу, который вы, возможно, помните.Ответы:
Вы можете проверить zssh , который доступен во вселенной, и поэтому доступен с
sudo apt-get install zssh
Он вам нужен на вашем сервере Ubuntu и на вашем клиенте, но в основном, когда вы входите в систему с помощью zssh, вы просто нажимаете «ctrl- @», и он вызывает «Режим передачи файлов», который позволяет вам отправлять файлы обратно по конвейеру на ваш сервер. клиентский компьютер или загрузить их с клиента на сервер.
Тем не менее, вам не нужно повторно авторизоваться или открыть новое окно для scp.
Если вы используете ssh-ключи и ssh-агент, вы можете легко это сделать:
Который будет фоном SSH, а затем просто
scp $!:/whatever/whatever .'
Как только файл передан,
fg
чтобы вернуть ssh.Если вы не используете ssh-ключи, вы все равно можете использовать опции «ControlMaster» и «ControlPath», добавленные в последние версии OpenSSh, но это сложно, проверьте man ssh_config
источник
Предполагая, что вы используете ssh-сервер на своем рабочем столе (есть способы обойти это, но я думаю, что все они добавляют сложности и, возможно, имеют проблемы с безопасностью), вы можете настроить обратный ssh-туннель. Смотрите SSH легко скопировать файл в локальную систему. более в unix.SE .
~C
Enter-R 22042:localhost:22
Enterчтобы создать обратную переадресацию портов с вашего сервера на рабочий стол (22042 может быть любым номером порта от 1024 до 65534, который не используется).scp -P 22042 foo localhost:
скопируйте файлfoo
в вашем текущем каталоге на сервере в ваш дом на рабочем столе.~
Ctrl+ Zmv ~/foo .
Enterfg
Enter.Escape-последовательности Ssh начинаются с
~
; тильда распознается только после новой строки.~ Ctrl+Z
ставит SSH в фоновом режиме.~C
вводит командную строку, где вы можете создать или удалить переадресацию.источник
Я придумал способ сделать это с помощью стандартного SSH. Это скрипт, который дублирует текущее ssh-соединение, находит ваш рабочий каталог на удаленном компьютере и копирует указанный вами файл на локальный компьютер. Для этого нужно 2 очень маленьких скрипта (1 удаленный, 1 локальный) и 2 строки в вашей конфигурации ssh. Шаги следующие:
Добавьте эти 2 строки к вашему
~/.ssh/config
:Теперь, если у вас есть ssh-соединение с machineX, вам не нужны пароли для открытия другого.
Создайте однострочный скрипт на удаленной машине с именем
~/.grabCat.sh
Создайте скрипт на локальной машине с именем ~ / .grab.sh
и создайте псевдоним для grab.sh в (
~/.bashrc
или где угодно):Вот и все, все сделано. Теперь, если вы вошли в систему
machineX:/some/directory
, просто запустите новый терминал и введитеЭто помещает файл в ваш текущий рабочий каталог на локальном компьютере. Вы можете указать другое местоположение в качестве третьего аргумента для «захвата».
Примечание: Очевидно , что оба скрипт должен быть «исполняемым», то есть
chmod u+x filename
.источник
Если ваш клиентский компьютер (компьютер, на котором вы находитесь) называется machineA, а компьютер, на котором вы в настоящее время используете SSH, называется машиной B. MachineA, на вашем локальном компьютере должен быть запущен SSHD и открыт порт 22. Затем:
Копирует
myfile
на MachineB в мой домашний каталог MachineA на machineA. Это предполагает, что ID пользователя / пароль совпадают.Копирует
myfile
один MachineB на машину/newdir/newname
. Это предполагает, что ID пользователя / пароль совпадают.Получает копию
otherfile
из моего каталога MachineA на MachineA и помещает ее в мой текущий рабочий каталог на компьютере MachineB (обозначается стандартным способом UNIX символом «точка» (.)). Это предполагает, что ID пользователя / пароль совпадают.Если ID пользователя / пароль не совпадают, используйте:
scp myfile user@MachineA:
чтобы получить файл.scp user@MachineA:/path/to/my/otherfile .
положить файлыЗАМЕЧАНИЯ о SCP:
Как и
cp
команда,scp
имеет параметр -p для распространения настроек разрешений исходного файла на копию (в противном случае копия создается с обычными настройками для новых файлов) и параметр -r для копирования всего дерева каталогов с одним команда.scp
создает полностью прозрачный зашифрованный канал данных между двумя компьютерами, поэтому двоичные данные (например, изображения или исполняемые программы) сохраняются правильно. Это также означает, чтоscp
невозможно выполнить автоматическое преобразование завершения строки между различными типами операционных систем, как это можно сделать с помощью ftp в режиме «ascii». Это не будет проблемой при копировании между системами Unix, которые используют одинаковое соглашение о конце строки.источник
если вы обращаетесь к серверу через ssh, вы также можете подключиться через sftp. Держите под рукой клиент filezilla (GUI) и вставьте путь, по которому вы сейчас находитесь
источник
Если ваш файл достаточно мал, вы можете закодировать его с помощью base64, а затем декодировать его локально:
Оригинальный ответ, где я получил это (и проверил) от: https://unix.stackexchange.com/a/2869/194134
источник
Это не через активное соединение SSH, но scp копирует файлы, используя те же механизмы и разрешения, что и ssh.
источник
get file
и оно волшебным образом появляется на моей локальной машине. Если это нужно сделать через какой-то сервис, туннелированный через SSH, пусть будет так. Но оно должно быть привязано к сеансу.sshd
работают, и, следовательно, вы должны иметь возможность использоватьscp
в командной строке сервера для отправки файлов обратно клиенту. Вокруг столько магии; иногда нам все еще нужно нажимать кнопки. Решение FileZilla также удобно.Это невозможно в сеансе ssh по умолчанию, но вы можете использовать вместо ssh скрипт, который запускает что-то вроде простого сервера ftp или rsh в вашей локальной системе и запускает ssh с необходимыми параметрами для установки туннеля обратно на ваш рабочий стол. для подключения к этому серверу.
источник
konsole
имеет эту возможность через меню «Edit-> ZModem Upload», пока вы находитесь в удаленном сеансе (или Ctrl-Alt-U).Обратите внимание: пакет
lrzsz
должен быть установлен первым. Для меня похоже, работает только для загрузки файлов ASCII.источник
Поскольку вы подключаетесь с рабочего стола, я думаю, вы можете открыть второй терминал.
Вот как я часто делаю:
realpath myfile
или, либоreadlink -f myfile
(старые версии Ubuntu не предустановленыrealpath
) и копирую его.scp
илиsftp
чтобы получить файл, вставив полный путь, который я получил ранее. Например:scp user@host:/etc/some/file ./
Это довольно просто, но также легко запоминается и не требует дополнительного пакета для работы.
источник
Удивительно я не вижу никакого упоминания о старом добром Midnight Commander здесь. На мой взгляд, это, пожалуй, самый универсальный и полезный файловый менеджер для оболочки с мощными возможностями, один из «обязательных» инструментов для случая, который также позволяет вам подключаться через SSH, FTP, SFTP, в то время как на На второй панели вы можете открыть любую другую (вашу локальную) файловую систему и так свободно работать с файлами.
Все, что вам нужно, это: apt-get install mc (из вселенной)
После этого запустите mc, откройте меню для левой или правой панели, выберите подключение к оболочке, введите имя пользователя @ remote-ip, пароль - собственно, вот и все ... копируйте (здесь: скачивайте) файлы / папки с одного компьютера на другой с помощью F5, двигайтесь с F6 и так далее в соответствии с кнопками ниже. Для старых пользователей MS: как в NC для DOS
источник
ПУТЬ, думая об этом, ребята. Я искал все глубокие, темные, сложные ответы тоже. Оказывается, вы можете сделать это прямо из дельфина прямо из банки. рыба: // имя пользователя @ сервер: порт
источник