我有一个 Ubuntu vps,我通过我的笔记本电脑连接到它,该笔记本电脑也运行 Ubuntu。
当我通过 ssh root@server 连接到我的服务器时,我可以成功运行以下命令:
root@server:~# wg set wg0 peer $(cat /etc/wireguard/clients/guard001_pub) remove
但是当我不想登录而只想远程运行命令时,我收到权限被拒绝的错误,我不明白为什么。因为该文件由 root 拥有并具有所有 rwx 权限。
username@mymachine:~$ ssh root@server "wg set wg0 peer $(cat /etc/wireguard/clients/guard001_pub) remove"
出现以下错误:
cat: /etc/wireguard/clients/guard001_pub: Permission denied
Key is not the correct length or format: `remove'
谁能告诉我为什么会发生这种情况以及最好的解决方法是什么?
答案1
由于您用双引号括住了命令,$(cat /etc/wireguard/clients/guard001_pub)
因此您的当地的shell,在ssh
运行命令之前。
由于本地cat /etc/wireguard/clients/guard001_pub
失败,本地命令替换导致空字符串,而远程命令变为
wg set wg0 peer remove
这样它就remove
可以作为密钥传递了。
相反,使用单引号:
ssh root@server 'wg set wg0 peer $(cat /etc/wireguard/clients/guard001_pub) remove'
或者可能更好
ssh root@server 'wg set wg0 peer "$(cat /etc/wireguard/clients/guard001_pub)" remove'