Bagaimana saya bisa meneruskan kunci ssh yang sudah diteruskan ke tmux?

15

Saya terhubung melalui SSH dari mesin tempat kunci saya disimpan, meneruskan ke mesin kedua, dan kemudian mencoba menggunakan kunci dari dalam tmux. Saya tampaknya "kehilangan" penerusan ketika memasuki tmux. Bagaimana "meneruskan lagi" sehingga saya dapat menggunakan kunci saya dari dalam tmux?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)
pengguna50849
sumber
Saya mengkonfirmasi jika Anda meluncurkan agen yang dibagikan di antara semua sesi Anda, itu berhasil. Dokumentasi di bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > Konfigurasi Proses ssh-agent menjelaskan metode untuk mencapai hasil ini.
Dereckson

Jawaban:

12

Jika Anda melampirkan sesi tmux yang sudah ada, shell tidak mewarisi variabel lingkungan dari shell login Anda. Terutama, itu tidak akan mewarisi variabel lingkungan ssh agent.

Coba perbaikan ini :

  1. Buat skrip ini dan masukkan $ HOME / .ssh / saveagent

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. Tambahkan ke skrip startup shell Anda. Misalnya jika Anda menggunakan bash:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Setelah memasang tmux, jalankan . $HOME/.ssh/latestagent

Lihat juga Bagaimana saya bisa menjalankan skrip segera setelah terhubung melalui SSH? dan Lampirkan ke sesi tmux dan jalankan perintah

GnP
sumber
1
Kirim ke profil. Mungkin, jika Anda mencoba agar kompatibel dengan shell sh lainnya.
Dereckson
2
Jawaban bagus! Beberapa masalah aku berlari ke: a - beberapa lingkungan variabel mengandung spasi, sehingga garis sebelum terakhir di saveagentskrip harus: echo "export $var=\"$(eval echo '$'$var)\"". b - latestagentskrip harus dipanggil dengan sourcealih - alih sh, jadi pengaturan variabel akan memengaruhi shell panggilan. c - memanggil latestagentskrip secara otomatis setelah melampirkan tmux dapat dilakukan melalui metode yang dijelaskan di sini: unix.stackexchange.com/questions/86925/…
Joe
Terima kasih @ Jo, saya mengubah jawaban saya untuk menyertakan perbaikan Anda.
GnP
0

Kecuali jika Anda ingin sumber skrip yang berisi semua variabel yang Anda butuhkan di setiap shell Anda lebih lanjut menelurkan di setiap shell baru yang dihasilkan oleh tmuxsesi server yang sama , Anda mungkin ingin memberitahu tmuxuntuk memasukkan variabel ke dalam sesi atau lingkungan global dengan set-environmentperintah. Misalnya seperti ini (untuk pesta):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

ingatlah untuk menambahkan -gbendera jika Anda menginginkannya di sesi lain juga dan menggunakannya -t <session>jika Anda menjalankannya dari luar tmux.

peterph
sumber
0

Setelah membaca jawaban lain di sini, saya memutuskan untuk menyalin keypair publik / pribadi saya ke server jauh, sehingga saya tidak perlu khawatir tentang penerusan agen lagi.

M. Scott Ford
sumber