sudo: tty yok ve hiçbir askpass programı belirtilmemiş


73

sudoUzak kutuyu kullanarak uzak bir ikili dosyayı çalıştırmayı denediğinizde :

ssh remotehost "sudo ./binary"

Bu hatayı görüyorum:

sudo: tty yok ve hiçbir askpass programı belirtilmemiş

Bu konuda nasıl çalışabilirim?

EDIT bu kesinlikle böyle bir sorunun önerisinin bir kopyası değil. Buradaki cevaplar tamamen alakasız. Aslında, sudoers dosyasındaki bu değişiklikler uzak ana bilgisayara zaten uygulandı.


Yanıtlar:


78

Basit bir yol belirtmektir -t:

ssh -t remotehost "sudo ./binary"

Man sayfasından:

Sözde tty tahsisini zorla. Bu, uzak bir makinede isteğe bağlı ekran tabanlı programları yürütmek için kullanılabilir; bu, örneğin menü hizmetlerini uygularken çok yararlı olabilir. Çoklu t seçenekleri, ssh'nin yerel tty'si olmasa bile tty tahsisini zorlar.

Bunun neden işe yaradığını tam olarak açıklayamıyorum ve daha iyi bir yol olabilir. Eğer öyleyse duymak isterim :)

@ psusi, bunun neden bir yorumda çalıştığını açıklıyor.


14
Çalışır çünkü sudobir parola istemek için bir tty gerektirir ve sshçalıştırılacak komutları belirtirken, normalde tty'yi hızlandırabilecek ikili verileri aktarabilen etkileşimli olmayan komutları çalıştırmak için kullanıldığı için varsayılan olarak bir tane alamaz. .
psusi

@psusi Bu sorunun cevabını biliyor musunuz? unix.stackexchange.com/questions/110841
trusktr

Ayrıca, -ttheredoc komutunu kullanarak geçerken gerekli olan
Rufus

26

Soru:

Bu konuda nasıl çalışabilirim?

sudo: no tty present and no askpass program specified

Alternatif Cevap

Alternatif olarak, deneyin:

sudo -S ./binary

Bu, sudo'yu standart girişten gelen şifreyi okumak için yönlendirir, stdin.

Bunun Yardımcı Olduğu Senaryolar

Chroot ortamlarında, bu diğer cevaplar doğru çalışmayabilir ... belki de:

  1. / etc / shadow vs / etc / passwd çakışması, kullanıcının bir parola girmesine izin vermiyor.
  2. Chroot'lu bir ortamda, ttyl'e erişim biraz aksak olabilir ve ctrl-alt f2 - tty2'ye olanaksızdır, çünkü chroot olmayan ortamın bir parçasıdır.

Örneğin: Linux ya da bootloader'ı chroot ortamı kullanarak (Archlinux ve arch chroot gibi) manuel olarak kurmak / onarmak.


Bir sudo alıyorum: ./binary: komut sudo -S ./binary çalıştırdığımda hata bulunamadı, ne veriyor?
Ajit Goel

5

Şifreyi okuyacak terminal / uygulama tanımlamanız gerekir. İki değişken var:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Varsayılanlar visiblepw)

11
Düzenlemenizde bir hata yapmış olmanız nedeniyle kendinizi makinenizden dışarıya kilitlemekten kaçınmak için kullanmak visudoyerine daha iyi değil vim /etc/sudoersmi?
Drew No:

2

Başarısız olur, çünkü sudoroot şifresini sormaya çalışıyor ve tahsis edilmiş sahte tty yok.

Sen ettik ya log-in kök veya set-up aşağıdaki kurallara olarak sizin /etc/sudoers (veya: sudo visudo):

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

Ardından, kullanıcınızın admingruba (veya wheel) ait olduğundan emin olun .


bu doğru olmasa da (bunun için kanıt belirtilmemiştir ve yönetici grubundaki centos ve ubuntu sistemlerinde bu kodu kullanan kullanıcılar hala hata almaktadır), bu gruplara dayanarak gruplar ve kurallar oluşturmanın uzaktan yapılması için harika bir ipucu artan görevler
MrMesees

2

Ayrıca /etc/sudoers.d içinde "sudo_shutdown" gibi bir dosya oluşturabilirsiniz:

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

Bu, adm grubundaki kullanıcıların şifre olmadan kapanmalarını sağlar.


3
Bunu "hayır tty present" ı kapsayacak şekilde düzenlemeyi düşündünüz mü
Elder Geek

2

Benim durumumda bu hatayı aldım çünkü sudo'larda root olarak kullanmak istediğim bir komut belirtmedim.

Gibi bir şey

/etc/sudoers.d/myuser:

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

benim için çalıştı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.