根据网络 ID 定义 systemd 服务

根据网络 ID 定义 systemd 服务

我有以下问题:

我的家庭网络中有网络驱动器,我想通过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

要激活该服务,请将其输入例如~/.cofig/systemd/user/autosshfs.service并运行systemctl --user enable autosshfs.service。它应该在下次登录时运行。

相关内容