Как scp вернуться к локальному, когда я уже пробрался на удаленную машину?

Часто я сталкиваюсь с такой ситуацией: я ушел на удаленный сервер и запускал некоторые программы, и я хочу скопировать их выходные файлы на свою локальную машину. То, что я делаю, это запомнить путь к файлу на удаленной машине, выйти из соединения, затем scp [email protected]:filepath .

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

Возможно ли это? Еще лучше, возможно ли без необходимости знать IP-адрес моей локальной машины?

Ответ 1

Учитывая, что на вашем локальном компьютере работает sshd, это возможно, и вам не нужно знать свой исходящий IP-адрес. Если переадресация портов SSH включена, вы можете открыть защищенный туннель, даже если у вас уже открыто ssh-соединение и не завершено.

Предположим, что у вас есть ssh-соединение с некоторым сервером:

local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt  # now we have a file here

Теперь нам нужно скопировать этот файл на наш локальный сервер, и по какой-то причине мы не хотим открывать новое соединение. Хорошо, давайте получим командную строку ssh, нажав Enter ~C (Enter, затем тильда, затем капитал C):

ssh> help
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward

То же, что и обычные -L/R/D параметры. Нам понадобится -R, поэтому мы снова ударим Enter ~C и набираем:

ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.

Здесь мы пересылаем удаленный серверный порт 2222 на локальный порт 22 (и здесь вам нужно, чтобы локальный SSH-сервер запускался на порт 22, если он прослушивает какой-то другой порт, используйте его вместо 22).

Теперь просто запустите scp на удаленном сервере и скопируйте наш файл на удаленный серверный порт 2222, который сопоставляется с нашим локальным портом 22 (где находится наш локальный sshd).

remote $ scp -P2222 abc.txt [email protected]:
[email protected] password:
abc.txt                   100%    4     0.0KB/s   00:00

Мы закончили!

remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc

Трудно, но если вы действительно не можете просто запустить scp с другого терминала, можете помочь.

Ответ 2

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

    scp [-r] local_content [email protected]_local_machine_ip:

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

Ответ 3

На вашем локальном компьютере:

scp root @remotemachine_name_or_IP:/complete_path_to_file/local_path