GNU/Linux >> Belajar Linux >  >> Linux

Harus Mengatur Ulang Env Vars Di Tmux Saat Saya Melampirkan Ulang?

Saya terutama bekerja pada mac dan ssh/tmux dilampirkan ke mesin Linux untuk melakukan pekerjaan saya. Saya memiliki ssh-agent yang berjalan di mesin Linux. saya punya

set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"

di .tmux.conf saya . Namun, setiap kali saya melampirkan kembali ke sesi ini, saya harus menjalankan

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

agar jendela tmux baru memiliki $SSH_AUTH_SOCK diatur dengan benar. Saya lebih suka tidak harus melakukan ini. Ada ide?

Perbarui

Saya pikir saya tidak menjelaskan ini dengan baik. Inilah fungsi shell saya untuk membuka shell pada mesin jarak jauh:

sshh () {
    tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}

Ketika tmux menjalankan perintah ssh ini, $SSH_AUTH_SOCK adalah tidak ditetapkan, meskipun adalah diatur di lingkungan lokal saya. Jika saya meletakkan ini di lingkungan tmux dengan setenv perintah di atas, semuanya bekerja dengan baik. Pertanyaan saya, mengapa saya harus menjalankan perintah setenv sama sekali?

Perbarui 2

Informasi lebih lanjut:

Saat saya melampirkan ke sesi yang ada, $SSH_AUTH_SOCK tidak diatur di lingkungan tmux (atau lingkungan global).

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

Jika saya mengaturnya secara manual, semuanya berfungsi:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

Jika saya melepas dan memasang kembali, $SSH_AUTH_SOCK kembali ke tidak disetel.

Jawaban yang Diterima:

Sejak saya menerima Bounty, saya akan memposting ulang komentar kunci saya demi kelengkapan – dan untuk menghindari pengaturan pengunjung dengan masalah yang sama di jalur yang salah:

Tmux akan menghapus Variabel Lingkungan

Halaman manual Tmux menyatakan bahwa update-environment akan menghapus variabel “yang tidak ada di lingkungan sumber […] seolah-olah -r diberikan ke perintah set-environment”.

Rupanya itu yang menyebabkan masalah. Lihat tanggapan Chris di bawah ini. Namun, saya masih tidak bisa membayangkan bagaimana variabel bisa tidak ada di "lingkungan sumber" dan tetap valid di jendela tmux yang baru dibuat…

Jawaban Sebelumnya:

Cara kerja penerusan SSH

Pada mesin jarak jauh, lihat lingkungan shell Anda setelah membuat koneksi SSH:

[email protected]:~$ env | grep SSH
SSH_CLIENT=68.38.123.35 45926 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=68.38.123.35 48926 10.1.35.23 22
SSH_AUTH_SOCK=/tmp/ssh-hRNwjA1342/agent.1342

Yang penting di sini adalah SSH_AUTH_SOCK yang saat ini disetel ke beberapa file di /tmp. Jika Anda memeriksa file ini, Anda akan melihat bahwa itu adalah soket domain Unix — dan terhubung ke instance ssh tertentu yang Anda hubungkan. Yang penting, ini berubah setiap kali Anda terhubung.

Segera setelah Anda keluar, file soket tertentu itu hilang. Sekarang, jika Anda pergi dan memasang kembali sesi tmux Anda, Anda akan melihat masalahnya. Ini memiliki lingkungan sejak tmux diluncurkan — yang bisa saja beberapa minggu yang lalu. Soket khusus itu sudah lama mati.

Terkait:uji shell apakah beberapa baris string berisi pola yang ditentukan di baris terakhir?

Solusi

Karena kita tahu masalahnya berkaitan dengan mengetahui di mana soket otentikasi SSH yang aktif saat ini, mari kita letakkan di tempat yang dapat diprediksi!

Di file .bashrc atau .zshrc Anda di mesin jarak jauh, tambahkan berikut ini:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    rm -f /tmp/ssh-agent-$USER-screen
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

Saya tidak berpikir Anda bahkan harus meletakkan 'perbarui-perintah lingkungan' di tmux.conf Anda. Menurut halaman manual, SSH_AUTH_SOCK sudah tercakup secara default.

Kredit

Tanggapan saya adalah kutipan dari posting blog ini oleh Mark 'xb95' Smith yang menjelaskan masalah yang sama untuk layar.


Linux
  1. Soket Tmux Api?

  2. Ssh-agent Tidak Diatur (ssh_auth_sock, Ssh_agent_pid Env Vars Tidak Diatur)?

  3. Bagaimana Cara Memuat Ubuntu Ketika Yang Saya Miliki Hanya Grub?

  1. Bagaimana cara menginstal VIM di Linux ketika saya tidak memiliki izin root?

  2. Bagaimana cara mengurai output dari perintah find ketika nama file memiliki spasi di dalamnya?

  3. Mengapa saya tidak memiliki penyorotan sintaks ketika saya sudo vi <filename>?

  1. Apakah Kami Memiliki Undo Di Linux?

  2. Untuk Env Atau Tidak Untuk Env?

  3. Berapa lama daemon harus keluar ketika sinyal shutdown server diterima?