원격 시스템에서 포트 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