从 ssh 发出命令时,命令替换不起作用

从 ssh 发出命令时,命令替换不起作用

我有一个 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'

相关内容