linux - 使用 Jenkins 时不存在 tty 的问题

标签 linux ssh jenkins tty

简而言之,我有一份 Jenkins 工作,需要更改用户和权限。 SSH 部分看起来像这样:

ssh -i {$id_rsa} {$user}@{$server} sudo chown -R nobody:nogroup {$root}/{$checkout_path}/

所以问题是我得到一个错误:

"Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: no tty present and no askpass program specified"

所以我尝试了 single -t,但没有用,但 double 应该可以解决问题:

ssh -i {$id_rsa} -t -t {$user}@{$server} sudo chown -R nobody:nogroup {$root}/{$checkout_path}/

所以...真正的问题是脚本出于某种原因停止在该行,然后继续运行。永远我猜。我让它运行了大约 15 分钟,无论如何都太长了。对远程服务器没有影响,而且它似乎什么也没做。

有人知道为什么会这样吗?

最佳答案

所以终于搞定了。正如我之前的评论 ( Issues with no tty present, when using Jenkins ) 中提到的,问题不直接在于调用本身。问题是 jenkins 被要求输入密码,但没有出现在输出中。

解决方案是先纠正 sudoers,然后对 call 做一个小改动(将 nobody:nogroup 替换为 nobody.nogroup):

ssh -i {$id_rsa} {$user}@{$server} sudo chown -R nobody.nogroup {$root}/{$checkout_path}/

所以实际调用应该是这样的:

ssh -i /var/opt/jenkins/.ssh/id_rsa -t jenkins@remote.server sudo chown -R nobody.nogroup /var/www/some/directory

Sudoers 现在看起来像这样:

jenkins ALL=(ALL) NOPASSWD: /bin/chown nobody.nogroup *,/bin/chown -R nobody.nogroup *

附言。我知道让 jenkins 用户在任何地方使用 sudo chown nobody.nogroup 的安全问题。另一方面,限制/var/www/* 没有任何好处,因为无论如何都很容易绕过它。所以出于安全原因,做一些完全不同的事情可能会更好......

关于linux - 使用 Jenkins 时不存在 tty 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936351/

相关文章:

linux - awk 在列中打印特定数量的字符

C-发送awk脚本到Linux

macos - Ant:如何避免 SSH 密码?

shell - 如何在Kubernetes中使用Cron Job运行具有ssh命令的Shell脚本

git - 设置分支不可 merge

java - 如何在 java 中运行 comport 代码而不在 linux 系统中物理运行它

c++ - 调用一个函数一段时间

git - 与 SSH key 相比,使用 GPG key 签署 git commit 有什么优势

Mercurial 变更组 Hook : repository URL

authentication - Jenkins CLI 身份验证