Saya mencoba mengkompilasi beberapa sumber menggunakan makefile. Di makefile ada banyak perintah yang perlu dijalankan sebagai sudo
.
Ketika saya mengkompilasi sumber-sumber dari terminal semua berjalan dengan baik dan make dijeda saat pertama kali sudo
perintah dijalankan menunggu kata sandi. Setelah saya mengetik kata sandi, buat resume dan selesai.
Tetapi saya ingin dapat mengkompilasi sumber-sumber di NetBeans. Jadi, saya memulai sebuah proyek dan menunjukkan kepada netbeans tempat untuk menemukan sumber, tetapi ketika saya mengkompilasi proyek itu memberikan kesalahan:
sudo: no tty present and no askpass program specified
Pertama kali itu menyentuh sebuah sudo
perintah.
Saya telah mencari masalah di internet dan semua solusi yang saya temukan menunjuk pada satu hal: menonaktifkan kata sandi untuk pengguna ini. Karena pengguna yang dimaksud di sini adalah root. Saya tidak ingin melakukan itu.
Apakah ada solusi lain?
sudo -n my-command
bekerja untuk saya. HIH!sudo: a password is required
Jawaban:
Memberi pengguna untuk menggunakan perintah itu tanpa meminta kata sandi harus menyelesaikan masalah. Pertama buka konsol shell dan ketik:
Kemudian edit file itu untuk ditambahkan sampai akhir:
misalnya
akan memungkinkan pengguna
john
untuk sudopoweroff
,start
danstop
tanpa diminta kata sandi.Lihatlah bagian bawah layar untuk penekanan tombol yang perlu Anda gunakan dalam visudo - ini bukan vi - dan keluar tanpa menyimpan pada tanda pertama dari masalah. Peringatan kesehatan: merusak file ini akan memiliki konsekuensi serius, sunting dengan hati-hati!
sumber
Mencoba:
Gunakan
NOPASSWD
baris untuk semua perintah, maksud saya:Letakkan baris setelah semua baris lainnya di
sudoers
file.Itu berhasil bagi saya (Ubuntu 14.04).
sumber
jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
jenkins
hanya nama pengguna? Itu harus nama pengguna pengguna dari mesin host? Bagaimana jika nama pengguna pada mesin host cocok dengan nama pengguna dari server jauh?Mencoba:
Ini akan menghapus kesalahan di atas.
sumber
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine
lihat juga: sudo-no-tty-present-and-no-askpass-program-ditentukan Jugasudo -A
memungkinkan pengaturansudo
program askpass, tapi saya hanya melihat GUI. Adakah yang tahu izin untuk diijinkanssh remotehost sudo -A askpass
?-A
untuksudo
tidak mengambil argumen dan sebagai gantinya membutuhkan lingkunganSUDO_ASKPASS
atausudo.conf
Jadissh remotehost sudo -A command
akan tetap bekerja. Masih penasaran dengan program askpass berbasis terminal.Pseudo-terminal will not be allocated because stdin is not a terminal.
:(Setelah semua alternatif, saya menemukan:
Sumber
Perintah di atas masih membutuhkan kata sandi untuk dimasukkan. Untuk menghapus memasukkan kata sandi secara manual, dalam kasus seperti jenkins, perintah ini berfungsi:
sumber
sudo -S <command>
-true
kebetulan merupakan perintah dummy yang mengembalikan kode keluar 0 (false
adalah perintah yang mengembalikan 1). Terima kasih, ini adalah jawaban yang benar, karena semua yang lain mengharapkan "sudo" bekerja!Password:
maka tidak ada yang terjadi. Saya tidak bisa mengetikkan kata sandi.sudo
secara default akan membaca kata sandi dari terminal terlampir. Masalah Anda adalah tidak ada terminal yang terpasang ketika dijalankan dari konsol netbeans. Jadi, Anda harus menggunakan cara alternatif untuk memasukkan kata sandi: itu disebut program askpass .Program askpass bukanlah program tertentu, tetapi program apa pun yang dapat meminta kata sandi. Misalnya di sistem saya
x11-ssh-askpass
berfungsi dengan baik.Untuk melakukan itu, Anda harus menentukan program apa yang akan digunakan, baik dengan variabel lingkungan
SUDO_ASKPASS
atau dalamsudo.conf
file (lihatman sudo
untuk detail).Anda dapat memaksa
sudo
untuk menggunakan program askpass dengan menggunakan opsi-A
. Secara default ia hanya akan menggunakannya jika tidak ada terminal yang terpasang.sumber
-A
tidak perlu argumen.-A
memerlukan lingkunganSUDO_ASKPASS
atausudo.conf
file. Dalam hal ini,ssh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"
masih akan bekerja dengan askpass berbasis terminal, namun @chandru jauh lebih ringkas di bawah ini denganssh -t ...
Untuk pengguna Ubuntu 16.04
Ada file yang harus Anda baca:
Menempatkan file dengan mode 0440 di /etc/sudoers.d/myuser dengan konten berikut:
Haruskah memperbaiki masalah.
Jangan lupa untuk:
sumber
Coba yang ini:
sumber
[sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt
@sNICkerssssJika kebetulan Anda datang ke sini karena Anda tidak bisa sudo di dalam Ubuntu yang datang dengan Windows10
Edit file / etc / hosts dari Windows (dengan Notepad), itu akan berlokasi di
%localappdata\lxss\rootfs\etc
:, tambahkan127.0.0.1 WINDOWS8
, ini akan menghilangkan kesalahan pertama yang tidak dapat menemukan host.Untuk menghilangkan
no tty present
kesalahan, selalu lakukansudo -S <command>
sumber
Masuk ke linux Anda. Menembak perintah berikut. Hati-hati, karena mengedit sudoer adalah proposisi yang berisiko.
Setelah vi editor terbuka, lakukan perubahan berikut:
Beri komentar
Defaults requiretty
Pergi ke akhir file dan tambahkan
sumber
Dalam Jenkins :
Misalnya : -
Anda dapat menggunakan Mask Mask Plugin untuk menyembunyikan kata sandi Anda
sumber
Ini bekerja untuk saya:
di mana pengguna Anda "pengguna"
untuk gambar Docker, itu hanya akan menjadi:
sumber
Pastikan perintah yang Anda
sudo
ambil adalah bagian dari perintah AndaPATH
.Jika Anda memiliki
sudoers
entri perintah tunggal (atau multi, tetapi bukan SEMUA) , Anda akan mendapatkansudo: no tty present and no askpass program specified
ketika perintah bukan bagian dari jalur Anda (dan jalur lengkap tidak ditentukan).Anda dapat memperbaikinya dengan menambahkan perintah ke Anda
PATH
atau menjalankannya dengan jalur absolut, yaitusudo /usr/sbin/ipset
Dari pada
sudo ipset
sumber
sudoers
%sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/git
dan gunakansudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
di git post-update hook returnno tty
, tetapi menggunakansudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
work tanpa kata sandi.Perintah
sudo
gagal karena sedang mencoba untuk meminta kata sandi root dan tidak ada pseudo-tty yang dialokasikan (karena itu bagian dari skrip).Anda harus masuk sebagai root untuk menjalankan perintah ini atau mengatur aturan berikut di
/etc/sudoers
(atausudo visudo
:) Anda:Kemudian pastikan bahwa pengguna Anda milik
admin
grup (atauwheel
).Idealnya (lebih aman) adalah membatasi hak root hanya untuk perintah tertentu yang dapat ditentukan sebagai
%admin ALL=(ALL) NOPASSWD:/path/to/program
sumber
sudoers
fileapache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.sh
tetapi tidak berhasil untuk saya. itu memberikan kesalahan berikutsudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
apache ALL=(ALL) NOPASSWD: ALL
tetapi risiko keamanan. :)Saya pikir saya dapat membantu seseorang dengan kasus saya.
Pertama, saya mengubah pengaturan pengguna dengan
/etc/sudoers
merujuk pada jawaban di atas. Tapi itu masih tidak berhasil.Dalam kasus saya,
myuser
berada dimygroup
.Dan saya tidak butuh kelompok. Jadi, hapus baris itu.
(Seharusnya tidak menghapus baris seperti saya, hanya menandai komentar.)
Berhasil!
sumber
Menjalankan skrip shell yang berisi perintah sudo di dalamnya dari jenkins mungkin tidak berjalan seperti yang diharapkan. Untuk memperbaikinya, ikuti
Langkah sederhana:
Pada sistem berbasis ubuntu, jalankan "$ sudo visudo"
ini akan membuka file / etc / sudoers.
simpan file
Luncurkan kembali pekerjaan jenkins Anda
Anda seharusnya tidak melihat pesan kesalahan itu lagi :)
sumber
Saya bisa menyelesaikan ini tetapi pastikan untuk mengikuti langkah-langkahnya dengan benar. Ini untuk siapa saja yang mendapatkan kesalahan impor.
Langkah1 : Periksa apakah file dan folder telah menjalankan eksekusi izin. Penggunaan pengguna Linux:
Langkah2 : Periksa pengguna mana yang memiliki izin untuk menjalankannya.
Langkah 3 : buka terminal ketik perintah ini.
tambahkan baris ini ke kode di bawah ini
ini untuk memberikan izin untuk mengeksekusi skrip dan mengizinkannya untuk menggunakan semua perpustakaan. Pengguna umumnya adalah 'tidak ada' atau 'data-www'.
sekarang edit kode Anda sebagai
pergi ke terminal untuk memeriksa apakah proses sedang berjalan ketik ini di sana ...
ini akan menampilkan semua proses yang berjalan di python.
Add Ons : gunakan kode di bawah ini untuk memeriksa pengguna di sistem Anda
Terima kasih!
sumber
Kesalahan ini juga dapat muncul ketika Anda mencoba menjalankan perintah terminal (yang memerlukan kata sandi root) dari beberapa skrip non-shell, misalnya
sudo ls
(dalam backticks) dari program Ruby. Dalam hal ini, Anda dapat menggunakan utilitas Expect ( http://en.wikipedia.org/wiki/Expect ) atau alternatifnya.Misalnya, di Ruby untuk dieksekusi
sudo ls
tanpa mendapatkansudo: no tty present and no askpass program specified
, Anda dapat menjalankan ini:[ini menggunakan salah satu alternatif untuk mengharapkan ekstensi TCL: ruby_expect gem].
sumber
Untuk referensi, seandainya ada orang lain yang mengalami masalah yang sama, saya macet selama jam yang baik dengan kesalahan ini yang seharusnya tidak terjadi karena saya menggunakan parameter NOPASSWD.
Apa yang saya TIDAK tahu adalah bahwa sudo dapat memunculkan pesan kesalahan yang sama persis ketika tidak ada tty dan perintah yang pengguna coba luncurkan bukanlah bagian dari perintah yang diizinkan dalam file / etc / sudoers.
Di sini contoh sederhana konten file saya dengan masalah saya:
Ketika bguser akan mencoba untuk meluncurkan "sudo command_b arg_b" tanpa tty (bguser digunakan untuk beberapa daemon), maka ia akan menemui kesalahan "tidak ada tty sekarang dan tidak ada program askpass yang ditentukan".
Mengapa?
Karena koma tidak ada di akhir baris di file / etc / sudoers ...
(Saya bahkan bertanya-tanya apakah ini merupakan perilaku yang diharapkan dan bukan bug di sudo karena pesan kesalahan yang benar untuk kasus semacam itu seharusnya menjadi "Maaf, pengguna bguser tidak diizinkan untuk mengeksekusi dll.")
sumber
Saya mendapatkan kesalahan ini karena saya telah membatasi pengguna saya hanya untuk satu 'systemctl' yang dapat dieksekusi dan telah salah mengonfigurasi file visudo.
Inilah yang saya miliki:
Namun, Anda harus menyertakan path lengkap ke executable, bahkan jika path itu ada di path Anda secara default, misalnya:
Ini memungkinkan pengguna jenkins saya untuk memulai kembali layanan tetapi tidak memiliki akses root penuh
sumber
Tidak ada yang memberi tahu apa yang dapat menyebabkan kesalahan ini, jika terjadi migrasi dari satu host ke host lain, ingat tentang memeriksa nama host dalam file sudoers:
Jadi ini konfigurasi saya / etc / sudoers
jika tidak cocok
itu akan memunculkan kesalahan ini:
sumber
Opsi lain, tidak berdasarkan pada NOPASSWD:
sumber
Mungkin pertanyaannya tidak jelas mengapa tidak ada jawaban yang cocok tetapi saya memiliki pesan kesalahan yang sama ketika saya mencoba me-mount sshfs yang membutuhkan sudo: perintahnya kira-kira seperti ini:
dengan menambahkan opsi
-o debug
Saya memiliki pesan yang sama dari pertanyaan ini:
Jadi dengan membaca jawaban orang lain saya menjadi membuat file di
/etc/sudoer.d/user
my.server.tld dengan:dan sekarang saya dapat memasang drive tanpa memberi terlalu banyak hak ekstra kepada pengguna saya.
sumber
Meskipun pertanyaan ini sudah lama, masih relevan untuk sistem saya yang terbaru. Setelah mengaktifkan mode debug sudo (
Debug sudo /var/log/sudo_debug all@info
in/etc/sudo.conf
) saya diarahkan ke / dev: "/dev is world writable
". Jadi, Anda mungkin perlu memeriksa izin file tty , terutama dari direktori tempat simpul tty / pts berada.sumber
1 buka / etc / sudoers
jenis
sudo vi /etc/sudoers
. Ini akan membuka file Anda dalam mode edit.2 Tambah / Ubah pengguna linux
Cari entri untuk pengguna Linux. Ubah seperti di bawah ini jika ditemukan atau tambahkan baris baru.
3 Simpan dan Keluar dari mode edit
sumber
Jika Anda menambahkan baris ini ke
/etc/sudoers
(viavisudo
) Anda, ini akan memperbaiki masalah ini tanpa harus menonaktifkan memasukkan kata sandi Anda dan ketika alias untuksudo -S
tidak berfungsi (panggilan skripsudo
):Tentu saja bacalah manualnya sendiri untuk memahaminya, tetapi saya pikir untuk kasus penggunaan saya menjalankan dalam wadah LXD melalui
lxc exec instance -- /bin/bash
cukup aman karena tidak mencetak kata sandi melalui jaringan.sumber
Menggunakan pipa:
Gunakan di sini-dokumen:
Buka terminal untuk menanyakan kata sandi (mana yang berfungsi):
sumber