Programing

ssh -L 여러 포트 전달

lottogame 2020. 9. 6. 11:48
반응형

ssh -L 여러 포트 전달


저는 현재 다음을 실행하고 있습니다.

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

그러면 이미 정말 도움이 될 것입니다.

더 쉽게 할 수있는 방법이 있습니까?


-L동일한 명령에서 옵션을 다시 사용하십시오 . 다른 포트로 매번.


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

물론,이를 스크립트로 래핑하거나 특정 특정 포트로 전달할 호스트 / 포트가 많은 경우 자동화하는 것을 막을 수는 없습니다.

도움이 되었기를 바랍니다.


다음 bash 함수를 사용할 수 있습니다 (단지에 추가하십시오 ~/.bashrc).

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

사용 예 :

pfwd hostname {6000..6009}

jbchichoko와 yuval은 실행 가능한 솔루션을 제공했습니다. 그러나 jbchichoko의 대답은 함수로서 유연한 대답이 아니며 yuval의 대답에 의해 열린 터널 ctrl+c은 백그라운드에서 실행되기 때문에 종료 될 수 없습니다 . 두 가지 결함을 모두 해결하는 아래 솔루션을 제공합니다.

~/.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


동일한 호스트를 통해 여러 포트를 전달하는 사람들 의 경우 ~ / .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집니다.


One of the benefits of logging into a server with port forwarding is facilitating the use of Jupyter Notebook. This link provides an excellent description of how to it. Here I would like to do some summary and expansion for all of you guys to refer.

Situation 1. Login from a local machine named Host-A (e.g. your own laptop) to a remote work machine named Host-B.

ssh user@Host-B -L port_A:localhost:port_B
jupyter notebook --NotebookApp.token='' --no-browser --port=port_B

Then you can open a browser and enter: http://localhost:port_A/ to do your work on Host-B but see it in Host-A.

Situation 2. Login from a local machine named Host-A (e.g. your own laptop) to a remote login machine named Host-B and from there login to the remote work machine named Host-C. This is usually the case for most analytical servers within universities and can be achieved by using two ssh -L connected with -t.

ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C
jupyter notebook --NotebookApp.token='' --no-browser --port=port_C

Then you can open a browser and enter: http://localhost:port_A/ to do your work on Host-C but see it in Host-A.

Situation 3. Login from a local machine named Host-A (e.g. your own laptop) to a remote login machine named Host-B and from there login to the remote work machine named Host-C and finally login to the remote work machine Host-D. This is not usually the case but might happen sometime. It's an extension of Situation 2 and the same logic can be applied on more machines.

ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C -t ssh -L port_C:localhost:port_D user@Host-D
jupyter notebook --NotebookApp.token='' --no-browser --port=port_D

Then you can open a browser and enter: http://localhost:port_A/ to do your work on Host-D but see it in Host-A.

Note that port_A, port_B, port_C, port_D can be random numbers except common port numbers listed here. In Situation 1, port_A and port_B can be the same to simplify the procedure.


I've developed loco for help with ssh forwarding. It can be used to share ports 5000 and 7000 on remote locally at the same ports:

pip install loco

loco listen SSHINFO -r 5000 -r 7000

You can use this zsh function (probably works with bash, too)(Put it in ~/.zshrc):

ashL () {
    local a=() i
    for i in "$@[2,-1]"
    do
        a+=(-L "${i}:localhost:${i}")
    done
    autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NT "$1" "$a[@]"
}

Examples:

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.

참고URL : https://stackoverflow.com/questions/29936948/ssh-l-forward-multiple-ports

반응형