переадресация портов и копирование обратно на локальную машину

переадресация портов и копирование обратно на локальную машину

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

user0@inital:> ssh -P port_number user1@server
user1@server:> ssh -P port_number user2@final
user2@final:>

После этого user2@finalя хотел бы скопировать (scp) обратно в user0@inital.

Например, я могу сделать локальную переадресацию портов и копировать с моего локального компьютера на удаленный через сервер.user0@initial

 user0@initial:> ssh -L4321:final:22 -p 443 user1@server

Это перенаправляет локальный порт 4321через user0@initialпорт user1@serverна 22. user2@finalЗатем на , user0@initialзапустив

  scp -P 4321 some_file  [email protected]:~/

Я могу скопировать на user2@finalболее чем user1@server.

Вопрос в том, как обратить все вспять и скопировать обратно user2@finalиз user0@initial.

Спасибо за помощь.

решение1

Предположим, вы хотите запустить команду scp в командной строке final:

# have the local client tell the remote server's sshd to listen on
# port 8765 (randomly chosen) and forward any connection it receives
# to the client which will connect to port 22 locally.
user0@initial:> ssh -R127.0.0.1:8765:127.0.0.1:22 -p 443 user1@intermediate

# On this machine have the client tell this remote server's (final's)
# to listen on port 9876 (randomly chosen) and forward any connection
# that it receives back to this client which will connect it to poirt
# 8765 locally.
user1@intermediate:> ssh -R127.0.0.1:9876:127.0.0.1:8765 user2@final

# Now that you are on the final server (final) you run scp, telling
# it to connect to localhost on port 9876.
# 
# So scp will connec to local (final's) port 9876, which is listened
# to by the local sshd based on our second command above.  That sshd
# will forward the connection to the ssh client that connected to it
# (on intermediate).
# 
# The ssh client on intermediate will connect to localhost:8765 as
# instructed which is a conenction to the sshd on intermediate that
# is listening on that port because it was instructed to do so by the
# ssh client on initial when it connected.
# 
# The sshd on intermediate will forward the conenction back to the
# client on initial which will, as instructed, connect to localhost:22
# on initial.
# 
# All this monkey motion means that now scp on final is "directly"
# connected to port 22 (sshd) on initial and can initiate a login
# and file transfer. to the ssh client that connected to it (on
# intermediate).
user2@final:> scp -P 9876 file_from_final 127.0.0.1:back_at_the_house

Обратите внимание, что я сделал все порты на 127.0.0.1, что защищает их от эксплуатации другими пользователями в Интернете (но не другими пользователями на «сервере» или «конечной точке»).

решение2

Да. Вам следует взглянуть на ключевое слово ssh_config.ProxyCommand

Указывает команду, используемую для подключения к серверу. Командная строка продолжается до конца строки и выполняется с использованием директивы оболочки пользователя 'exec', чтобы избежать затягивания процесса оболочки.

В командной строке любое вхождение '%h' будет заменено именем хоста для подключения, '%p' — портом, а '%r' — именем удаленного пользователя. Команда может быть в принципе любой и должна считывать со своего стандартного ввода и записывать в свой стандартный вывод. В конечном итоге она должна подключиться к серверу sshd(8), работающему на какой-либо машине, или выполнить sshd -i где-либо. Управление ключами хоста будет осуществляться с использованием HostName подключаемого хоста (по умолчанию — имя, введенное пользователем). Установка команды на «none» полностью отключает эту опцию. Обратите внимание, что CheckHostIP недоступен для подключений с помощью команды proxy.

Эта директива полезна в сочетании с nc(1) и его поддержкой прокси. Например, следующая директива будет подключаться через HTTP-прокси по адресу 192.0.2.0:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p

Связанный контент