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

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

我的系统管理员要求我使用它sudo来运行某个脚本。该脚本(取决于您作为参数传入的子命令)使用 ssh 密钥连接到另一台计算机,但这失败了,大概是因为它是作为 root 而不是我运行的。

我仍然如何使用sudo(我的系统管理员需要并且我无权更改)来获得运行脚本的权限,同时使命令运行时可以访问我的 ssh 密钥?

答案1

根据 sudo 的配置方式,它可能会覆盖大多数环境变量。特别是,它很可能会覆盖SSH_AUTH_SOCK,并且可能会覆盖HOME。如果不更改 sudo 配置,您无法解决这个问题。

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

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

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

Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK

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

答案2

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

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

ssh "${SUDO_USER}@remotehost.example.com"

答案3

用户 ID 将始终随 sudo 更改,但您可以使用 -E 参数保留您的环境。

相关内容