Можно ли подключиться к SCP с удаленного на локальный, вошедший в удаленный и не зная IP-адреса локального?

31

Я регулярно обнаруживаю желание скопировать файл из сеанса удаленного терминала на мою локальную машину. Обычно я выхожу из удаленного сеанса и вызываю передачу scp из локальной системы, чтобы скопировать файл из удаленной в локальную систему. Но это немного затянуто. Я хотел бы передать файл во время входа в систему через SSH, чтобы сэкономить время. Моя локальная машина подключена к Интернету с динамического диапазона IP-адресов, поэтому я не совсем уверен, как подключиться к нему удаленно. Но, разумеется, поскольку удаленный сеанс начинается с моего ноутбука, в scp должен быть ярлык, чтобы вернуться к моему ноутбуку ... Верно?

jnthnclrk
источник

Ответы:

20

Вы можете использовать SSH туннелирование для этого.

С помощью туннелирования вы можете перенаправить порт TCP либо с вашего локального компьютера на удаленный компьютер, либо с удаленного компьютера на ваш локальный компьютер. Я часто использую его для переадресации, например, портов SMTP или IMAP с удаленной машины за брандмауэром на мою локальную машину (а затем получаю доступ к сервисам локально, как будто они работают локально).

Чтобы перенаправить порт 22 (SSH) с локального компьютера на удаленный, попробуйте следующее:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Обратите внимание, что localhost относится к локальному имени удаленного компьютера)

После этого вы сможете вернуться домой, используя:

ssh -p12345 yourlocaluser@127.0.0.1

При использовании scp вы должны сделать что-то вроде (scp имеет прописную букву P для переадресации портов):

scp -P12345 filename 127.0.0.1:/tmp/filename

Переадресация портов в другом направлении (от удаленного к локальному) использует -L вместо -R.

Приведенные выше команды предполагают, что вы используете терминальный ssh-клиент. Графические клиенты, такие как PuTTY для Windows, также поддерживают туннелирование

Даниэль Лундмарк
источник
Не отвечает на вопрос ОП, чей IP не является статичным.
2
Если я не пропустил что-то, это должно нормально для OP соединиться с текущей удаленной машины обратно к локальной. Туннелирование будет осуществляться через сеанс SSH. Поскольку соединение SSH устанавливается с динамического локального компьютера на удаленный, оно будет успешным и, таким образом, сможет настроить порт прослушивания на удаленном компьютере, который туннелирует обратно туда, откуда он пришел.
Для этого потребуется OP настроить сервер SSH на своем локальном компьютере и позаботиться об аутентификации. Так что это может быть больше проблем, чем это стоит в некоторых случаях использования.
Септаграмма
Это работает не только для динамических IP-адресов, но и для межсетевых экранов, которые запрещают ssh-соединения от удаленного к локальному. Очень полезный ответ!
3
Вы можете сделать это еще более удобным, установив переадресацию удаленного порта с помощью ~Cescape. Просто введите <Enter>~C-R 12345:localhost:22<Enter>, и вы получите свой туннель, не выходя из уже установленного сеанса SSH.
6

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

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Источник: легко скопируйте файл обратно на хост, с которого вы подключаетесь (commandlinefu.com)

Патрик МакЛарен
источник
1
Чтобы объяснить, что это делает для людей, сталкивавшихся с этим, ${SSH_CLIENT%% *}выведите IP своего локального компьютера. Таким образом, вся команда открывает сеанс scp с удаленного компьютера на локальный компьютер для передачи файлов. Это можно сделать только в том случае, если вы можете подключиться по SSH к локальному компьютеру с удаленного компьютера.
Bizi
2
Это может быть улучшено добавлением чего-то вроде export ME="${SSH_CLIENT%% *}"в ваш rc-файл оболочки. Вы можете просто использоватьscp <file> $ME:<local path>
kralyk
Отлично, это работает, однако, обратите внимание: если вы войдете через VPN, файлы окажутся не на вашей машине, а где-то еще.
Кап
1

Может зсс ?

zssh (Zmodem SSH) - это программа для интерактивной передачи файлов на удаленный компьютер с использованием защищенной оболочки (ssh). Он предназначен для удобной альтернативы scp, позволяя передавать файлы без необходимости открывать другой сеанс и повторно проходить аутентификацию.

ZSSH это интерактивная оболочка для SSH

Он использует почтенные rz, sz реализации передачи файлов zmodem.

RedGrittyBrick
источник
1

Подняв этот вопрос, я бы тоже хотел, чтобы это было легко достигнуто .

Вот соответствующий ответ: Как мне SCP с удаленного компьютера на локальный компьютер, когда я нахожусь вне моей домашней сети?

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

Марс Робертсон
источник
0

Одним из решений было бы приостановить сеанс ssh на локальном компьютере, выполнить копирование на локальном компьютере и затем возобновить сеанс ssh, на котором вы остановились.

Например, предположим, что я подключен к myuser @ remote и хочу скопировать файл lol.txt на мой локальный компьютер. Сначала я хочу приостановить SSH на моей локальной машине. Обычно вы используете Ctrl- Zдля приостановки, но это не сработает в ssh, потому что оно будет отправлено в удаленную оболочку. Вместо этого вы должны использовать escape-последовательность ssh Enter~. Чтобы приостановить ssh нажмите Enter~ Ctrl- Z. Теперь вы можете запускать команды на своем локальном компьютере, и можете делать

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

скопировать файл и затем вернуться в ssh именно там, где вы его оставили

user@localmachine:~$ fg


источник
но проблема не в копировании из удаленного, проблема в копировании в удаленный, я не вижу, как приостановка оболочки делает что-нибудь для решения этой проблемы ...
alex
Ну, это работает и по-другому. Идея в том, что вы просто приостанавливаете сеанс, а не выходите из него, что делает его хотя бы немного легче.
Стин Шютт
0

Если вы хотите более простое решение, просто откройте аккаунт Dropbox, перейдите на удаленный компьютер и выполните wget (измененная версия здесь ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

Алекс
источник