如何使用 IdentityFile 通过 SSH 远程 运行 sudo 命令?

How to run a sudo command, remotely, trough SSH, using an IdentityFile?

在将一些更改推送到 git 之后,我正在尝试触发可执行文件“post-receive远程机器 上的 repo。此文件中有一些命令需要提升权限,例如:

sudo -S rm -f $HOME/.build
sudo -S rm -f $HOME/Packages

我已经添加了一个遥控器到我的本地存储库:

git remote add live ssh://dev@ip/home/dev/app/.git

所以我可以将更改推送到我的远程仓库,如下所示:

git push live master

每当我推送时,“post-receive”文件都会执行。

但是,'post-receive' 文件中的 sudo 命令需要密码。

remote: [sudo] password for dev: Sorry, try again.
remote: [sudo] password for dev: 
remote: sudo: 1 incorrect password attempt
remote: [sudo] password for dev: 

我在本地设置了我的 SSH 密钥:

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

然后,我把本地的'~/.ssh/id_rsa.pub'文件内容复制到远程'~/.ssh/authorized_keys' 文件.

我还在本地设置了一个“config”文件,指定我身份的位置:

HostName ip
IdentityFile ~/.ssh/id_rsa

此时,我可以通过 ssh 连接到远程计算机,无需任何密码,如下所示:

ssh dev@ip

然而,在将更改推送到我的远程存储库时,这已经预料到了:

git push live master

...当 运行 远程 'post-receive' 文件时它要求我输入密码。

运行:

紧随 Digital Ocean Deployment Tutorial

  1. 这与 GIT 或 SSH 无关。 Linux 发行版默认要求任何用户 运行 执行 sudo 命令,即使他们有权限,也要输入密码。这可以被覆盖(见下文)。

  2. 覆盖这个的步骤:)

例如检查this answer

您需要在 sudoers 文件中为相关用户添加 NOPASSWD 指令。根据该答案修改:

dev ALL = NOPASSWD: ALL

为了安全起见,您可以将 ALL 替换为特定命令。