fstab의 sshfs: 다른 네트워크에서 동일한 서버 주소 지정

fstab의 sshfs: 다른 네트워크에서 동일한 서버 주소 지정

호스트 및 클라이언트 Ubuntu 19.04. SSH 열기

내 집 LAN에 SSH 서버가 있고 LAN 네트워크 주소를 사용하여 랩톱에 설치했습니다. 주말에 휴가를 가면서 라우터의 외부 IP 주소를 통해 마운트하도록 fstab을 변경해야 했습니다.

내 라우터는 루프백을 지원하지 않으므로 LAN에 있을 때 외부 IP를 사용할 수 없습니다.

내 접근 방식은 fstab에 두 부분을 유지하는 것입니다. 하나는 LAN용이고 다른 하나는 외부 IP용입니다. 그런 다음 내 위치에 맞게 fstab 줄을 주석 처리했습니다.

더 좋은 방법이 있는지 궁금합니다.

할 수 있는두 섹션을 모두 열어 둡니다. nofail부팅 프로세스가 중단되지 않도록 이 옵션을 사용 하지만 부팅 속도가 매우 느립니다. sshfs 옵션을 추가해 보았지만 ConnectionTimeout=5부팅 시간이 향상되지 않았습니다.

분명히 이것은 중요한 문제는 아니며 단지 선택적인 문제일 뿐입니다. 일부 조건부 설치? 아니면 시간 제한을 설정하는 것이 생각만큼 간단하지 않을 수도 있습니다.

나중에: 둘러본 후:

Archemar와 muru의 제안에 따라 설치 프로세스를 안내하는 포크를 만들기 위해 systemd init를 조사하고 있습니다.

내 이론(순전히 문서 읽기를 기반으로 한 추측 - 실험 없음)은 옵션을 mount통해 --fstab해당 위치의 fstab에 명령을 보내는 것입니다.

위치를 설정하는 한 가지 방법은 네트워크 장치 IP를 읽는 것입니다. 내 LAN DHCP는 10.0.0.120을 할당합니다. 다른 IP 주소는 LAN 외부의 네트워크에 연결되어 있다는 강력한 표시입니다. 완전히 신뢰할 수는 없지만 중요하지 않은 애플리케이션에는 충분합니다. 좀 더 확실한 방법이 있다면 기꺼이 듣고 싶습니다.

이제 systemd 마운트 서비스를 찾고 systemd init에서 해당 서비스를 호출할 위치를 찾는 데 어려움을 겪고 있습니다.

먼저 살펴보겠습니다 /lib/systemd/. 이 디렉토리에는 주로 시스템 실행 파일과 일부 디렉토리가 포함되어 있습니다. 이들 디렉토리 중 하나에는 system-generators유망한 파일이 포함되어 있습니다 systemd-fstab-generator. 실행파일이라 찾고 있는데,추측하다conf이 목적을 위해 파일.

지금까지 내가 얻은 것은 다음과 같습니다. 나중에 다시 글을 올리겠습니다. 그동안 팁, 경고, 알림을 주시면 감사하겠습니다...

답변1

테스트할 동등한 설정이 없지만 설정이 다음과 같이 작동할 것이라고 상상합니다.

먼저 이 마운트에서 배선을 제거합니다 /etc/fstab.

그러면 아래와 같이 각 서비스 및 설치에 대해 여러 개가 있을 것입니다.

  1. 내부 네트워크의 경우:

    /etc/systemd/system/int-ip-check.service:

    [Unit]
    Description=Check for internal network
    Type=oneshot
    Requires=NetworkManager-wait-online.service
    After=NetworkManager-wait-online.service
    OnFailure=ext-ip-check.service
    Conflicts=ext-ip-check.service
    Wants=int-ip.mount
    Before=int-ip.mount
    
    [Service]
    ExecStartPre=<command to check for internal network>
    RemainAfterExit=yes
    
    [Install]
    WantedBy=default.target
    

    /etc/systemd/system/int-ip.mount:

    [Unit]
    Documentation=SSHFS mount (internal IP)
    PartOf=int-ip-check.service
    
    [Mount]
    Where=/some/path
    What=user@int-ip:/some/path
    Type=fuse.sshfs
    Options=noauto,_netdev,...
    
  2. 외부 네트워크의 경우:

    /etc/systemd/system/ext-ip-check.service:

    [Unit]
    Description=Check for external network
    Type=oneshot
    Requires=NetworkManager-wait-online.service
    After=NetworkManager-wait-online.service
    Wants=ext-ip.mount
    Before=ext-ip.mount
    
    [Service]
    ExecStartPre=<command to check for external network>
    RemainAfterExit=yes
    

    /etc/systemd/system/ext-ip.mount:

    [Unit]
    Documentation=SSHFS mount (external IP)
    PartOf=ext-ip-check.service
    
    [Mount]
    Where=/some/path
    What=user@int-ip:/some/path
    Type=fuse.sshfs
    Options=noauto,_netdev,...
    

따라서 주문은 다음과 같습니다.

  1. 두 마운트 지점 모두 PartOf각각의 검사 서비스입니다. 따라서 점검 서비스가 중지되거나 다시 시작되면 설치도 중지되거나 다시 시작됩니다.
  2. 두 검사 서비스 모두 자체 마운트가 필요하지만(따라서 이를 시작하면 마운트도 시작됨) 마운트는 시작될 때까지 시작되지 않습니다.
  3. 두 검사 서비스 모두 필요하며 나중에 시작됩니다 NetworkManager-wait-online. Ubuntu에서는 특정 네트워크 장치가 온라인 상태가 될 때까지 기다려야 합니다.
  4. 서비스가 서로 충돌하는지 확인하십시오(한 서비스를 시작하면 다른 서비스를 중지하십시오).
  5. 첫 번째 검사가 실패하면 다른 검사가 시작됩니다.
  6. 내부 네트워크 검사는 기본적으로 활성화되어 있습니다( WantedBy=default.target).
  7. 두 검사 모두 RemainAfterExit=yes검사 명령이 종료된 후에도 활성 상태를 유지하고 중지하지 않도록 합니다(이 경우 필요함 Type=oneshot). 마운트를 중지하려면 실패하거나 중지해야 합니다.

그러면 프로세스는 다음과 같아야 합니다.

  1. 네트워크가 온라인 상태가 되면 내부 IP 확인이 시작됩니다.
  2. 성공적으로 완료되면 내부 설치가 시작되고 정상적으로 실행됩니다(그렇지 않으면 PartOf중지됩니다).
  3. 이것이 실패하면 외부 IP 확인이 시작됩니다. 따라서 점검 후 외부 마운트가 가동되어야 합니다.

네트워크를 전환하면 해당 검사 서비스를 시작하여 다른 서비스를 제거할 수 있습니다.

여기서 종속성을 처리해야 하지만 이것이 좋은 출발점이 되기를 바랍니다.

한 가지 잠재적인 변경 사항: and 대신 or 를 사용하고 Type=oneshot네트워크가 올바른지 주기적으로 확인하는 명령(예: 쉘 루프)이 있을 수 있습니다.RemainAfterExitType=simpleType=forking

답변2

이 작업을 마운트 수준에 투명하게 수행하고 ~/.ssh/config해당 수준에서 2개의 다른 호스트 이름으로 네트워크 리디렉션을 수행할 수 있습니다.

~/.ssh/config설치 사용자 의 경우 :

Match host MyServerAlias exec "<shell command to return true if in local LAN>"
   Hostname Local.IP.or.hostname

Host MyServerAlias
   Hostname external.hostname
   Port <External Port for SSH-Forward on Home Router>

이렇게 하면 설치 시 호스트 이름 한 줄만 사용하면 MyServerAliasSSH 계층이 자동으로 올바른 SSH URI에 연결됩니다.

Match일련의 쉘 명령을 연결하고 쉘 체인이 반환될 때만 다음 블록의 행을 적용할 수 있는 키워드 에 마법이 있습니다 true.

예를 들어 매치 라인에서 exec "timeout 0.4 nc -z %h %p 2>/dev/null"MyServerAlias의 로컬 IP와 포트가 연결 가능한지 확인할 수 있습니다.

ssh이후로 계속 match.

afuse+sshfs자동 설치 프로그램을 통한 설정시스템화된 사용자 단위(또는~/.profile을 통해)은 노트북에서 사용하기에 적합합니다. (그리고 장난도 안침 fstab)

Match이 키워드에 대한 자세한 정보 가 포함된 블로그 게시물은 다음과 같습니다..

관련 정보