Sebagai root, saya terhubung ke host jarak jauh untuk menjalankan perintah. Hanya "standarduser" yang memiliki file id yang sesuai dan .ssh / config yang benar, jadi saya beralih pengguna terlebih dahulu:
su standarduser -c 'ssh -x remotehost ./remotecommand'
Perintah berfungsi dengan baik, tetapi meskipun saya menggunakan "-x" (menonaktifkan X11-Forwarding) dan menonaktifkan X11Forwards /etc/ssh/ssh_config
, saya masih mendapatkan pesan kesalahan:
X11 connection rejected because of wrong authentication.
Saya tidak mendapatkan pesan kesalahan saat saya masuk sebagai "pengguna standar".
Ini cukup menjengkelkan karena saya ingin mengintegrasikan perintah dalam file tugas cron. Saya mengerti bahwa pesan kesalahan merujuk ke otentikasi salah dari file .XAuth root, tapi saya bahkan tidak mencoba untuk terhubung melalui X11.
Mengapa "ssh -x" tidak menonaktifkan koneksi X11 dan melempar pesan kesalahan?
UPDATE : Pesan hanya menunjukkan ketika saya login di dalam layar, ketika menggunakan perintah yang dinyatakan di atas pada mesin lokal itu sendiri (tanpa layar), saya tidak mendapatkan pesan kesalahan, jadi ini harus baik-baik saja dengan cron, juga .
Saya juga memulai perintah yang sama dengan -v
dan secara mengejutkan mendapat pesan kesalahan PERTAMA, bahkan sebelum informasi status dari SSH:
root@localhost:~# su standarduser -c 'ssh -x remotehost ./remotecommand'
X11 connection rejected because of wrong authentication.
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013
Ini membawa saya ke masalah itu sendiri, BUKAN ssh
yang melempar pesan kesalahan, itu su
:
root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi
Mengapa saya hanya mendapatkan kesalahan ini di dalam screen
? Bagaimana saya bisa menonaktifkan pesan kesalahan ini?
sumber
-v
ke opsi ssh, lalu tempel output ke pertanyaan Anda.Jawaban:
Sepertinya root Anda tidak memiliki beberapa cookie ajaib X11 di
.Xauthority
, yang Andastandarduser
miliki. Inilah cara untuk memperbaikinya.SHORT VERSION (terima kasih kepada @bmaupin )
Perhatian: periksa backticks! Mereka tidak dapat diganti dengan kutipan! Anda perlu
sudo
menginstal untuk melanjutkan perintah kedua!VERSI PANJANG ASLI
Untuk memperbaiki masalah, pertama-tama deteksi nomor layar mana yang
standarduser
digunakan:Dalam hal ini
21.0
. Kedua, tampilkanstandarduser
daftar cookie:Cookie untuk
21.0
tampilan adalah yang kedua dalam daftar dan diakhiri dengan104f
.Hal terakhir yang harus dilakukan adalah menambahkan cookie ini ke root
.Xauthority
. Masuk sebagai root dan lakukan hal berikut:Ini adalah bagaimana Anda dapat mengurangi
X11 connection rejected because of wrong authentication
kesalahan ketika Anda menjalankansu
sebagai pengguna yang berbeda di skrip Bash atauscreen
.Terima kasih kepada orang ini untuk inspirasi.
sumber
Solusi yang lebih mudah:
1.-
ssh user@host
2.-
$ sudo su
3.-
# xauth merge /home/user/.Xauthority
Itu saja
Tentu saja
$DISPLAY
variabel harus diatur.sumber
$DISPLAY
variabel? Saya yakin penambahan kecil ini akan memberikan suara tambahan untuk jawaban Anda.xauth: file /root/.Xauthority does not exist
Kebutuhan saya sedikit berbeda sehingga saya menghasilkan solusi yang sedikit berbeda. Saya membutuhkan kemampuan untuk menjalankan aplikasi X11 sebagai pengguna lain (yang bukan root). Menjalankan CentOS, jadi saya tidak memiliki alat gksudo manis yang dimiliki anjing-anjing beruntung dengan ubuntu yang melakukan keajaiban Xauth.
Saya benar-benar tidak ingin membongkar beberapa skrip khusus hanya untuk masuk, beralih pengguna dan menjalankan aplikasi; yang tampaknya agak berlebihan bagi saya.
Langkah pertama:
Izinkan $ XAUTHORITY untuk dibawa melintasi sesi sudo.
Tambahkan baris ini di bawah pernyataan env_keep lainnya di / etc / sudoers:
Langkah Dua:
Biarkan pengguna target Anda kemampuan untuk membaca .Xauthority Anda (ya saya tahu, berteriak KEAMANAN! Semua yang Anda inginkan). Bagi mereka yang hanya ingin menjalankan perintah sebagai root, ini bisa dilewati.
Pengguna target membagikan grup yang sama dengan saya, jadi saya aktifkan hak baca grup:
Langkah ketiga:
CentOS tidak mengisi nilai $ XAUTHORITY secara default. Tambahkan baris ke profil Anda (milik saya ~ / .bash_profile):
Itu dia. Tidak ada lagi tweaker. Tidak ada tulisan .XML untuk menjalankan PolicyKit. Tidak ada skrip yang berjalan untuk setiap login. Tidak perlu sudo dua kali untuk menyalin xauth. Mulai sekarang, Anda cukup:
Bekerja sangat baik dengan MobaXTerm.
sumber
Anda harus sepenuhnya beralih ke pengguna target, yaitu gunakan "
-
" withsu
(su - standarduser ...
). Jika tidak, X root akan diseret di lingkungan.sumber
Karena saya sering melakukan root pada berbagi file jaringan root-squashing, tidak ada solusi di atas yang bekerja untuk saya. (xubuntu 14.04). Saya mengumpulkan skrip berikut, yang berfungsi pada sistem saya. Mungkin berhasil pada Anda. Kemudian lagi, mungkin tidak, tetapi gratis untuk mencoba ...
Asumsinya adalah saya sudah menggunakan opsi -Y.
sumber
cookie=$(xauth list|grep $h.*$port)
bisa cocok lebih dari yang dimaksudkan jika $ port kebetulan menjadi bagian dari nilai cookie. Lebih aman adalah:cookie=$(xauth list) cookie=${c%% *}
ataucookie=$(xauth list |grep $h[^ ]*$port)
.Dalam kasus saya, ketika saya menemukan kesalahan itu, saya memiliki direktori pengguna terenkripsi. Setelah menelepon
ecrypt-mount-private
, itu menghilangkan kesalahan dan memungkinkan saya untuk melanjutkan penerusan X11.Untuk menentukan apakah folder rumah Anda dienkripsi, Anda dapat mencoba ini (sesuai jawaban ini ):
ls -A /home
. Jika Anda melihat.ecryptfs
folder, maka direktori home Anda mungkin dienkripsi, dalam hal ini Anda dapat mencoba melakukan perintah yang saya masukkan di awal jawabannya.sumber