我的系统管理员要求我使用它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 参数保留您的环境。