2013-05-06 13 views
5

tôi chỉ cấu hình Jenkins và trong pre-xây dựng bước tôi đang cố gắng để khởi động lại Jenkins nhưng tôi kết thúc với các lỗi saujenkins thất bại trong khi khởi động lại sql của tôi "sudo: no tty hiện tại và không có chương trình askpass được chỉ định Xin lỗi, thử lại."

Commencing build of Revision c5b9f8daac092efc5396d80f568a2cf89ae8b697 (origin/HEAD, origin/master) 
Checking out Revision c5b9f8daac092efc5396d80f568a2cf89ae8b697 (origin/HEAD, origin/master) 
No change to record in branch origin/HEAD 
No change to record in branch origin/master 
[webapp] $ /bin/sh -xe /tmp/hudson5215632082686866774.sh 
+ sudo /etc/init.d/mysql restart 
sudo: no tty present and no askpass program specified 
Sorry, try again. 
sudo: no tty present and no askpass program specified 
Sorry, try again. 
sudo: no tty present and no askpass program specified 
Sorry, try again. 
sudo: 3 incorrect password attempts 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 

Tôi googled và thấy một số câu trả lời tại Jenkins out of nowhere starts failing with sudo: no tty present and no askpass program specified

Nhưng tiếc didn rằng 't giúp tôi

My/etc/sudoers trông như thế này

# 
# This file MUST be edited with the 'visudo' command as root. 
# 
# Please consider adding local content in /etc/sudoers.d/ instead of 
# directly modifying this file. 
# 
# See the man page for details on how to write a sudoers file. 
# 
Defaults  env_reset 
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 

# Host alias specification 

# User alias specification 

# Cmnd alias specification 

# User privilege specification 
root ALL=(ALL:ALL) ALL 

# Members of the admin group may gain root privileges 
%admin ALL=(ALL) NOPASSWD: ALL 

# Allow members of group sudo to execute any command 
%sudo ALL=(ALL:ALL) ALL 

# See sudoers(5) for more information on "#include" directives: 

#includedir /etc/sudoers.d 

Trả lời

1

Vui lòng sử dụng các "id" dấu phẩy nd và dán đầu ra. Chỉ khi bạn đang ở trong nhóm quản trị thì bạn không cần mật khẩu nhưng đối với tất cả những người khác mặc dù bạn có quyền truy cập nhưng bạn cần nhập mật khẩu sudo. Trong trường hợp này sudo không có tty để yêu cầu mật khẩu và do đó là lỗi.

Một giải pháp có thể là, không sử dụng sudo chỉ để khởi động lại mysql, thay vì chạy toàn bộ tập lệnh như sudo "sudo {đường dẫn kịch bản}" trong trường hợp này sudo sẽ có đầu cuối để yêu cầu mật khẩu.

+0

lệnh trả về id của tôi này uid = 108 (Jenkins) gid = 65534 (nogroup) nhóm = 65534 (nogroup), 111 (admin) tôi nghĩ rằng Jenkins dùng được trong nhóm admin nên sudo không phải là vấn đề. Khi bạn nói "Trong trường hợp này sudo không có tty để yêu cầu mật khẩu và do đó lỗi" chính xác thì điều đó có nghĩa là gì? Làm thế nào để tôi thêm tty? –

3

Lỗi "không có tty" cho biết rằng bạn có cài đặt 'yêu cầu' trong tệp sudoers của mình. Trong trường hợp của bạn, nó có thể là trong /etc/sudoers.d. Một khi dòng này là có, nó không quan trọng bạn đang ở trong nhóm - sudo sẽ yêu cầu một tty bất cứ khi nào nó được thực hiện.

Để giải quyết vấn đề này, bạn cần xóa (hoặc nhận xét) dòng yêu cầu trong tệp cấu hình hoặc thêm một dòng để loại trừ người dùng của bạn khỏi cài đặt yêu cầu. Bạn có thể xem làm thế nào để làm điều đó ở đây: Disable requiretty per user

+1

Tôi gặp sự cố này và tôi không có cài đặt requiretty trong tệp/etc/sudoers hoặc trong bất kỳ tệp nào trong /etc/sudoers.d (chỉ chứa tệp README có nhận xét). – Vince

+1

Giá trị requiretty mặc định tùy thuộc vào bản phân phối Linux bạn đang sử dụng. Thêm dòng "Mặc định: tên người dùng! Requiretty" vào tệp sudoers của bạn và thay thế tên người dùng bằng tên người dùng thực. – Barak

+0

Cảm ơn @Barak. Điều đó giải quyết nó cho tôi. Tôi đang sử dụng Ubuntu và 'man sudoers' của tôi nói rằng requiretty bị tắt theo mặc định, nhưng tôi đoán nó không phải vì vô hiệu hóa nó một cách rõ ràng như bạn đã đề nghị sửa nó cho tôi. – Vince

3

Bằng cách thêm những điều sau đây: Defaults: Tên truy nhập xác thực thì tập tin/etc/sudoers bạn không nên nhận được lỗi nhưng tên người dùng này sẽ có thể truy cập mà không cần yêu cầu cho một mật khẩu