네트워크 ID를 기반으로 시스템 서비스 정의

네트워크 ID를 기반으로 시스템 서비스 정의

다음과 같은 질문이 있습니다.

홈 네트워크에 전달하려는 네트워크 드라이브가 있습니다 sshfs. 로컬 네트워크에서는 암호화에 크게 신경 쓸 필요가 없습니다. 예를 들어 비밀번호를 사용할 수 있습니다 arcfour. 내 SSH 내부 포트는 기술적인 이유로 A다른 포트를 통해 ssh외부 네트워크에서 연결할 수 있습니다. 또한 홈 네트워크에 있을 때 외부에서 포트에 연결할 수 없습니다. 이제 외부에 설치하면 당연히 추가 암호화를 사용하게 됩니다.BA

systemd나는 네트워크에 있는 경우에만 포트를 사용하고 arcfour, 그렇지 않으면 다른 암호를 사용하여 포트를 통해 연결하여 이 마운트 상황을 현명하게 처리하는 서비스를 구축하고 싶습니다 . 나는 내 자신의 서비스를 처음 작성하는데 여기에 적용할 올바른 조건을 찾을 수 없습니다.AXB

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

두 가지 작업을 실행하는 것이 좋습니다. 하나는 로그인 시(설치용), 다른 하나는 로그아웃 시(제거용)입니다. 샘플 서비스 파일:

[Unit]    
Description=mount with sshfs

[Service]
Type=simple
ExecStart=/path/to/login_script.sh
#This makes the service stay active while logged in and
#  makes sure ExecStop is only executed at logout
RemainAfterExit=yes
ExecStop=/path/to/logout_script.sh

[Install]
#opens with first login and ends with last logout - multiple ssh sessions are OK
WantedBy=default.target

로그인 및 로그아웃 스크립트를 작성합니다. SSID를 통해 집에 있는지 확인해 보겠습니다. 귀하에게 적합한 것이 무엇인지 확인하십시오.

#!/bin/bash
#login script
if [[ "$( nmlci | grep 'home_network_name' )" != "" ] ; then
   #we're at home
   sshfs <mount with home options>
else
   #we're out
   sshfs <mount with outside options>
fi

로그아웃한 후 제거하고 싶습니다.

#!/bin/bash
#logout script
fusermount -u /path/to/mount/point

서비스를 활성화하려면 example에 입력 ~/.cofig/systemd/user/autosshfs.service하고 실행하세요 systemctl --user enable autosshfs.service. 다음에 로그인할 때 실행되어야 합니다.

관련 정보