동적으로 바인딩 된 openssh 역 터널을 위해 서버에 할당 된 포트를 확인하는 방법은 무엇입니까?


16

최신 버전의 OpenSSH에서 리버스 터널을 만들 때 사용 가능한 포트를 바인딩하기 위해 원격 포트 0을 지정할 수 있습니다.

-R [바인드 주소 :] 포트 : 호스트 : 호스트 포트

...

포트 인수가 '0'인 경우, 청취 포트는 서버에서 동적으로 할당되고 런타임에 클라이언트에보고됩니다.

openssh ssh 클라이언트 맨 페이지

내 질문은 (자동으로) 서버에서이 포트 할당을 결정하는 방법입니다. ssh 클라이언트를 실행하는 호스트에보고되는 것이 도움이되지는 않지만,이 포트에 연결하여 클라이언트의 서비스에 액세스하려고하는 대상에는보고되지 않습니다.

내가 생각할 수있는 두 가지 유사한 옵션이 실행 중입니다.

# netstat -ntlp

서버에서 sshd에 의해 127.0.0.1에 바인드 된 의심 포트를 찾거나

# lsof -p $PPID | grep TCP | grep LISTEN

그러나 이들 중 어느 것도 자동화 관점에서 유쾌하지 않으며 이러한 터널이 두 개 이상 생성되면 동적 포트를 원래 서비스 포트에 다시 연결할 수있는 방법이 없습니다.

SSH_CONNECTION 환경 변수와 같지만 활성 터널과 같이 sshd 서버 측에서 활성 터널 목록 (로컬 및 원격 포트 번호 모두)을 효과적으로 얻을 수없는 것이 있습니까?

어떤 맥락에서, 호스트에 잠재적으로 매우 많은 동시 역방향 터널을 만들고 많은 다른 호스트에서 동일한 포트 번호로 다시 터널링하려고합니다. TCP 스택이 자동으로 포트 풀을 관리하게하는 것이 가장 효과적인 방법입니다.


"-R 0 : xxxx : y"구문을 사용할 때 ssh는 "stderr에서 xxxx : y로 원격 전달하기 위해 할당 된 포트 49488을 출력합니다.
BlakBat

예, 문제는 정보를 서버 측으로 가져 오는 방법입니다. 더 많은 도움이 될 것입니다.
codedstructure

답변:


1

sshd_config 구성 파일에서 'LogLevel'을 DEBUG1 (또는 DEBUG 레벨)로 설정하면 sshd가 포트 번호를 /var/log/auth.log에 기록합니다.

로그 수준이 DEBUG 이상을 사용하면 많은 정보가 기록되므로 개인 정보 위험이 발생할 수 있습니다.

(/var/log/auth.log에서 관련 정보를 표시하기 위해 몇 줄을 제거했습니다)

Jun 24 06:18:24 radon sshd[9334]: Connection from 192.168.13.10 port 39193
Jun 24 06:18:24 radon sshd[9334]: Accepted publickey for lornix from 192.168.13.10 port 39193 ssh2
Jun 24 06:18:24 radon sshd[9334]: pam_unix(sshd:session): session opened for user lornix by (uid=0)
Jun 24 06:18:24 radon sshd[9334]: User child is on pid 9339
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on 0.0.0.0 port 0.
Jun 24 06:18:24 radon sshd[9339]: debug1: Allocated listen port 39813
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 0: new [port listener]
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on :: port 39813.
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 1: new [port listener]
Jun 24 06:18:27 radon sshd[9339]: Received disconnect from 192.168.13.10: 11: disconnected by user

이를 통해 연결 정보를 구문 분석 할 수있는 위치와 전달 된 포트 (이 경우 39813)를 확인할 수 있습니다.

두 컴퓨터 사이 에서이 명령 줄을 사용했는데 ssh 키 로그인이 설정되어 있으므로 암호 프롬프트 또는 지연이 없습니다.

-xenon- lornix:~> ssh -R "*:0:radon:22" -N -T radon
Allocated port 39813 for remote forward to radon:22

-N은 명령을 지정하지 않으며 -T는이 연결에 대한 tty 할당을 중지합니다.

포트 연결 정보를 유포하는 또 다른 방법은 클라이언트 측에서 정보를 구문 분석하고 이메일, 재버, 문자 메시지, 연기 신호 또는 비둘기를 보내 포트 번호를 필요한 사람에게 전달하는 것입니다.


0

ssh대상 시스템의 서버에 대한 연결을 열고 포트 번호와 함께 시스템 이름 / IP 주소 / 일련 번호 / 무엇을보고하는 프로그램으로 stderr를 파이프 할 수 있습니다. 이런 종류의 :

% ssh -R "*:0:radon:22" -N -T radon 2>&1 | sed "s/^/`uname -n` /" | netcat radon 3743
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.