스크립트에서 SSH 연결을 사용할 때 SSH 포트 전달

스크립트에서 SSH 연결을 사용할 때 SSH 포트 전달

SSH를 통해 장치에 연결할 때 먼저 다음을 사용하여 SSH 메뉴로 이동하는 방법을 알고 있습니다 [ENTER} ~C. -L 4455:ip:80

이렇게 하면 로컬 시스템의 localhost:4455가 원격 장치의 포트 80으로 이동하게 됩니다.

이 수동 조치를 스크립트에 어떻게 넣을 수 있나요? 여기서 유일한 변수는 원격 장치의 IP 주소이지만 자동으로 가져오는 방법은 알고 있지만 ssh 메뉴에 명령을 푸시하는 방법은 모르겠습니다 -L 4455:ip:80.

답변1

소개하다

최근에 다음과 같은 기사를 접했습니다.https://hackertarget.com/ssh-examples-tunnels/SSH 연결과 포트 포워딩에 대해 많이 설명하고 있으니 한 번 보세요. 많은 것을 배울 수 있을 것입니다 :)

귀하와 관련된 내용은 다음과 같습니다.


SSH 터널링(포트 전달)

가장 간단한 SSH 터널은 터널 반대쪽 끝에 있는 다른 포트에 연결되는 로컬 시스템의 포트를 엽니다.

localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver

-L 매개변수를 분석해 보겠습니다. -L을 로컬 리스너로 처리합니다. 따라서 위의 예에서 포트 9999는 localhost에서 수신 대기하고 있으며 해당 포트는 원격 서버의 포트 80으로 전달됩니다. 127.0.0.1은 원격 서버의 localhost를 나타냅니다.

한 단계 더 나아가 봅시다. 아래 예에서는 로컬 네트워크의 다른 호스트에서 수신 대기 중인 포트에 연결할 수 있습니다.

localhost:~$ ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

이 예에서 우리가 연결하는 포트는 수신 대기 중인 웹 서버입니다. 프록시 서버나 다른 TCP 서비스일 수도 있습니다.


위의 내용은 이제 활성 SSH 셸을 엽니다. 포트만 전달하려고 하므로 이는 필요하지 않습니다. 명령에 -N 매개변수를 추가하여 원격 명령 실행을 건너뛸 수 있습니다(공개 쉘도 명령임). 이 ssh man페이지에서는 이에 대해서도 설명합니다.

-N Do not execute a remote command. This is useful for just forwarding ports.

따라서 다음 스크립트는 ctrl-c /kill을 누를 때까지 포트를 엽니다.

#!/usr/bin/env sh

echo "Forwarding ports"
ssh -N -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

sleep 명령을 실행하고 -N 매개변수를 제거하여 몇 초 동안 포트를 열 수도 있습니다.

ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver "sleep 10"

결정적인

이러한 SSH 터널에는 단점이 있습니다. 전달된 포트를 오랫동안 열어 두려면 다음 스레드, 특히 다음에 대한 섹션을 확인하는 것이 좋습니다 autossh.https://superuser.com/questions/37738/how-to-reliously-keep-an-ssh-tunnel-open

답변2

나는 최근에 당신이 요청한 것과 비슷한 일을 해야 했습니다. 그것은 ssh를 사용하여 포트 전달을 자동화하고 해당 주소에서 브라우저를 여는 스크립트를 갖는 것입니다. 이를 달성하기 위해 ssh 명령의 자동화된 동작을 쉘 스크립트와 결합했습니다. 저는 설명을 위해 MacOS를 사용하고 있습니다.

내 ~/.ssh/config 파일에는 다음과 유사한 항목이 있습니다.

Host remoteserver
     HostName [ip address here]
     User [username]
     IdentityFile [path to secret.pem]

그래서 당신이 들어가면 ssh remoteserver그곳으로 연결될 것이라는 것을 알고 있습니다. 그런 다음 이미 PATH에 있는 디렉터리에 다음과 같이 on이라는 별도의 스크립트를 설정합니다 monitor.chmod +x

#!/bin/bash
ssh -L 9999:localhost:80 $1 -N &
open -na Google\ Chrome --args --new-window "http://localhost:9999"

따라서 입력하는 동안 monitor remoteserverSSH를 사용하여 자동으로 포트 전달을 설정한 다음 적절한 주소에서 Google Chrome을 엽니다.

간단히 설명하자면, $1스크립트 파일 이름 뒤에 오는 매개변수를 나타냅니다. -N이는 원격 서버의 터미널 셸이 필요하지 않음을 의미합니다. &비차단 실행을 의미합니다. 없는 경우 브라우저 창을 여는 다음 명령은 SSHing이 완료될 때까지 기다립니다. 이는 원하는 바가 아닙니다. Open이것은 일반적으로 MacOS용 Darwin에서 사용하는 것입니다. Linux에 적합한 버전을 찾으려면 찾아보아야 하지만 너무 어렵지는 않습니다. -naCombine New Process and Application 플래그를 의미하며 --args --new-window이전 -n 플래그가 중복되는 것처럼 보이지만 내 경험상 Chrome에서 가장 잘 작동하는 것 같습니다.

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

관련 정보