使用Jenkins时没有tty存在的问题

时间:2013-11-12 17:51:11

标签: 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"

所以我尝试了单个-t,但是没有用,但双重应该可以解决问题:

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

所以...真正的问题是由于某种原因脚本停在线上,并继续运行。永远,我猜。我让它跑了大约15分钟,这无论如何都要长。对远程服务器没有任何影响,它似乎什么也没做。

任何人都知道为什么会这样?

2 个答案:

答案 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}/"