3

Обычно я вхожу в сеть через 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  user1@127.0.0.1:~/

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

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

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

2 ответа2

2

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

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

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

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

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
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, что защищает их от использования другими пользователями в Интернете (но не от других на "сервере" или "финале").

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .