当前位置: 首页 > 面试题库 >

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

井镜
2023-03-14
问题内容

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

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

编辑

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

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

如果可行,请在终端上尝试html" target="_blank">脚本,然后再次通过jenkins …



 类似资料:
  • 问题内容: 在Java 块中,无论try / catch中发生了什么,通常都认为其中的代码可以“保证”运行。但是,我知道至少有两种情况 不会 执行: 如果被调用;要么, 如果异常一直抛出到JVM,并且发生默认行为(即退出) 是否有其他程序行为会阻止块中的代码执行?代码将在什么特定条件下执行或不执行? 编辑: 正如NullUserException所指出,第二种情况实际上是不正确的。我以为是因为标准

  • 问题内容: 我正在尝试在办公室笔记本电脑上安装JDK,但是它说我需要管理员权限。我只能在工作中使用自己的帐户。 没有管理员权限的情况下如何安装Java开发套件? 问题答案: 这是一种在没有管理员特权或没有管理员密码的情况下安装Java的解决方法。为此,您需要安装不需要管理员特权的cygwin。在utils中,确保您选择cabextract.exe进行安装。 启动Cygwin Bash外壳。 键入c

  • 第二种情况有什么问题? 未捕获的TypeError:x.toLocaleUpperCase在HtmlButtoneElement的f(:2:14) 在:5:25 处不是函数。执行按钮。onclick

  • 我试图从jenkins master中触发特定节点的execute shell中的gradle命令,它正在运行一个异常,如下所示- 但是,如果am试图在本地工作区下的同一节点中执行shell,则gradle命令可以工作。 null 授予对。gradle的读写访问权限 在这里,node-jenkins和master-jenkins都安装了gradle V2.5。为什么执行shell触发从主人詹金斯找

  • 在我的应用程序中,我使用coroutine和flow向API发送请求。当请求出现时,我更改了stateFlow的值,以便我的activity中的收集器看到并执行其工作。这是一个简单的场景。在android网站(https://developer.android.com/kotlin/flow/stateflow-and-sharedflow)中,建议了2种方法。在这种情况下,我应该倾向于哪种方法?

  • 我正在使用Spring Boot安全性和Oauth2。我不想禁用健康endpoint的安全性。 我可以完全禁用安全性,或者编写自己的实现并禁用autoconfigured One。 但是如何修改()的现有实现? 我试图创建自己的配置而不禁用AutoConfigurated一个,但由于冲突,这是不可能的。 以下是错误消息: 此外,我试图显式地为我自己的安全配置设置更高的顺序,但看起来自动配置的一个覆