2

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

4

1 回答 1

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...

于 2013-01-04T19:12:07.263 回答