내가 알 수있는 한, 이것은 WSL의 버그입니다. Microsoft가 다음 빌드에서이 문제를 해결하기를 바랍니다. 그러나 지금은 약간 못생긴 해킹을 사용할 수 있습니다.
업데이트 # 1 : 확실히 버그. Github 에서이 문제 를 발견 했습니다 . 이 모든 것을 끝내고 싶지 않다면 쉘을 다시 시작하는 해결책을 제안했습니다.
TL; DR SSH 설정을 끝내려면 이것을 추가하십시오 (보통 ~/.ssh/config
) :
Host *
ProxyCommand nc %h %p %r
그것이 작동하는 이유는 다음과 같습니다 우리의 SSH 문제 때문에 방화벽 문제가되지 않습니다 nc
및 telnet
작업 동일한 호스트와 포트 (시도에 telnet <host> <port>
나 nc <host> <port>
: 당신은 같은 것을 참조한다 SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
). 이것은 우리가 유리하게 사용할 수 있습니다.
SSH를 사용하면 표준 입력을 받아 ProxyCommand
옵션을 통해 서버의 포트로 보내는 프록시를 사용할 수 있습니다. 일반적으로 점프 호스트라고도하는 중간에있는 요새 SSH 서버를 사용하여 보호 된 호스트에 네트워크로 터널링하는 데 사용됩니다 (자세한 내용은 이 링크 참조 ).
이 핵은 SSH에게 점프 호스트가없는 프록시를 사용하도록 지시합니다. 따라서 모든 네트워크 리소스 할당을 Netcat으로 푸시하여 SSH의 TCP 리소스 할당에 실패했습니다. SSH는 네트워크 연결없이 SSH 작업을 수행하며 Netcat은 TCP 연결을 통해 원시 데이터를 SSH 서버로 보냅니다.
경고 : 이렇게하면 ProxyCommand
모든 호스트의가 수정되므로을 사용하는 다른 SSH 구성 호스트와 상호 작용하는 방법을 모르겠습니다 ProxyCommand
. 이것을 테스트 할 수있는 몇 대의 서버가 있으며이 답변을 결과로 업데이트 할 것입니다. 유해한 부작용이 없을 가능성이 있지만 보장 할 수는 없습니다.
업데이트 # 2 : 몇 대의 서버로 몇 가지 테스트를 수행했는데 작동하는 것 같습니다. SSH는 여러 항목이 적용될 때 구성에서 최상위 항목을 사용합니다. 따라서이 ProxyCommand
핵 위에 존재 하는 기존 선물은 그것을 대체 할 것입니다. 새 SSH 명령이 실행될 때 SSH 구성을 다시 읽고 다른 항목이없는 경우 ProxyCommand
SSH는 hack을 사용 ProxyCommand
하여 "가장 바깥 쪽"SSH 세션에만 적용 할 수 있습니다. 경고의 말씀 : 설정 파일의 맨 위에 (또는 SSH하려는 항목 위에) 해킹을 넣으면 SSH 세션이 필요한 SSH 세션이 ProxyCommand
다른 세션을 무시 ProxyCommand
하고 대신 호스트 주소를 확인하고 연결을 시도합니다. Netcat으로 직접.