SSH 원격 포트 전달을 사용하여 동적으로 할당 된 포트 번호 기록

크레이그 프랜시스

SSH 문서에서 원격 포트 전달에 대해 다음과 같이 말합니다.

포트 인수가 '0'이면 수신 포트가 서버에 동적으로 할당되고 런타임에 클라이언트에보고됩니다. -O forward와 함께 사용하면 할당 된 포트가 표준 출력으로 인쇄됩니다.

이 포트 번호를 어떻게 얻거나 사용할 수 있습니까?

stdout에 인쇄 된 것을 볼 수 있지만 파일에 기록하고 싶습니다.


NAT 방화벽 뒤에있는 컴퓨터가 몇 대 있는데, 모두 중앙 서버에 연결하고 SSH를 통해 다시 연결할 수 있도록 터널을 설정합니다.

현재이 작업을 수행하기 위해 고유 한 포트 번호 (예 : 12345)를 지정합니다.

ssh -R 12345:localhost:22 1.2.3.4

에 연결 1.2.3.4하고 사용할 수 있으므로 작동 합니다.

ssh -p 12345 localhost

그러나 기록을 유지하는 것이 고통스럽기 때문에 각 컴퓨터에 대해 포트 번호를 하드 코딩하고 싶지 않습니다. 결국 연결이 실패하면 다시 연결이 작동하지 않는 경우가 있습니다 (포트가 여전히 "사용 중"이기 때문에).

대신 다음을 사용할 수 있습니다.

ssh -R 0:localhost:22 1.2.3.4

보고하는 곳 :

Allocated port 41191 for remote forward to localhost:22

하지만 그 포트 번호를 어떻게 기록합니까?

나는 그것에 접근하는 방법에 대해 명백한 것을 놓치고 있다고 가정하고 있습니다.

포트 번호를 파일에 쓸 수있는 쉘 스크립트에서 뭔가를 할 수 있습니까?


이 작업을 수행하는 여러 서버가있을 때 작동하지 않는 한 가지 옵션은 수신 대기 포트를 확인하는 것입니다.

sudo netstat -tpln | grep "127.0.0.1" | grep sshd

약간 낭비적인 것처럼 보이지만 먼저 포트 번호를 얻고 연결을 끊은 다음 사용할 수 있습니다.

port=`ssh -R 0:localhost:22 1.2.3.4 exit 2>&1 | grep 'Allocated port' | awk '/port/ { print $3 }'`;

ssh 1.2.3.4 record-port.sh "my-name" "${port}";

ssh -NTC -o ConnectTimeout=10 -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes -R "${port}:localhost:22" 1.2.3.4;

더 나쁜 또 다른 옵션은 직접 포트를 임의로 선택하고 사용하기 전에 기록하는 것입니다.

while true; do

  port=$(((RANDOM %= 1000) + 2000));

  ssh 1.2.3.4 record-port.sh "my-name" "${port}";

  ssh -NTC -o ConnectTimeout=10 -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes -R "${port}:localhost:22" 1.2.3.4;

  sleep 3;

done
카밀 마시오 로프 스키

포트 전달없이 먼저 마스터 연결을 연결합니다.

ssh -NMS /path/to/socket user@server

/path/to/socket당신에게 달려 있습니다. 거기에 소켓이 생성됩니다. 사용하려는 스크립트에서 -f.

그런 다음 -S /path/to/socket -O …마스터 연결을 제어하는 ​​데 사용 합니다. 예를 들어 여전히 작동하는지 확인할 수 있습니다.

ssh -S /path/to/socket -O check placeholder

placeholder중요하지 않습니다 /path/to/socket. 제어하려는 마스터 연결을 식별하는 것입니다.

이제 포트 전달을 요청할 수 있습니다.

ssh -S /path/to/socket -O forward -R 0:localhost:22 placeholder

이 명령은 포트를 알려줍니다. 즉시 종료됩니다. 이는 출력을 캡처 할 수 있음을 의미합니다. 잃어버린 것은 없습니다. 명령을 반복하면 두 번째 포트를 동일한 대상으로 전달하는 대신 동일한 포트를 다시 알려줍니다. 따라서 출력을 변수에 저장해 보겠습니다.

port="$(ssh -S /path/to/socket -O forward -R 0:localhost:22 placeholder)"

그리고 이제 변수를 사용할 수 있습니다.

완전성을 위해 다음은 전달을 취소하는 방법입니다.

ssh -S /path/to/socket -O cancel -R 0:localhost:22 placeholder

마스터 연결을 종료하기 전에 명시 적으로 취소 할 필요는 없습니다. 다음과 같이 종료합니다.

ssh -S /path/to/socket -O exit placeholder

위의 모든 명령이 가장 기본적인 스크립트에 필요한 것은 아닙니다. 다음이 필요합니다.

ssh -fNMS /path/to/socket user@server
port="$(ssh -S /path/to/socket -O forward -R 0:localhost:22 placeholder)"
   # anything you want, now you know the port
ssh -S /path/to/socket -O exit placeholder

처리 할 로직이있을 수 있습니다 connection refused.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

여러 포트를 사용한 SSH 원격 포트 전달

분류에서Dev

원격 포트 전달을 사용하여 이전 Linux 상자에 대한 SSH

분류에서Dev

원격 (-g)을 사용한 SSH 동적 포트 전달이 작동하지 않습니다.

분류에서Dev

SSH 동적 포트를 VPN으로 전달하여 전체 시스템에 사용할 수 있습니까?

분류에서Dev

원격 포트를 원격 호스트로 전달

분류에서Dev

단일 단계 ssh 포트 전달이 작동하지 않지만 ssh 포트 전달이 원격 점프 서버 및 원격 로컬 호스트에서 별도로 수행되는 경우에만 작동합니까?

분류에서Dev

SSH 포트 로컬 IRC 서버를 원격 서버로 전달

분류에서Dev

할당 된 배열을 서브 루틴에서 포트란의 메인 프로그램으로 전달; 사용 또는 모듈? 상호 작용?

분류에서Dev

SSH를 사용하여 특정 포트에 대한 로컬 원격 로컬 터널을 만드는 방법

분류에서Dev

SSH 원격 전달 포트가 외부 연결을 허용하지 않음 (`GetewayPorts yes`를 사용하더라도)

분류에서Dev

동적 포트 전달을 통해 프록시를 통한 ssh

분류에서Dev

scp / ssh 터널을 사용하여 원격 호스트에서 다른 호스트로 파일 복사

분류에서Dev

원격 포트 전달을 통해 jumphost를 통한 SSH 세션

분류에서Dev

원격 포트 전달을 통해 jumphost를 통한 SSH 세션

분류에서Dev

사용자 지정 호스트 이름으로 ssh 포트 전달

분류에서Dev

암호로 보호 된 SSH 사용자에 대한 포트 전달을 금지하는 방법은 무엇입니까?

분류에서Dev

구조체 C ++에 대한 포인터를 사용하여 동적으로 할당 된 배열 만들기

분류에서Dev

동적으로 할당 된 배열을 포함하는 구조체 배열을 동적으로 할당

분류에서Dev

SSH 원격 액세스를 활성화하는 포트 전달이 작동하지 않습니다.

분류에서Dev

ssh 및 EOF를 사용하여 bash 스크립트에서 원격 호스트에 변수 전달

분류에서Dev

`code` 명령을 사용하여 원격 SSH 호스트에 어떻게 연결할 수 있습니까?

분류에서Dev

bash 스크립트에서 ssh를 사용하여 원격 호출을 중첩 할 수 있습니까?

분류에서Dev

SSH는 서버에서 프로세스를 종료하는 대신 원격으로 포트 전달을 비활성화합니다.

분류에서Dev

명시 적 포트와 다른 사용자 이름으로 두 원격 장치간에 파일을 재 동기화하는 방법은 무엇입니까?

분류에서Dev

SSH 로컬 포트 전달

분류에서Dev

ssh 설정`permitopen = "localhost : 4000"`은 원격 포트 전달을 제한하지 않습니다.

분류에서Dev

로컬 시스템의 원격 호스트에 대한 포트 전달

분류에서Dev

로컬 시스템의 원격 호스트에 대한 포트 전달

분류에서Dev

Nagios에서 모니터링하는 각 호스트 원격에 대해 서로 다른 SSH 포트 구성

Related 관련 기사

  1. 1

    여러 포트를 사용한 SSH 원격 포트 전달

  2. 2

    원격 포트 전달을 사용하여 이전 Linux 상자에 대한 SSH

  3. 3

    원격 (-g)을 사용한 SSH 동적 포트 전달이 작동하지 않습니다.

  4. 4

    SSH 동적 포트를 VPN으로 전달하여 전체 시스템에 사용할 수 있습니까?

  5. 5

    원격 포트를 원격 호스트로 전달

  6. 6

    단일 단계 ssh 포트 전달이 작동하지 않지만 ssh 포트 전달이 원격 점프 서버 및 원격 로컬 호스트에서 별도로 수행되는 경우에만 작동합니까?

  7. 7

    SSH 포트 로컬 IRC 서버를 원격 서버로 전달

  8. 8

    할당 된 배열을 서브 루틴에서 포트란의 메인 프로그램으로 전달; 사용 또는 모듈? 상호 작용?

  9. 9

    SSH를 사용하여 특정 포트에 대한 로컬 원격 로컬 터널을 만드는 방법

  10. 10

    SSH 원격 전달 포트가 외부 연결을 허용하지 않음 (`GetewayPorts yes`를 사용하더라도)

  11. 11

    동적 포트 전달을 통해 프록시를 통한 ssh

  12. 12

    scp / ssh 터널을 사용하여 원격 호스트에서 다른 호스트로 파일 복사

  13. 13

    원격 포트 전달을 통해 jumphost를 통한 SSH 세션

  14. 14

    원격 포트 전달을 통해 jumphost를 통한 SSH 세션

  15. 15

    사용자 지정 호스트 이름으로 ssh 포트 전달

  16. 16

    암호로 보호 된 SSH 사용자에 대한 포트 전달을 금지하는 방법은 무엇입니까?

  17. 17

    구조체 C ++에 대한 포인터를 사용하여 동적으로 할당 된 배열 만들기

  18. 18

    동적으로 할당 된 배열을 포함하는 구조체 배열을 동적으로 할당

  19. 19

    SSH 원격 액세스를 활성화하는 포트 전달이 작동하지 않습니다.

  20. 20

    ssh 및 EOF를 사용하여 bash 스크립트에서 원격 호스트에 변수 전달

  21. 21

    `code` 명령을 사용하여 원격 SSH 호스트에 어떻게 연결할 수 있습니까?

  22. 22

    bash 스크립트에서 ssh를 사용하여 원격 호출을 중첩 할 수 있습니까?

  23. 23

    SSH는 서버에서 프로세스를 종료하는 대신 원격으로 포트 전달을 비활성화합니다.

  24. 24

    명시 적 포트와 다른 사용자 이름으로 두 원격 장치간에 파일을 재 동기화하는 방법은 무엇입니까?

  25. 25

    SSH 로컬 포트 전달

  26. 26

    ssh 설정`permitopen = "localhost : 4000"`은 원격 포트 전달을 제한하지 않습니다.

  27. 27

    로컬 시스템의 원격 호스트에 대한 포트 전달

  28. 28

    로컬 시스템의 원격 호스트에 대한 포트 전달

  29. 29

    Nagios에서 모니터링하는 각 호스트 원격에 대해 서로 다른 SSH 포트 구성

뜨겁다태그

보관