나의 지금까지의 여행

나의 지금까지의 여행

SSH 터널링의 개념을 이해하지 못하는 것 같습니다. 제가 현재 처한 상황은 다음과 같습니다.

  • 섬기는 사람, ssh를 통해 액세스할 수 있으며, 그 안에 mysql db를 통해 액세스할 수 있습니다 localhost:3306.
  • 섬기는 사람두번째, SSH를 통해 액세스할 수 있습니다..
  • MySQL 인스턴스접근 가능두번째. 서버 자체에는 액세스할 수 없고 데이터베이스 서버에만 액세스할 수 있으므로 어디서든 ssh를 사용할 수 없습니다.. 모든 포트에만 연결할 수 있습니다.두번째.

내 목표는 MySQL 복제입니다도착하다, 여기서 A는 마스터 장치이고,- 노예. 에서 연결하고 싶다면 어떻게 해야 합니까?도착하다. 나는 그것이 다음과 같다고 상상한다.

C ─────────B:B_PORT────────> B
                            │││
         |/─────tnl A:22────┘││
A_db <────localhost:3306─────┘│
         |\─────tnl A:22──────┘

지금까지 나는 이것을 실행해 보았습니다.두번째 sudo ssh -L B_PORT:localhost:3306 A_user@A_ip -f -N그런데 아직 접근이 안되는 것 같아요~에서, 연결 시B_포트.

편집: ssh -L B_PORT:localhost:3306 A_user@A_ip -f -N -g@larsks가 제안한 대로 시도했지만 효과가 없었습니다. 그의 설명에 따르면 네트워크에 문제가 있을 수 있다고 믿게 되었습니다.

나의 지금까지의 여행

  1. 다음 위치에 터널 생성두번째그리고ssh -L B_PORT:localhost:3306 A_user@A_ip -f -N -g
  2. 연결하다도착하다두번째.
  3. 네트워크 통계가 활성화되었습니다.두번째여러 SYN_RECV 연결 표시도착하다두번째
  4. 내가 연결하려고 하면B_포트~에서두번째알겠어요
packet_write_wait: Connection to A port 22: Broken pipe
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
  1. SSH 연결이 끊어졌습니다두번째터널을 다시 열어야 합니다
  2. 보안 그룹 및 기타 네트워크 규칙을 사용해 보세요. 네트워크 인바운드 및 아웃바운드 활성화모든 것이 정상입니다!

답변1

-gSSH 명령줄에 옵션을 추가 해야 합니다 .

     -g      Allows remote hosts to connect to local forwarded ports.
             If used on a multiplexed connection, then this option
             must be specified on the master process.

B그러면 에서 이러한 연결이 이루어질 수 있도록 호스트에 전달된 포트가 노출됩니다 C. 이는 방화벽 구성이 B 이러한 연결을 허용한다고 가정합니다.

이 옵션은 로컬 포트에 사용되는 로컬 바인딩 주소를 변경합니다 -g. ssh그렇지 않은 경우 -g결과 -L 8000:localhost:8000는 다음과 같습니다.

$ netstat -tln | grep 8000
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:8000                :::*                    LISTEN     

보시다시피, 이 경우 두 소켓 모두 루프백 주소( 127.0.0.1ipv4 및 ::1ipv6의 경우)에 바인딩됩니다.

이를 통해 -g우리는 다음을 얻습니다.

$ netstat -tln | grep 8000
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN     
tcp6       0      0 :::8000                 :::*                    LISTEN     

ssh이 경우 루프백 주소 대신 와일드카드 주소에 대한 바인딩이 이루어졌음 을 확인할 수 있습니다 .

답변2

sudo? sudo그것이 모든 문제에 대한 답은 아니며, 종종 그것이 이유이기도 합니다.

나는 이것이 당신이 원하는 것이라고 생각합니다.

ssh -L local_port:remote_ip:remote_port jump_user@jump_ip
ssh -L C_PORT:A_ip:3306 B_user@B_ip -f -N
  • 원격은 점프의 관점에서 보입니다.
  • 현지인의 관점에서 본 점프

관련 정보