如何在命令中使用 `sudo`,但仍然“做我自己”?

ico*_*ast 5 sudo

我的 SysAdmin 要求我sudo用来运行某个脚本。这个脚本(取决于你作为参数传入的子命令)使用 ssh 密钥连接到另一台机器,但这是失败的,大概是因为它以 root 身份而不是我身份运行。

我怎样才能仍然使用sudo(我的系统管理员需要它并且我无权更改它)来获得运行脚本的权限,并且在访问我的 ssh 密钥的情况下运行命令?

Gil*_*il' 5

根据 sudo 的配置方式,它可能会覆盖大多数环境变量。特别是,它很可能会覆盖SSH_AUTH_SOCK,并且可能会覆盖HOME。这不是您可以在不更改 sudo 配置的情况下修复的问题。

您可以通过sudo -V以 root 身份运行来查看 sudo 配置(尤其是保留了哪些环境变量)。这是一项您无法以非特权用户身份查看配置的功能。

您的系统管理员可能已锁定您的 sudo 权限,因此脚本无法使用您的 ssh 密钥。这可能是一个安全策略,如果它被正确实施,那么根据定义,您无法自己修复它,您将需要您的系统管理员来更改配置。

如果不知道脚本的作用和 sudo 配置是什么,就很难知道需要什么。也许sudoers像下面这样的行可能会有所帮助(SSH_AUTH_SOCK如果要运行的命令是 ,它告诉 sudo 保留环境变量/path/to/script):

Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)

如果脚本以既不是您也不是 root 的用户身份运行,则您必须授予该用户读取您的密钥或访问您的代理的权限。


D_B*_*Bye 3

我想到了两件事。首先,编辑脚本,以便仅使用需要提升权限的命令运行sudo。这应该可以让您的 ssh 连接正常工作。这样做的优点是仅以提升的权限运行那些需要它的命令。无需在命令行上运行命令sudo,依赖于sudo脚本中的调用将执行正确的操作。

其次,编辑脚本,以便它明确设置要连接的用户的名称。您可以使用该$SUDO_USER变量,该变量保存启动当前sudo会话的用户的用户名。这应该可以解决问题:

ssh "${SUDO_USER}@remotehost.example.com"
Run Code Online (Sandbox Code Playgroud)

  • 啊,我明白了。是的 - 不仅仅是本土的管理黑客!如果它允许您显式设置 ssh 用户,那么它是否也允许您显式设置要使用的密钥?粗略地浏览一下源代码,也许您可​​以在“ssh-options”设置中设置“-i ${SUDO_USER}/.ssh/id_rsa”或其他内容? (2认同)