我正在创建一个脚本,该脚本运行一系列命令,将网站下载到机器并设置所有内容。
所以大部分命令都需要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 台机器上运行它。
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 手册页。
您可以使用 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)