SSHFS를 사용하여 SSH를 통해 WSL에서 Ubuntu로 폴더 마운트

SSHFS를 사용하여 SSH를 통해 WSL에서 Ubuntu로 폴더 마운트

SSHFS를 사용하여 WSL 내부에 있는 폴더를 Ubuntu 20.4 시스템에 마운트하려고 하는데 항상 "해당 파일이나 디렉터리가 없습니다."라는 메시지가 나타납니다. 내가 어떻게 해?

내가 디렉토리를 마운트하려고 시도한 확실한 방법은 다음과 같습니다.

sshfs user@remotehost:"\\wsl$\Ubuntu-20.04" /home/user/Remote/

답변1

짧은 답변:

WSL에 액세스하려면 Windows 호스트를 SSH 점프 호스트로 사용하세요.

자세한 세부 사항:

SSH를 통해 WSL(특히 WSL2)에 액세스하려고 할 때 몇 가지 함정이 있습니다.

첫째, WSL2가 NAT vNIC를 사용하여 가상화된 환경에서 실행된다는 사실을 접했을 수 있습니다. 이는 WSL2에서 실행되는 서비스가 네트워크의 다른 시스템에서 직접 액세스할 수 없음을 의미합니다.

WSL은 다음을 제공합니다.로컬 호스트 전달를 통해 Windows 호스트 자체에서 WSL2에서 실행되는 서비스에 액세스할 수 있습니다 localhost:portnumber. 그러나 이는 네트워크의 다른 시스템으로 확장되지 않습니다.

이것에 대한 전체 Github 스레드를 볼 수 있습니다.여기링크는 댓글로 바로 연결됩니다.일반적으로이 문제를 해결하는 것이 좋습니다.

여기에는 다음이 포함됩니다.

  • 방화벽 규칙 설정
  • Windows에서 WSL2 가상 네트워킹 인터페이스로 포트 전달
  • 여기서 가장 큰 과제는 WSL이 다시 시작될 때마다 vNIC의 주소가 변경된다는 것입니다. 따라서 스크립트는 이전 규칙을 삭제하고 재부팅할 때마다 다시 생성해야 합니다.

그러나 업데이트된 편집 내용을 보면 Windows 호스트 자체의 SSH를 통해 Windows를 통해 WSL 의사 공유에 액세스하려고 시도하는 것처럼 보이는 약간 다른 작업을 시도하는 것 같습니다.

불행하게도 이 역시 작동하지 않습니다. \\wsl$\...그 자체가 네트워크 파일 시스템(9P 프로토콜 사용)이기 때문입니다. 정말 그렇지 않다는 뜻이다.존재하다SSH를 통해 액세스할 때 Windows 호스트 자체에서.

내가 선호하는 ssh 솔루션은 sshfs다음을 사용하는 것입니다.SSH 점프호스트. 이는 "vNIC 주소 변경" 문제를 해결하며 Windows를 부팅할 때마다 스크립트를 실행할 필요가 없습니다.

이를 설정하려면:

  • Windows OpenSSH 서버 설치Windows 호스트에서. 나는 "호스트" SSH에 기본 포트 22를 사용하지만 반드시 그럴 필요는 없습니다.
  • WSL 인스턴스에 SSH를 설치하고 구성합니다. 여기서는 Windows 호스트와 다른 포트 번호를 사용해야 합니다. 이 예에서는 port 를 사용합니다 8022. /etc/ssh/sshd_config포트를 변경하려면 편집하세요 .
  • 선택 사항이지만 권장되는 것은 공개 키를 사용하여 Windows OpenSSH와 WSL 인스턴스를 모두 설정하는 것입니다 ../ssh/authorized_keys(Windows OpenSSH에서는 %userprofile%/.ssh디렉터리 아래에 있습니다. 물론 Linux/WSL에서는 ~/.ssh.

이제 (앞서 언급한 대로) Windows 호스트가 의 WSL2 인스턴스에 액세스할 수 있으므로 localhostWindows SSH를 WSL2 SSH 세션에 대한 점프 호스트로 사용할 수 있습니다.

다음과 같이 가정합니다.

  • 귀하의 Windows 컴퓨터 이름이 지정됩니다 windowshost(실제 이름으로 대체).
  • 포트 22에 Windows OpenSSH가 있습니다.
  • 포트 8022에 WSL SSH 서버가 있습니다.

그런 다음 다음을 사용하여 WSL 시스템을 탑재할 수 있습니다.

sshfs -o ssh_command='ssh -J windowshost' -p 8022 localhost:/ <mountpoint>

WSL 인스턴스는 점프 호스트(Windows 호스트)의 관점에서 본 주소이기 때문에 "localhost"입니다.

관련 정보