一尘不染

jenkins应该具有什么权限才能在不安全的情况下执行shell命令?

jenkins

我在本地服务器上有一个脚本(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。


阅读 239

收藏
2020-07-25

共1个答案

一尘不染

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

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

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

一个安全的选项是将Jenkins用户添加到与另一个用户相同的组中。完成此操作后,在要读取和写入的目录上设置权限,以允许用户组中的任何人进行更改。

rwxrwx---

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

编辑

不过,看来您的错误已更改。您不会再被拒绝权限。您仍然可以通过终端吗?我认为主机密钥验证失败的原因是,您的密钥最初是为其他用户创建的。我知道我在上面的答案中说过要这样做,但这不是正确的方法。

作为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

如果可行,请在终端上尝试脚本,然后再次通过jenkins …

2020-07-25