我的 SysAdmin 要求我sudo
用来运行某个脚本。这个脚本(取决于你作为参数传入的子命令)使用 ssh 密钥连接到另一台机器,但这是失败的,大概是因为它以 root 身份而不是我身份运行。
我怎样才能仍然使用sudo
(我的系统管理员需要它并且我无权更改它)来获得运行脚本的权限,并且在访问我的 ssh 密钥的情况下运行命令?
根据 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 的用户身份运行,则您必须授予该用户读取您的密钥或访问您的代理的权限。
我想到了两件事。首先,编辑脚本,以便仅使用需要提升权限的命令运行sudo
。这应该可以让您的 ssh 连接正常工作。这样做的优点是仅以提升的权限运行那些需要它的命令。无需在命令行上运行命令sudo
,依赖于sudo
脚本中的调用将执行正确的操作。
其次,编辑脚本,以便它明确设置要连接的用户的名称。您可以使用该$SUDO_USER
变量,该变量保存启动当前sudo
会话的用户的用户名。这应该可以解决问题:
ssh "${SUDO_USER}@remotehost.example.com"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1820 次 |
最近记录: |