![根据网络 ID 定义 systemd 服务](https://linux22.com/image/163021/%E6%A0%B9%E6%8D%AE%E7%BD%91%E7%BB%9C%20ID%20%E5%AE%9A%E4%B9%89%20systemd%20%E6%9C%8D%E5%8A%A1.png)
我有以下问题:
我的家庭网络中有网络驱动器,我想通过sshfs
.在我的本地网络中,我不必太关心加密,例如可以使用密码arcfour
。我的 ssh 内部端口是A
.由于技术原因,我可以通过与 不同的ssh
端口从外部网络进行连接。当我在家庭网络中时,我也无法从外部连接到该端口。现在,从外部安装,我当然会依赖其他加密。B
A
我想构建一个systemd
服务,它可以合理地处理这种挂载情况,当且仅当我在网络中时才使用端口arcfour
,其他情况下则通过端口使用另一个密码进行连接。我对编写自己的服务还不太熟悉,找不到在这里适用的正确条件。A
X
B
有人可以帮我解决这个问题吗?
答案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
。它应该在下次登录时运行。