systemd 服务:无法执行命令:权限被拒绝

kak*_*eys 0 linux ssh fedora systemd

我正在尝试在 systemd 服务中运行 SSH 命令。尽管我设置运行该命令的用户fedora拥有该命令所需的所有内容的权限(通过在登录的 shell 中手动运行该命令而不会失败并对文件进行权限检查来验证),但它仍然给出权限被拒绝的错误。

[Unit]
Description=AutoSSH tunnel
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/ssh -f -TN -L 3333:localhost:3333 -o "ExitOnForwardFailure yes" -o "ServerAliveInterval 60" -i /home/fedora/.ssh/id_rsa ubuntu@server
ExecStop=/usr/bin/pkill -f 3333:localhost:3333
Restart=always
RestartSec=10
User=fedora
Group=fedora

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

错误信息:

Oct 16 11:10:47 Lenovoserver systemd[2318595]: autossh-tunnel.service: Failed to execute command: Permission denied
Oct 16 11:10:47 Lenovoserver systemd[2318595]: autossh-tunnel.service: Failed at step EXEC spawning /usr/bin/ssh: Permission denied
Run Code Online (Sandbox Code Playgroud)

权限检查:

-rwxr-xr-x. 1 root root 808832 Oct  9  2019 /usr/bin/ssh
Run Code Online (Sandbox Code Playgroud)

fedora用户有执行权限/usr/bin/ssh

-rw-------. 1 fedora fedora 2610 Jan  3  2020 /home/fedora/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

fedora用户对其私钥具有读取权限。

我做错了什么还是这是一个systemd错误?

小智 5

它可能是SELinux,新的 ssh 端口必须在 selinux 中注册。
首先通过暂时禁用selinux来检查服务是否工作,如果工作正常,请将ssh端口添加到selinux,如下所示。

# Check selinux status
sestatus

# Disable selinux temporarily
setenforce 0

# Check selinux ssh port 
semanage port -l | grep ssh
ssh_port_t                     tcp      22

# Add selinux ssh port 
sudo semanage port -a -t ssh_port_t -p tcp 3333

# Check selinux ssh port 
semanage port -l | grep ssh
ssh_port_t                     tcp      22, 3333
Run Code Online (Sandbox Code Playgroud)