В настоящее время у меня есть несколько:
sudo ssh -L PORT:IP:PORT root@IP
где IP - это цель защищенной машины, а PORT представляет порты, которые я пересылаю.
Это потому, что я использую много приложений, к которым я не могу получить доступ без этой пересылки. После этого я могу получить доступ через localhost:PORT
.
Основная проблема возникла теперь, когда у меня на самом деле есть 4 из этих портов, которые я должен пересылать.
Мое решение - открыть 4 оболочки и постоянно искать в моей истории в обратном направлении, чтобы точно определить, какие порты необходимо перенаправить и т. Д., А затем запустить эту команду - по одной в каждой оболочке (необходимо вводить пароли и т. Д.).
Если бы я только мог сделать что-то вроде:
sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP
тогда это уже действительно поможет.
Есть ли способ сделать это проще?
источник
Именно на то, что ответил NaN , вы указываете несколько аргументов -L. Я все время это делаю. Вот пример переадресации нескольких портов:
Примечание : это то же самое, как
-L localhost:8822:REMOTE_IP_1:22
если бы вы не указалиlocalhost
.Теперь с этим вы можете (с другого терминала) делать:
подключиться к
REMOTE_IP_1
порту22
и аналогично
подключиться к
REMOTE_IP_2
порту22
Конечно, ничто не мешает вам обернуть это в сценарий или автоматизировать его, если у вас есть много разных хостов / портов для пересылки и к определенным конкретным.
Надеюсь это поможет.
источник
By default, anyone (even on different machines) can connect to the specified port on the SSH client machine. However, this can be restricted to programs on the same host by supplying a bind address: ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
ssh.com/ssh/tunneling/exampleВы можете использовать следующую функцию bash (просто добавьте ее в свой
~/.bashrc
):Пример использования:
источник
-f
для работы в фоновом режимеДля людей, которые перенаправляют несколько портов через один и тот же хост, можно настроить что-то подобное в своем ~ / .ssh / config.
Host all-port-forwards Hostname 10.122.0.3 User username LocalForward PORT_1 IP:PORT_1 LocalForward PORT_2 IP:PORT_2 LocalForward PORT_3 IP:PORT_3 LocalForward PORT_4 IP:PORT_4
и становится просто
ssh all-port-forwards
прочь.источник
jbchichoko и yuval предложили жизнеспособные решения. Но ответ jbchichoko не является гибким ответом как функция, и открытые туннели с помощью ответа yuval не могут быть закрыты,
ctrl+c
потому что он работает в фоновом режиме. Ниже я даю свое решение, устраняющее оба недостатка:Определение функции в
~/.bashrc
или~/.zshrc
:Пример запуска функции:
Результат этого примера:
Вы можете получить доступ так
127.0.0.1:16000~16009
же, какhostname:6000~6009
источник
Одним из преимуществ входа на сервер с переадресацией портов является облегчение использования Jupyter Notebook. Эта ссылка дает отличное описание того, как это сделать. Здесь я хотел бы сделать некоторые выводы и дополнения для всех вас, ребята.
Ситуация 1. Войдите с локального компьютера с именем Host-A (например, с вашего собственного ноутбука) на удаленный рабочий компьютер с именем Host-B.
Затем вы можете открыть браузер и ввести: http: // localhost: port_A /, чтобы выполнять свою работу на Host-B, но видеть его в Host-A.
Ситуация 2. Войдите с локального компьютера с именем Host-A (например, с вашего собственного ноутбука) на удаленный компьютер с именем Host-B и оттуда войдите на удаленный рабочий компьютер с именем Host-C. Обычно это характерно для большинства аналитических серверов в университетах и может быть достигнуто с помощью двух
ssh -L
связанных с-t
.Затем вы можете открыть браузер и ввести: http: // localhost: port_A /, чтобы выполнять свою работу на Host-C, но видеть это в Host-A.
Ситуация 3. Войдите с локального компьютера с именем Host-A (например, с вашего собственного ноутбука) на удаленный компьютер с именем Host-B и оттуда войдите на удаленный рабочий компьютер с именем Host-C и, наконец, войдите на удаленный рабочий компьютер Host- D. Обычно это не так, но когда-нибудь может случиться. Это продолжение ситуации 2, и ту же логику можно применить на большем количестве машин.
Затем вы можете открыть браузер и ввести: http: // localhost: port_A /, чтобы выполнять свою работу на Host-D, но видеть это в Host-A.
Обратите внимание, что port_A, port_B, port_C, port_D могут быть случайными числами, кроме общих номеров портов, перечисленных здесь . В Ситуации 1 port_A и port_B могут быть одинаковыми для упрощения процедуры.
источник
В моей компании и мне, и членам моей команды нужен доступ к 3 портам недостижимого «целевого» сервера, поэтому я создал постоянный туннель (то есть туннель, который может работать в фоновом режиме неограниченное время, см. Параметры
-f
и-N
) от доступного сервера к целевой. В командной строке доступного сервера я выполнил:Я использовал пользователя,
root
но ваш собственный пользователь будет работать. Вам нужно будет ввести пароль выбранного пользователя (даже если вы уже подключены к доступному серверу с этим пользователем).Теперь порт 8822 доступной машины соответствует порту 22 целевой машины (для ssh / PuTTY / WinSCP), а порты 9006 и 9100 на достижимой машине соответствуют тем же портам целевой машины (в моем случае на них размещены две веб-службы. ).
источник
Я разработал локомотив для помощи с пересылкой ssh. Его можно использовать для совместного использования портов 5000 и 7000 на удаленном локальном компьютере на одних и тех же портах:
источник
Если вам нужно простое решение, которое работает в фоновом режиме и его легко убить - используйте управляющий сокет.
источник
Вот решение, вдохновленное решением Ювала Ацмона.
У него есть несколько преимуществ по сравнению с исходным решением:
Вы можете использовать его как:
И, наконец, убить их всех с помощью
tnlkill
.источник
Вы можете использовать эту функцию zsh (вероятно, работает и с bash) (вставьте ее
~/.zshrc
):Примеры:
ashL db@114.39.161.24 6480 7690 7477
ashL db@114.39.161.24 {6000..6050} # Forwards the whole range. This is simply shell syntax sugar.
источник