SSH 전달은 로컬에서는 작동하지만 원격에서는 실패합니다.

SSH 전달은 로컬에서는 작동하지만 원격에서는 실패합니다.

원격 시스템에서 포트 SSH 로컬 전달을 만들었습니다.

ssh -N -L 127.0.0.1:3388:127.0.0.1:22 localhost

원격 시스템 자체에서 작동합니다.

telnet localhost 3388

보고

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4

그러나 로컬 시스템에서 이 전달을 사용하는 경우:

telnet remote.ip 3388

실패합니다:

Trying remote.ip...
telnet: Unable to connect to remote host: Connection refused

원격 시스템의 3388 포트가 방화벽이나 네트워크의 무언가에 의해 차단되었다고 생각할 수 있으므로 SSH 전달을 끄고 원격 시스템의 포트 3388에서 수신 대기하는 http 서버를 테스트했습니다.

python3 -m http.server 3388

그런 다음 로컬 컴퓨터에서 이 포트에 연결합니다.

telnet remote.ip 3388

결과는

Trying remote.ip...
Connected to remote.ip.
Escape character is '^]'.
quit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: 400</p>
        <p>Message: Bad request syntax ('quit ').</p>
        <p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
    </body>
</html>
Connection closed by foreign host.

이는 원격 컴퓨터의 포트 3388이 내 로컬 컴퓨터에 액세스할 수 있음을 의미합니다. 그러면 SSH 포워딩과 네트워크가 개인별로 모두 제대로 작동하지만 결합하면 실패하는 이유는 무엇일까요? 누군가 이 문제를 해결하는 방법을 알고 있나요? 감사해요.

답변1

localhost 포트 3388에서만 수신 대기하도록 SSH 로컬 전달을 설정했습니다. Localhost는 네트워크의 다른 장치에서 연결할 수 없으므로 원격으로 연결을 설정할 수 없습니다.

전달 포트를 네트워크의 다른 시스템에 노출하려면 192.168.1.5 또는 0.0.0.0(모든 인터페이스)과 같은 연결 가능한 주소에 바인딩해야 합니다.

예를 들어ssh -N -L 0.0.0.0:3388:127.0.0.1:22 localhost

관련 정보