什么权限jenkins必须执行shell命令而不是不安全?

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

当我在jenkins执行这个脚本

sh test.sh 

它不工作。 我得到以下错误:

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

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

我看到jenkins是另一个用户,不能做我所做的一切事情。 我怎样才能设置权限,而不会失去所有的安全性。 特别是在private_key的情况下,将权限设置为简单是愚蠢的 – 它当前设置为600(对所有者的读写权限),并且所有者为root。

将私钥的权限设置为600的关键是没有其他用户能够访问它。 如果您已经将密钥放在另一个用户的主目录(/home/anotheruser/.ssh)中,那么Jenkins用户以及其他任何人(除了root用户)都不能访问它。 这是设计的

如果你想让你的Jenkins用户能够使用这个私钥,那么把它复制到jenkins用户的主目录(/home//.ssh)。

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

一个安全的选择是将Jenkins用户添加到与其他用户相同的组中。 一旦你这样做,设置你想要读取和写入目录的权限,允许用户的组中的任何人进行更改。

 rwxrwx--- 

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

编辑

它看起来像你的错误已经改变,但。 你没有得到许可被拒绝了。 你还能通过终端吗? 原因(我认为)这是说主机密钥验证失败是因为您的密钥最初是为其他用户创建的。 我意识到我说过在上面的答案中这样做,但这不是正确的方法。

作为詹金斯用户,你可以运行以下命令:

 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 …