Как веб-разработчик, я часто работаю с удаленными серверами через 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
Обычно я не загадываю так далеко…