jenkins 应该拥有什么权限才能执行 shell 命令而不不安全?

2024-02-08

我在本地服务器上有一个脚本(test.sh),在终端中执行时工作正常。该脚本删除一个目录,并在本地重新创建一个目录。然后它使用“ssh -i $private_key ..”连接到远程服务器并在那里复制文件。

当我在詹金斯中执行此脚本时

sh test.sh

它不起作用。我收到以下错误:

rm: .. Permission denied
mkdir: .. Permission denied
Warning: Identity file /.ssh/private_key not accessible: Permission denied.

Jenkins 与脚本位于同一服务器上。

我发现 Jenkins 是另一个用户,无法完成我作为 root 所做的所有事情;如何在不失去所有安全性的情况下设置权限。特别是在 private_key 的情况下,将权限设置为 easy 是愚蠢的 - 目前设置为 600(所有者的读写权限)并且所有者是 root。


将私钥的权限设置为 600 的全部目的是其他用户不应该能够访问它。如果您将密钥放在另一个用户的主目录 (/home/anotheruser/.ssh) 中,那么 Jenkins 用户和其他任何人(除了 root 之外)都无法访问它。这是设计的.

如果您希望 Jenkins 用户能够使用私钥,请将其也复制到 jenkins 用户主目录 (/home//.ssh)。 罢工>

此外,如果您尝试以 Jenkins 用户身份在其他用户的目录中删除/创建目录而不提供权限,您将收到权限错误。这是因为安全。允许此操作的唯一方法是允许 Jenkins 用户对这些目录进行更改。

一种安全的选择是将 Jenkins 用户添加到与其他用户相同的组中。执行此操作后,请设置要读取和写入的目录的权限,以允许用户组中的任何人进行更改。

rwxrwx---

上述权限将允许文件夹的所有者和同一组中的任何其他用户进行更改,但不允许其他任何人。这是安全的,因为您可以控制谁是其他用户组的一部分。

EDIT

不过,您的错误似乎已经改变。您不会再收到拒绝的许可。您还可以通过终端进行操作吗? (我认为)它说主机密钥验证失败的原因是因为您的密钥最初是为其他用户创建的。我意识到我在上面的答案中说过这样做,但这不是正确的方法。

作为 jenkins 用户,您可以运行以下命令:

ssh-keygen (say yes or agree if it asks if you want to replace your current keys)
ssh-copy-id -i ~/.ssh/id_rsa.pub remoteuser@remote_server
ssh remoteuser@remote_server

如果这有效,请通过终端尝试您的脚本,然后再次通过詹金斯......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jenkins 应该拥有什么权限才能执行 shell 命令而不不安全? 的相关文章

随机推荐