我正在创建一个脚本,它运行一系列命令,将网站下载到机器上并设置一切。
因此大多数命令都需要 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 不需要sudo
,sudo
这是给 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
。
现在两个命令都可以起作用了:
和
sudo
sudo -u $SUDO_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION
正如建议的那样zwets 的回答
su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" $SUDO_USER