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

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

我正在创建一个脚本,它运行一系列命令,将网站下载到机器上并设置一切。

因此大多数命令都需要 root 访问权限。例如,在 中添加 vhost /etc/apache2/sites-available、启用它、重新启动 apache 等...

所以为了做到这一点,我需要使用 运行脚本sudo

sudo ./install-website.sh

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

所以当到达这个部分时:

git clone [email protected]:git-repo $PATH_TO_INSTALLATION

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

我尝试过以下命令:

sudo -u $SUDO_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION

但它仍然要求输入主机用户的密码。

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

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

答案1

替代方案 1——配置 sudo

Sudo 配置在sudoers文件中,您只能通过命令来编辑该文件visudo

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

visudo

然后找到一行内容:

Defaults env_reset 

并在其后添加(例如,以 HOME 环境为例):

Defaults env_keep = "HOME"

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

替代方案 2 - 配置 SSH

您可以使用 SSH 的配置文件来指定用户、要使用的密钥等。我已经在超级用户

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

Host host.com
  User dan
  IdentityFile /home/dan/.ssh/id_rsa

然后以 root 身份执行下一个命令,它将使用正确的 SSH 标识:

git clone host.com:git-repo $PATH_TO_INSTALLATION

答案2

由于脚本以 root 身份运行,因此它可以su直接发送给非特权用户。root 不需要sudosudo这是给 lusers 的 ;-)。

假设非特权用户是dan,并且 $PATH_TO_INSTALLATION 在周围脚本中设置:

su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" dan

请注意$PATH_TO_INSTALLATION必须是 可写的dan

答案3

当我很久以前使用 生成 ssh 密钥时ssh-keygen,我没有选择默认路径~/.ssh/id_rsa。感谢兹韦特评论,我记住了。我换了钥匙,把它放进去了~/.ssh/id_rsa

现在两个命令都可以起作用了:

  1. sudo

    sudo -u $SUDO_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION
    
  2. 正如建议的那样zwets 的回答

    su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" $SUDO_USER
    

相关内容