总之,我有一个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"
所以我尝试了单个-t,但是没有用,但双重应该可以解决问题:
ssh -i {$id_rsa} -t -t {$user}@{$server} sudo chown -R nobody:nogroup {$root}/{$checkout_path}/
所以...真正的问题是由于某种原因脚本停在线上,并继续运行。永远,我猜。我让它跑了大约15分钟,这无论如何都要长。对远程服务器没有任何影响,它似乎什么也没做。
任何人都知道为什么会这样?
答案 0 :(得分:2)
所以终于搞定了。正如我之前的评论(Issues with no tty present, when using Jenkins)中所提到的,问题不在于呼叫本身。问题是jenkins被要求输入密码的问题,这个密码没有出现在输出中。
解决方案是首先纠正sudoers,然后做一个小改变来调用(用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 / *来限制也没有任何好处,因为它无论如何都很容易解决。因此,出于安全原因,做一些完全不同的事情可能会更好......
答案 1 :(得分:0)
你可能想引用命令行(从sudo到行尾)。
另外,bash变量扩展(如果你的shell是bash)写的是$ {var}而不是{$ var},所以也许试试这个:
ssh -i ${id_rsa} -t -t ${user}@${server} "sudo chown -R nobody:nogroup ${root}/{$checkout_path}/"