Как веб-разработчик, я часто работаю с удаленными серверами через SSH. Иногда я работаю с файлом на удаленном сервере и хочу вернуть его на свой локальный компьютер (например, вывод скрипта, CSV или файл журнала). Один из способов, которым я могу легко вернуть их, — открыть обратный SSH-порт вдоль моего соединения с сервером.

tl;dr откройте обратное соединение с локальным компьютером и scp создайте файл home

# from the remote shell, get into the SSH prompt
$ <enter> ~C
ssh> -R 127.0.0.1:2222:127.0.0.1:22
$ scp -P2222 move_this_file.txt [email protected]:~/Downloads

Давайте посмотрим, что здесь происходит.

$ <enter> ~C

Это клавиша «ввод», за которой следует «тильда», за которой следует заглавная «С». Эта последовательность нажатий клавиш приведет вас к командной строке ssh и даст вам новое приглашение.

ssh> -R 127.0.0.1:2222:127.0.0.1:22

Из нового приглашения мы собираемся запросить удаленный порт переадресации…

ssh> -R 127.0.0.1:2222:127.0.0.1:22

С удаленной машины через порт 2222…

ssh> -R 127.0.0.1:2222:127.0.0.1:22

На локальную машину через порт 22.

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

$ netstat -nap | grep 2222
tcp        0      0 127.0.0.1:2222          0.0.0.0:*  

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

$ scp -P2222 move_this_file.txt [email protected]:~/Downloads

В приведенном выше случае я отправляю файл с именем move_this_file.txt на свой локальный компьютер в папку Downloads из моего домашнего каталога.

Когда вы закроете соединение SSH с удаленным сервером, перенаправление портов также будет закрыто.

Если вы работаете в MacOS, на вашем компьютере предварительно установлен SSH-сервер, который не активен, вы можете включить его из командной строки:

$ sudo systemsetup -setremotelogin on

Если вы достаточно дальновидны, вы можете открыть этот удаленный порт SSH при первом подключении к удаленному серверу:

$ ssh -R 127.0.0.1:2222:127.0.0.1:22 remote_user@remote_server

Обычно я не загадываю так далеко…