如何在同一个 Ubuntu 安装中以不同用户身份运行 SSH?

Dan*_*Dan 7 ssh root git

我正在创建一个脚本,该脚本运行一系列命令,将网站下载到机器并设置所有内容。

所以大部分命令都需要root访问权限。例如在 中添加一个虚拟主机/etc/apache2/sites-available,启用它,重新启动 apache 等......

因此,为了做到这一点,我需要使用sudo.

sudo ./install-website.sh
Run Code Online (Sandbox Code Playgroud)

该网站位于带有 git 存储库的服务器上,该存储库通过无密码 SSH 访问进行设置。但这仅适用于用户,dan因为密钥在我的主文件夹中,而不是在根的主文件夹中。

所以当它到达这部分时:

git clone user@host.com:git-repo $PATH_TO_INSTALLATION
Run Code Online (Sandbox Code Playgroud)

由于我使用 启动脚本sudo,因此尝试启动 git 命令的用户是 root。所以主机不断询问主机的用户密码。

我尝试了以下命令:

sudo -u $SUDO_USER git clone user@host.com:git-repo $PATH_TO_INSTALLATION
Run Code Online (Sandbox Code Playgroud)

但它仍然要求提供主机用户的密码。

是否可以告诉sudo使用$SUDO_USER的主路径?

大多数东西都是变量,并且必须是变量,因为我将在超过 1 台机器上运行它。

Huy*_*ens 4

替代方案 1 - 配置 sudo

Sudo 在文件中配置sudoers,您只能通过visudo命令进行编辑。

此配置文件可以使用选项覆盖某些环境变量env_reset。如何进行:

visudo
Run Code Online (Sandbox Code Playgroud)

然后找到一行内容:

Defaults env_reset 
Run Code Online (Sandbox Code Playgroud)

并在其后添加(例如 HOME 环境的示例):

Defaults env_keep = "HOME"
Run Code Online (Sandbox Code Playgroud)

此示例适用于您可能拥有的每个 sudo 配置。您还可以按每个用户/组指定它。请参阅sudoers 手册页

替代方案 2 - 配置 SSH

您可以使用 SSH 的配置文件来指定用户、要使用的密钥等。我已经在SuperUser中对此进行了解释。

建议的解决方案(但您必须纠正缺失和假定的位),编辑文件/root/.ssh/config并设置其权限chmod 0600 /root/.ssh/config

Host host.com
  User dan
  IdentityFile /home/dan/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

然后,作为 root,您可以执行下一个命令,它将使用正确的 SSH 标识:

git clone host.com:git-repo $PATH_TO_INSTALLATION
Run Code Online (Sandbox Code Playgroud)