짧은 버전은 아래 편집 내용을 참조하세요.
서버에서 SSH 터널의 상태를 표시하는 데 문제가 있습니다.
다음은 몇 가지 관련 정보입니다.
user001 = remote client's username
123.123.123.123 = ssh server's ip
111.222.111.222 = database server
이제 테스트를 위해 하나의 원격 클라이언트만 연결하겠습니다. 요청한 두 개의 역방향 터널을 볼 수 있습니다(필터링된 출력).
lsof -i -P
sshd 14652 user001 8u IPv4 1171285 0t0 TCP localhost:2000 (LISTEN)
sshd 14652 user001 9u IPv4 1171287 0t0 TCP my.domain.com:2001 (LISTEN)
netstat -atpe --numeric-ports
tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN user001 1171285 14652/sshd: user001
tcp 0 0 123.123.123.123:2001 0.0.0.0:* LISTEN user001 1171287 14652/sshd: user001
user001에 의해 시작된 것으로 보이지만 생성된 일반(-L) 터널은 나열되지 않습니다 lsof
. 이와 관련하여 내가 찾을 수 있는 유일한 정보는 디스플레이를 통해서입니다 netsat
. 터널 자체는 아닌 것처럼 보이지만 SSH 서버와 데이터베이스 서버 간의 네트워크 연결은 다음과 같습니다.
tcp 0 0 123.123.123.123:60299 111.222.111.222:52849 TIME_WAIT root 0 -
tcp 0 0 123.123.123.123:60300 111.222.111.222:52849 TIME_WAIT root 0 -
이것은 루트 아래에 표시될 뿐만 아니라 로컬 IP만 표시하므로 누구의 터널/연결인지 알 수 있는 방법이 없기 때문에 피타입니다. 50개 이상의 원격 클라이언트가 모두 연결되면 문제 해결이 엉망이 됩니다.
질문:
SSH 터널을 표시하는 더 좋은 방법이 있습니까? 더 나은 명령? 어떤 프로그램?
원격 클라이언트의 사용자 아래에 이를 표시하거나 최소한 원격 클라이언트의 IP를 표시할 수 있는 방법이 있습니까?
왜 lsof
표시되지 않습니까?
감사해요.
- - -편집하다- - -
글쎄, 처음부터 시작하고 싶다면 문제의 단순화된 버전은 다음과 같습니다.
SSH 클라이언트연결됨SSH 서버로컬 포트 100에서 포트 5000으로 터널을 요청합니다( -L 사용).데이터베이스 서버동일한 네트워크에서SSH 서버.
그래서 우리는 다음과 같은 터널을 얻습니다:
클라이언트: 100 -----> SSH 서버 -----> 데이터베이스 서버: 5000
로그인할 때 터널이 작동 중인지 확인하는 방법SSH 서버?
나는 보고 싶지 않다.SSH 서버함께 일하기데이터베이스 서버터널이 어떤 재료로 만들어졌는지 보고 싶어요SSH 클라이언트여전히 활동적입니다.
netstat에 표시된 정보는 서버가 SSH 서버의 임의 포트에서 포트 5000으로 활성 연결을 가지고 있다는 것만 보여주며, 이 연결이 설정된 이유(연결된 pid 없음)는 밝히지 않으며 루트를 소유자 (완전히 쓸모 없음).
답변1
TIME_WAIT에 2개의 연결이 발생한 것으로 확신합니다.섬기는 사람연결이 종료됩니다. 이는 서버가 루트로 실행 중인 경우 의미가 있습니다.
-L 옵션은 실제 터널을 생성하지 않고 터널링 기능만 생성한다는 점에 유의하십시오. 입력 IP/포트에 연결하면 SSH는 실제로 대상 IP/포트에 대한 터널을 생성합니다. 그런 다음 누군가 연결을 닫을 때까지 lsof/netstat/etc에서 ESTABLISHED 상태의 연결을 볼 수 있습니다.
다른 터미널 창을 열고 아무 것도 입력하지 않고 간단히 "telnet IP port"(-L로 지정한 터널 프런트 엔드의 IP/포트여야 함)를 입력하여 터널을 활성화합니다. 그런 다음 서버 창을 열고 lsof/netstat 명령을 실행하여 실제 연결이 설정되었는지 확인하세요.
도움이 되었기를 바랍니다. 알려주세요!