sudo: không có tty hiện tại và không có chương trình hỏi


73

Khi cố chạy nhị phân từ xa bằng cách sử dụng sudotrên hộp từ xa:

ssh remotehost "sudo ./binary"

Tôi thấy lỗi này:

sudo: không có tty hiện tại và không có chương trình hỏi

Làm thế nào tôi có thể làm việc xung quanh này?

EDIT điều này chắc chắn không phải là một bản sao của câu hỏi được đề xuất như vậy. Các câu trả lời hoàn toàn không liên quan. Trong thực tế, những thay đổi đối với tệp sudoers đã được áp dụng cho máy chủ từ xa.


Câu trả lời:


78

Một cách đơn giản là chỉ định -t:

ssh -t remotehost "sudo ./binary"

Từ trang người đàn ông:

Buộc phân bổ giả. Điều này có thể được sử dụng để thực thi các chương trình dựa trên màn hình tùy ý trên một máy từ xa, có thể rất hữu ích, ví dụ như khi triển khai các dịch vụ menu. Nhiều tùy chọn -t buộc phân bổ tty, ngay cả khi ssh không có tty cục bộ.

Tôi không thể giải thích chính xác tại sao điều này hoạt động, và có thể có một cách tốt hơn. Tôi muốn nghe về nó nếu vậy :)

@psusi giải thích lý do tại sao điều này hoạt động trong một bình luận dưới đây.


14
Nó hoạt động vì sudoyêu cầu tty nhắc mật khẩu và khi chỉ định các lệnh chạy ssh, nó không phân bổ một mặc định vì điều này thường được sử dụng để chạy các lệnh không tương tác có thể truyền dữ liệu nhị phân, có thể tăng tốc tty .
psusi

@psusi Bạn có biết câu trả lời cho câu hỏi liên quan này không? unix.stackexchange.com/questions/110841
trusktr

Ngoài ra -tt, cũng cần có khi truyền lệnh bằng cách sử dụng heredoc
Rufus

26

Câu hỏi:

Làm thế nào tôi có thể làm việc xung quanh này?

sudo: no tty present and no askpass program specified

Trả lời thay thế

Để thay thế, hãy thử:

sudo -S ./binary

Điều này chỉ dẫn sudo đọc mật khẩu từ đầu vào tiêu chuẩn, stdin.

Kịch bản trong đó giúp

Trong môi trường chroot, những câu trả lời khác này có thể không hoạt động chính xác ... có lẽ vì:

  1. / etc / Shadow vs / etc / passwd xung đột không cho phép người dùng nhập mật khẩu.
  2. Trong môi trường chroot-ed, việc truy cập vào tty1 có thể hơi trục trặc và ctrl-alt f2 - đến tty2 là không khả thi, vì đó là một tty của môi trường không chroot-ed.

Ví dụ: Cài đặt / sửa chữa thủ công linux hoặc bộ nạp khởi động, sử dụng môi trường chroot, (như Archlinux và arch-chroot).


Tôi nhận được một sudo: ./binary: lệnh không tìm thấy lỗi khi tôi chạy sudo -S ./binary, những gì mang lại?
Ajit Goel

5

Bạn cần xác định thiết bị đầu cuối / ứng dụng sẽ đọc mật khẩu. Có hai biến thể:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Mặc định có thể nhìn thấy)

11
Có tốt hơn không khi sử dụng visudothay vì vim /etc/sudoersđể tránh khả năng tự khóa máy của bạn do đã gây ra lỗi trong chỉnh sửa của bạn?
Drew Noakes

2

Nó thất bại, vì sudođang cố gắng nhắc mật khẩu root và không có giả nào được phân bổ.

Bạn đã đăng nhập với quyền root hoặc thiết lập các quy tắc sau trong /etc/sudoers (hoặc sudo visudo:):

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

Sau đó, đảm bảo rằng người dùng của bạn thuộc adminnhóm (hoặc wheel).


Mặc dù điều này không đúng (không có bằng chứng nào được đưa ra và người dùng trong nhóm quản trị có mã đó theo hệ thống centos và ubfox vẫn gặp lỗi), đây là một mẹo tuyệt vời để từ xa tạo nhóm và quy tắc dựa trên các nhóm đó cho nhiệm vụ leo thang
MrMesees

2

Bạn cũng có thể tạo một tệp như "sudo_shutdown" trong /etc/sudoers.d, với nội dung:

# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown

Điều này cho phép người dùng trong nhóm adm tắt máy mà không cần mật khẩu.


3
Bạn có định chỉnh sửa cái này để nói về "món quà không tty"
Elder Geek

2

Trong trường hợp của tôi, tôi đã nhận được lỗi này vì tôi không chỉ định một lệnh mà tôi muốn sử dụng làm root trong sudoers

Cái gì đó như

/etc/sudoers.d/myuser:

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

đã làm cho tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.