![以不同的 nologin 用户身份运行命令](https://linux22.com/image/115875/%E4%BB%A5%E4%B8%8D%E5%90%8C%E7%9A%84%20nologin%20%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我正在使用maven antrun 插件执行一个sshexec命令以复制 tar 并将其解压到远程服务器上的目标目录。
我运行来提取它的命令是:
/bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;'
这用过的正常工作,直到目标目录的所有者更改为设置为 nologin 的新用户。我正在尝试弄清楚如何以新用户身份运行此命令。
我尝试过模仿它巴兹尔A的回答
/bin/su -s /bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;' ${newUser}
但它提示我输入密码,该密码不起作用,因为它是 nologin 用户。
另外,我不是 Linux 专家,但如果我也只是尝试以旧用户(具有 sudo 访问权限)的身份从主目录运行此命令,则会失败
sudo -u ${newUser} tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;
但是,如果我 cd 到目标目录并运行与旧用户相同的命令,它就可以工作。我猜如果我理解这种行为差异,也许会帮助我得到答案?
答案1
在我看来,这里的问题与新用户是系统用户或非登录用户没有任何关系。听起来对所发生的情况最可能的解释是,由于目标目录的所有者发生了更改,现在不存在具有源目录的读取权限和目标目录的写入权限的用户。
由于您在相关主机上拥有 sudo 权限,因此您有很多选择来解决此问题。
您可以授予原始用户对目标目录的写入权限,并
tar
以该用户身份运行命令。您可以向新的非登录用户授予对源目录的读取权限,并
tar
以该用户身份运行命令。您可以
tar
使用 sudo 运行该命令,然后将所有权设置为您想要的任何内容。
例如,类似以下内容应该有效:
sudo tar -vxzf /path/to/${artifact}.tar.gz -C /path/to/target/directory
sudo chown -R "${newUser}:${newUser}" /path/to/target/directory
如果您想使用更多技巧并避免必须以 root 身份运行它,那么您应该更新您的问题以包含相关目录的权限和所有权信息以及相关用户帐户的组成员身份。