如何使用 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 密钥:
~/.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' 文件时它要求我输入密码。
- 为什么要我输入这个密码?
- 我哪一步没看清楚?
运行:
- OS X El Capitan 本地
- Ubuntu 16.04.1 远程 LTS
这与 GIT 或 SSH 无关。 Linux 发行版默认要求任何用户 运行 执行 sudo
命令,即使他们有权限,也要输入密码。这可以被覆盖(见下文)。
覆盖这个的步骤:)
例如检查this answer。
您需要在 sudoers
文件中为相关用户添加 NOPASSWD
指令。根据该答案修改:
dev ALL = NOPASSWD: ALL
为了安全起见,您可以将 ALL
替换为特定命令。
在将一些更改推送到 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 密钥:
~/.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' 文件时它要求我输入密码。
- 为什么要我输入这个密码?
- 我哪一步没看清楚?
运行:
- OS X El Capitan 本地
- Ubuntu 16.04.1 远程 LTS
这与 GIT 或 SSH 无关。 Linux 发行版默认要求任何用户 运行 执行
sudo
命令,即使他们有权限,也要输入密码。这可以被覆盖(见下文)。覆盖这个的步骤:)
例如检查this answer。
您需要在 sudoers
文件中为相关用户添加 NOPASSWD
指令。根据该答案修改:
dev ALL = NOPASSWD: ALL
为了安全起见,您可以将 ALL
替换为特定命令。