Я хочу загрузить файл из активного сеанса SSH. Во многих случаях я, вероятно, мог бы просто использовать SFTP, scp
, rsync
и др., Но бывают случаи, когда у меня есть повышенные разрешения на удаленном сервере, и я не могу использовать эти методы.
Если вы изо всех сил пытаетесь понять, что я имею в виду, представьте, что вы хотите загрузить что-нибудь из /root/
или /var/log/auth.log
. Root-логин отключен (потому что мы не идиоты). Как вы получили этот файл? Скопировать его куда-нибудь в менее защищенный, а затем переместить? Это неуклюже Существуют также сценарии, в которых удаленный путь является сложным или временным, или даже не является путем, потому что я хочу, чтобы выходные данные удаленной команды хранились локально. Хранить удаленно, потом копировать? Clunk!
Есть несколько более неуклюжих способов получить версии этих версий, но в идеальном мире у меня было бы что-то похожее на локальный доступ для записи с удаленного сервера, используя существующий сеанс SSH в качестве канала. Что-то вроде (это просто впечатление художника):
$oli@remote: cp /root/cheesecake /local/
И это просто появляется в моем местном cwd
. И двунаправленный доступ не будет плохой вещью.
Прошло восемь долгих лет с тех пор, как я задал этот вопрос, и мы видели реальный диапазон глухоты, но это остается проблемой, с которой я до сих пор иногда борюсь.
1112 Я перефразировал вопрос во что-то более идеалистическое. Я полностью понимаю, что в настоящее время не может быть идеального ответа. Все прошлые и будущие усилия по достижению моего идеала приветствуются.
Если ваш клиентский компьютер (компьютер, на котором вы находитесь) называется machineA, а компьютер, на котором вы в настоящее время используете SSH, называется машиной B. MachineA, на вашем локальном компьютере должен быть запущен SSHD и открыт порт 22. Затем:
scp myfile machineA:
Копирует myfile
на MachineB в мой домашний каталог MachineA на machineA. Предполагается, что ID пользователя и пароль совпадают.
scp myfile machineA:/newdir/newname
Копирует myfile
один MachineB в /newdir/newname
на машине A. Предполагается, что ID пользователя и пароль совпадают.
scp MachineA:/path/to/my/otherfile .
Получает копию 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, которые используют одинаковое соглашение о конце строки.
Добавьте эти 2 строки в ваш ~/.ssh/config
:
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p
Теперь, если у вас есть ssh-соединение с machineX открытым, вы не будете нужны пароли, чтобы открыть еще один.
Создайте однострочный сценарий на удаленном компьютере с именем ~/.grabCat.sh
\#!/bin/bash<br>
cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/$1
Создайте сценарий на локальном компьютере с именем ~ / .grab.sh [ 1119]
\#!/bin/bash
[ -n "$3" ] && dir="$3" || dir="."
ssh "$1" ".grabCat.sh $2" > "$dir/$2"
и создайте псевдоним для grab.sh в (~/.bashrc
или где-то еще):
alias grab=~/.grab.sh
Вот и все сделанный. Теперь, если вы вошли в machineX:/some/directory
, просто запустите новый терминал и введите
grab machineX filename
, который поместит файл в ваш текущий рабочий каталог на локальном компьютере. Вы можете указать другое местоположение в качестве третьего аргумента для «захвата».
Примечание. Очевидно, что оба сценария должны быть «исполняемыми», т. Е. chmod u+x filename
.
Предполагая, что вы используете ssh-сервер на своем рабочем столе (есть способы обойти это, но я думаю, что все они добавляют сложности и, возможно, имеют проблемы с безопасностью), вы можете настроить обратный ssh-туннель. См. SSH, легко скопируйте файл в локальную систему. на unix.SE .
~C
Enter kbd> -R 22042:localhost:22
Enter kbd>, чтобы создать обратную переадресацию портов с вашего сервера на рабочий стол ( 22042 может быть любым номером порта между 1024 и 65534, который не используется). scp -P 22042 foo localhost:
скопирует файл foo
из вашего текущего каталога на сервере в ваш дом на рабочем столе. ~
Ctrl kbd> + Z kbd> mv ~/foo .
Введите kbd> fg
Введите kbd>. Ssh escape-последовательности начинаются с ~
; тильда распознается только после новой строки. ~ Ctrl+Z
ставит ssh на задний план. ~C
вводит командную строку, где вы можете создать или удалить пересылку.
Если вы обращаетесь к серверу через ssh, вы также можете подключиться через sftp. Держите под рукой клиент filezilla (GUI) и вставьте путь, по которому вы сейчас находитесь
Возможно, вы захотите проверить zssh , который доступен в юниверсе и поэтому доступен с
sudo apt-get install zssh
Он вам нужен на вашем сервере Ubuntu и на вашем клиенте, но в основном, когда вы входите в систему с помощью zssh, вы просто нажимаете «ctrl- @», и он вызывает «Режим передачи файлов», который позволяет отправлять файлы обратно по конвейеру на ваш клиентский компьютер или загружать их с клиента на сервер.
Однако вам не нужно повторно авторизоваться или открывать новое окно для scp.
Если вы используете ssh-ключи и ssh-агент, вы можете довольно легко сделать:
[enter]~[ctrl]-Z
, который будет фоновым ssh, а затем просто scp $!:/whatever/whatever .'
. файл передан, fg
, чтобы вернуть ssh.
Если вы не используете ssh-ключи, вы все равно можете использовать опции «ControlMaster» и «ControlPath», добавленные в последние версии OpenSSh, но это сложно, проверьте man ssh_config
Если ваш файл достаточно мал, вы можете кодировать его с помощью base64, а затем декодировать его локально:
remote.example.net$ base64 <myfile (copy the output)
local.example.net$ base64 -d >myfile (copy the output) Ctrl+D
Оригинальный ответ, откуда я получил (и проверил) из: https : //unix.stackexchange.com/a/2869/194134
ПУТЬ обдумывая это, ребята. Я искал все глубокие, темные, сложные ответы тоже. Оказывается, вы можете сделать это прямо из дельфина прямо из банки. рыба: // имя пользователя @ сервер: порт
Поскольку вы подключаетесь с рабочего стола, я думаю, вы можете открыть второй терминал.
Вот как я часто это делаю:
realpath myfile
или readlink -f myfile
(старые версии Ubuntu не предустановлены realpath
), и скопируйте его. scp
или sftp
, чтобы получить файл, вставляя полный путь, который я получил ранее. Например: scp user@host:/etc/some/file ./
Это довольно просто, но также легко запомнить и не требует никакого дополнительного пакета для работы.
Это невозможно при сеансе ssh по умолчанию, но вы можете использовать вместо ssh сценарий, который запускает что-то вроде простого сервера ftp или rsh в вашей локальной системе и запускает ssh с необходимыми параметрами для настройки туннеля на ваш рабочий стол для подключения к этому серверу.
Удивительно, но я не вижу здесь упоминания о старом добром Полуночном Командующем . На мой взгляд, это, вероятно, самый универсальный & amp; полезный файловый менеджер для оболочки с возможностями электропитания, один из «обязательных» инструментов для случая, который также позволяет вам подключаться через SSH, FTP, SFTP, в то время как на второй панели вы можете открыть любой другой (ваш локальная) файловая система и так свободно работает с файлами.
Все, что вам нужно, это: apt-get install mc (из юниверса)
После этого запустите mc, откройте меню для левой или правой панели, выберите подключение оболочки введите имя пользователя @ remote-ip, пароль - собственно, вот и все .. копируйте (здесь: скачивайте) файлы / папки с одного компьютера на другой с помощью F5, перемещайтесь с помощью F6 и т. д. в соответствии с кнопками ниже. Для старых пользователей MS: как в NC для DOS