SSH -L 터널이 더 이상 작동하지 않습니다.

SSH -L 터널이 더 이상 작동하지 않습니다.

내 스크립트를 실행하는 로컬 컴퓨터는 원격 서버의 데이터베이스에 액세스해야 합니다. 지난 주에 로컬 컴퓨터에서 다음을 수행할 수 있었습니다 ssh -f -N -T -L1081:localhost:3306 ueser@remoteserver -p2222 .

# netstat -an | egrep "tcp.*:1081.*"
tcp        0      0 127.0.0.1:1081          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:1081                :::*                    LISTEN

그런 다음 스크립트에 mysql 연결에 포트 1081을 사용하도록 지시했고 성공했습니다. 이 netstat 명령은 로컬에서 연결을 잘 수락하는 것을 보여 주지만 원격 시스템에서 동일한 검사를 수행하면 실제 mysql 서버가 1081을 전혀 수신하지 않습니다. 이전에는 그렇지 않았습니다.

sshd_config를 확인한 결과 터널링이 허용되는 것 같습니다. 즉, 구성 변경이 없습니다. 또한 네트워크의 다른 서버에 대한 터널을 열려고 시도했지만 작동하지 않았습니다. 내 명령이 쓰레기입니까? 다양한 조합을 시도했습니다 -f -T

답변1

나는 몇 가지 스케치를 만들었다.

SSH Tunnel 명령을 입력하는 머신은 다음과 같습니다."당신의 주인".

로컬에서 시작하는 SSH 터널


원격에서 시작하는 SSH 터널

소개하다

  1. 현지의:-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHost의미: SSH를 사용하여 연결 connectToHost하고 모든 연결 시도를 전달합니다.현지의 sourcePortonPort포트에 접근할 수 forwardToHost있는 이름의 컴퓨터 포트에 연결합니다 .connectToHost

  2. 외딴:-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHost의미: SSH를 사용하여 연결 connectToHost하고 모든 연결 시도를 전달합니다.외딴 sourcePortonPortforwardToHost로컬 컴퓨터에서 액세스할 수 있는 컴퓨터의 포트에 연결합니다 .

다른 옵션

  • -f터널을 활성 상태로 유지하기 위해 원격 서버에서 무언가를 실행할 필요가 없도록 인증 후 ssh에 백그라운드 자체를 지시하십시오.
  • -NSSH 연결을 원하지만 실제로는 원격 명령을 실행하고 싶지 않음을 나타냅니다. 생성 중인 것이 터널뿐인 경우 이 옵션을 포함하면 리소스를 절약할 수 있습니다.
  • -T대화형 셸을 생성하려는 것이 아니기 때문에 적절한 pseudo-tty 할당을 비활성화합니다.

당신의 모범

첫 번째 사진은 귀하의 상황을 나타냅니다. 당신이 그렇게한다면

ssh -L 1081:localhost:3306 remotehost

녹색 포트에 대한 모든 연결 시도는 1081SSH 터널을 통해 3306원격 호스트의 로컬 호스트, 즉 원격 호스트 자체의 분홍색 포트로 전달됩니다.

이제 귀하의 PHP 스크립트는 를 통과할 수 있지만 localhost:1081귀하 netstat의 명령은 remotehost1081을 수신하는 어떤 것도 찾을 수 없습니다(적어도 터널의 결과는 아닙니다). 핑크색 포트는 SSH가 생성한 리스닝 포트가 아니라 전달 대상이기 때문입니다. 그리고 포트로 전달 1081하는 대신 3306.

데이터베이스 서버가 실제로 포트에서 수신 대기하고 있습니까 3306, 아니면 그럴 수 있습니까 1081? 후자가 true인 경우 명령은 다음과 같이 변경되어야 합니다.

ssh -L 1081:localhost:1081 remotehost

데이터베이스가 포트에서 수신 대기하는 경우 1081netstat(ssh와 무관)을 사용하여 해당 포트를 찾아야 합니다.

답변2

원격 측이 포트 1081에서 수신 대기할 것이라고는 예상하지 못할 것입니다. mysql의 기본 포트인 원격 측 포트 3306으로 터널링을 요청하고 있습니다. 해당 포트에서 실제로 수신 대기 중인지 확인하는 것이 좋습니다. 또는 양쪽에서 포트 1081을 사용하려면 -L옵션을 -L1081:localhost:1081.

관련 정보