2015-04-29 3 views
39

я в настоящее время работает кучу:SSH -L вперед несколько портов

sudo ssh -L PORT:IP:PORT [email protected] 

, где ИС является объектом защищенной машины, и порт представляет порты я пересылки.

Это потому, что я использую множество приложений, к которым я не могу получить доступ без этой пересылки. После этого я могу получить доступ через localhost:PORT.

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

Мое решение состоит в том, чтобы открыть 4 оболочки и постоянно искать мою историю назад, чтобы искать точно, какие порты необходимо переслать и т. Д., А затем запустить эту команду - по одной в каждой оболочке (необходимо заполнить пароли и т. Д.).

Если бы только я мог бы сделать что-то вроде:

sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 [email protected] 

то, что бы уже реально помочь.

Есть ли способ сделать это проще?

ответ

68

Опция -L снова используется в той же команде. Каждый раз с разными портами.

30

Точно, что ответили NaN, вы указываете несколько аргументов -L. Я все время это делаю. Вот пример нескольких проброса портов:

ssh remote-host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22 

Примечание: Это так же, как -L localhost:8822:REMOTE_IP_1:22 если вы не укажете localhost.

Теперь с этим, вы можете теперь (от другого терминала) делают:

ssh localhost -p 8822 

для подключения к REMOTE_IP_1 порт 22

и аналогично

ssh localhost -p 9922 

для подключения к REMOTE_IP_2 на порт 22

Конечно, нет ничего, что помешало бы вам обернуть это в скрипт или автоматизировать его, если у вас есть много разных хостов/портов для пересылки и для определенных конкретных.

Надеюсь, это поможет.

+0

Отличный пример, спасибо! – jsruok

11

Вы можете использовать следующую функцию Баш (просто добавить его в свой ~/.bashrc):

function pfwd { 
    for i in ${@:2} 
    do 
    echo Forwarding port $i 
    ssh -N -L $i:localhost:$i $1 & 
    done 
} 

Пример использования:

pfwd hostname {6000..6009} 
1

jbchichoko и Юваль дали жизнеспособные решения. Но ответ jbchichoko не является гибким ответом как функцией, и открытые туннели по ответу yuval не могут быть закрыты ctrl+c, потому что он работает в фоновом режиме.Я даю свое решение под совместным решением двух недостатков:

Defing функцию в ~/.bashrc или ~/.zshrc:

# fsshmap multiple ports 
function fsshmap() { 
    echo -n "-L 1$1:127.0.0.1:$1 " > $HOME/sh/sshports.txt 
    for ((i=($1+1);i<$2;i++)) 
    do 
    echo -n "-L 1$i:127.0.0.1:$i " >> $HOME/sh/sshports.txt 
    done 
    line=$(head -n 1 $HOME/sh/sshports.txt) 
    cline="ssh "$3" "$line 
    echo $cline 
    eval $cline 
} 

пример запуска функции:

fsshmap 6000 6010 hostname 

Результат в этом примере:

Вы можете получить доступ к 127.0.0.1:16000~16009 так же, как hostname:6000~6009

Смежные вопросы