Di mana gnome-keyring menetapkan $ SSH_AUTH_SOCK?

10

Saya sedang dalam proses menyingkirkan gnome-keyringsebagai agen SSH.

Hal-hal yang telah saya lakukan

  • Mencari di internet berjam-jam.
  • Mengubah barang dan memulai kembali, sering.
  • Akhirnya hanya rmmemeriksa semua hal autostart yang terkait dengan SSH.

Hal terakhir itu bekerja secara ajaib karena tidak ada lagi soket untuk agen di sana:

/run/user/[uid]/keyring/ssh

Masalah

Masalah yang tersisa adalah bahwa meskipun saya memperoleh hasil yang disebutkan di atas, sesuatu di gnome-keyringmasih bersikeras pengaturan SSH_AUTH_SOCKke soket yang sekarang tidak ada di atas. Ini seperti zombie, hal-hal ini tidak pernah mati.

Pertanyaan

Apa pengaturan variabel itu dan di mana itu dilakukan?

Perangkap

  • Saya tidak bertanya bagaimana saya bisa mereset variabel ke nilai lain.
  • Saya tidak bertanya bagaimana saya dapat mengatur nilai tersebut di seluruh sistem atau dalam file konfigurasi shell.
  • Saya tidak meminta beberapa mantra init-script voodoo untuk membekukan, mengatur, mengatur ulang, menghapus atau mengganti apa pun.
  • Saya tidak meminta saran tentang cara menghapus instalasi: Saya masih membutuhkannya untuk kata sandi saya dan tampaknya menjadi pengelola kata sandi yang paling terintegrasi dan dipoles di Gnome.

Saya ingin benda itu dinonaktifkan sebagaimana mestinya.

JohnW
sumber
2
Copot gnome-keyring?
rudimeier
1
@rudimeier: Saya masih membutuhkan gnome-keyring untuk kata sandi saya dan sejauh yang saya tahu tidak ada yang lebih dipoles dan terintegrasi di Gnome.
JohnW
@rudimeier bahkan itu sepertinya tidak membantu. Saya sudah mencobanya.
André Borie

Jawaban:

8

Biar saya tebak - Anda menggunakan Wayland. Saya mengalami masalah ini hari ini dan berpikir saya akan membagikan solusinya.

Gnome-Session memiliki hardcode override untuk SSH_AUTH_SOCKunderland untuk beberapa alasan. Lihat komit berikut: https://github.com/GNOME/gnome-session/commit/a8896ccad65583885735a04205351f48a42f29ae

Solusinya? Set variabel lingkungan untuk menonaktifkan perilaku ini: GSM_SKIP_SSH_AGENT_WORKAROUND=1. Ini hubungan pendek kode pengaturan lingkungan.

Untuk orang yang menemukan ini yang juga mencoba mengkonfigurasi ssh-agent: Di file systemd unit saya untuk ssh-agent, saya memiliki baris berikut:

ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

File lengkapnya terlihat seperti ini:

[Unit]
Description=SSH Agent
IgnoreOnIsolate=true

[Service]
Type=forking
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK
ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

[Install]
WantedBy=default.target
ceezy
sumber
Terima kasih! Di Ubuntu v17.10 Artful Aardvark, cukup tambahkan export GSM_SKIP_SSH_AGENT_WORKAROUND=1ke profil ~ / .prooting saya dan perbaiki konfigurasi saya yang sebelumnya berfungsi pada v17.04.
Stephen Niedzielski
Ini tampaknya mempengaruhi lebih dari sekadar Wayland, saya sudah mengalami ini ketika mencoba menggunakan gnome-flashback + i3.
dragon788
Harap dicatat bahwa peretasan bekerja hingga Gnome 3.24 atau lebih lama ( wiki.archlinux.org/index.php/GNOME/… )
Pablo Olmos de Aguilera C.
5

(Lingkungan OP tidak diketahui, jadi jalur yang diberikan di sini adalah yang ditemukan di mesin Ubuntu saya)

Di mana gnome-keyring mengatur SSH_AUTH_SOCK?

Untuk menjawab pertanyaan utama dalam judul, SSH_AUTH_SOCK diatur oleh gnome-keyring /usr/share/upstart/sessions/gnome-keyring-ssh.confdengan perintah berikut:

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK

Mengutip initctlmanual:

initctl set-env VARIABLE[=VALUE]

Menambahkan atau memperbarui variabel dalam tabel lingkungan kerja. Variabel yang diatur dengan cara ini akan berlaku untuk semua proses selanjutnya yang dimulai untuk suatu pekerjaan.

-g, --global

Beroperasi di tabel lingkungan kerja global dan semua tabel lingkungan kerja yang sedang berjalan.

Di mana SSH_AUTH_SOCK berasal dari tempat pertama?

The initctlperintah di atas dikondisikan dengan fakta bahwa variabel lingkungan SSH_AUTH_SOCK sudah ada. Jadi, apakah ini situasi ayam dan telur? Apa yang membuatnya?

SSH_AUTH_SOCK pada awalnya ditetapkan oleh ssh-agent asli yang dimulai pada awal sesi X. Mengutip manual:

Soket domain UNIX dibuat dan nama soket ini disimpan dalam SSH_AUTH_SOCKvariabel lingkungan. Soket hanya dapat diakses oleh pengguna saat ini.

TETAPI apa yang dilakukan komponen ssh gnome-keyring adalah mengganti dirinya dengan ssh-agent yang ada. Karena itu ia menimpa SSH_AUTH_SOCK dengan soketnya sendiri /run/user/.../keyring-.../sshsehingga aplikasi berbicara dengannya, dan bukan dengan ssh-agent.

Cara menonaktifkannya

Sekarang, mari kita jawab kalimat terakhir "Saya ingin benda itu dinonaktifkan". Yang diinginkan OP adalah untuk menonaktifkan penimpaan SSH_AUTH_SOCK oleh komponen ssh di gnome-keyring. Mereka ingin mendapatkan kembali variabel SSH_AUTH_SOCK "benar" yang awalnya ditetapkan oleh ssh-agent.

Komponen ssh dimulai oleh skrip startup yang sama yang disebutkan di atas ( /usr/share/upstart/sessions/gnome-keyring-ssh.conf) tetapi dengan satu syarat: string X-GNOME-Autostart-enabled=falsetidak boleh ditemukan di salah satu dari file-file ini:

  • (conf seluruh sistem) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (conf pengguna) ~/.config/autostart/gnome-keyring-ssh.desktop

Oleh karena itu, jika Anda ingin menonaktifkannya, yang harus Anda lakukan adalah menambahkan baris X-GNOME-Autostart-enabled=falseke salah satu file ini, lebih disukai yang ada di direktori HOME Anda.

xienne
sumber
Saya sudah mencoba menonaktifkan entri autostart untuk keyring Gnome dan tampaknya variabel masih ada, tetapi menunjuk ke soket yang tidak ada (jadi menonaktifkan keyring bekerja, tetapi variabel diatur di tempat lain). Saya menjalankan mesin Archlinux sehingga tidak ada pemula dan tidak ada yang jelas dalam systemd yang akan mengatur variabel ..
André Borie
@ AndréBorie Saya tidak tahu Arch atau systemd. Apa nilai baru dari jalur soket? Di macihne saya, ssh-agent biasanya mengaturnya /tmp/ssh-XXX/agent.PID. Apakah ssh-agent masih dalam daftar proses Anda?
xhienne
Jalannya persis seperti dalam pertanyaan aslinya. Tidak ada agen SSH atau keyrings berjalan.
André Borie
Jawaban ini benar-benar sudah tua tetapi saya harap Anda dapat membantu saya juga unix.stackexchange.com/questions/422574/…
Ojs
3

https://wiki.archlinux.org/index.php/GNOME/Keyring#Disable_keyring_daemon_components

Jika Anda ingin menjalankan agen SSH alternatif (mis. Ssh-agent atau gpg-agent, Anda perlu menonaktifkan komponen ssh dari GNOME Keyring. Untuk melakukannya dengan cara lokal-akun:

mkdir ~/.config/autostart
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/ &&
echo 'Hidden=true' >> ~/.config/autostart/gnome-keyring-ssh.desktop

Lalu logout.

Diedit dengan ringan, menghapus penggunaan yang tampaknya tidak berguna printf

sourcejedi
sumber
Ini juga berfungsi untuk saya di Ubuntu 14.04.
Poin
Ini berlaku untuk 3.24 dan yang lebih baru.
Pablo Olmos de Aguilera C.
0

Pada Gnome 3.18, soket tampaknya disimpan di ~/.cache/keyring-(some random string)/ssh

Pada suatu tebakan, itu diatur oleh gnome-keyring-daemon.

Adam Baxter
sumber