Bagaimana saya bisa mendapatkan ssh-agent bekerja di ssh dan di tmux (pada OS X)?


17

Saya memiliki kunci pribadi yang disiapkan untuk akun github saya, frasa sandi yang, saya percaya, simpan di gantungan kunci OS X. Saya tentu tidak perlu mengetikkannya ketika saya membuka jendela terminal dan masuk ssh git@github.com.

Namun, ketika saya menjalankan bash di atas sesi ssh, atau secara lokal di dalam sesi tmux, saya harus mengetikkan frasa sandi setiap kali saya mencoba ssh ke github.

Pertanyaan ini menunjukkan bahwa ada masalah yang sama dengan layar, tapi saya tidak benar-benar memahami masalah dengan cukup baik untuk memperbaikinya di tmux. Ada juga halaman ini yang menyertakan solusi yang cukup rumit, tetapi untuk zsh.

EDIT :

Menanggapi jawaban @ Mikel , dari terminal lokal saya mendapatkan output berikut:

[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~] 
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"

Sedangkan lebih dari ssh atau dalam tmux saya dapatkan:

[~]
$ echo $SSH_AUTH_SOCK

[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found

echo $SSH_AGENT_PID tidak mengembalikan apa pun shell yang saya jalankan.


Bagaimana dengan typeset -p SSH_AUTH_SOCK?
Mikel

@Mikel bash: typeset: SSH_AUTH_SOCK: not founddari dalam ssh / tmux. Saya akan mencobanya secara lokal malam ini, jika perlu.
Kaya

@Mikel Saya telah menambahkan output perintah itu ke pertanyaan.
Kaya

AFAIK, pertanyaan dan jawaban tidak spesifik untuk OS X. Itu relevan untuk menghindari beberapa dups non-OS X-spesifik, yaitu superuser.com/q/334975/46794 dan superuser.com/q/479796/46794 .
Blaisorblade

@ Blaisorblade Saya mendapat kesan passphrase saya disimpan di gantungan kunci OS X (Meskipun saya tidak ingat sekarang mengapa saya percaya itu adalah masalahnya). Apakah itu salah?
Rich

Jawaban:


4

Kolega saya membuat beberapa fungsi bash untuk membantu menemukan agen langsung: https://github.com/wwalker/ssh-find-agent

Dia menggunakannya terutama untuk menghubungkan antar sistem (laptop ke desktop, dll), tapi saya paling sering menggunakannya untuk sesi tmux lokal di mana Anda logout / in dari window manager Anda (OS X untuk saya sendiri).

Pemakaian

  1. Unduh ssh-find-agent.bash ( git clone git://github.com/wwalker/ssh-find-agent.gitberfungsi).

  2. Tambahkan yang berikut ke ~ / .bashrc:

    . /path/to/ssh-find-agent.bash
    
  3. Kemudian Anda dapat mengetik yang berikut untuk mengatur SSH_AUTH_SOCK di shell Anda saat ini:

    set_ssh_agent_socket
    

Saya menerima jawaban ini daripada yang lain yang mungkin bekerja karena tidak memerlukan penerusan agen SSH, yang lebih baik untuk tujuan saya. Terima kasih!
Kaya

8

Solusi elegan, diambil dari dagit.o :

Membuat ~/.ssh/rc

#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

Tambahkan ~/.tmux.conf

set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock

7

Di .tmux.conffile konfigurasi Anda , tambahkan baris ini:

set -g perbarui lingkungan "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION"

Ini menyebabkan variabel lingkungan ini akan disalin dari shell utama Anda ke semua shell yang dibuka dalam tmux, yang kemudian memungkinkan ssh-agent bekerja dengan baik di dalam shell tmux tersebut.


2
Ini adalah metode yang tepat untuk memasukkan nilai-nilai tersebut ke dalam sesi tmux , tetapi semua variabel lingkungan tersebut harus sudah dimasukkan dalam nilai default update-environment. OP harus memeriksa update-environmentnilainya dan mungkin memperbarui di mana pun ia telah diubah.
Chris Johnsen

1
Hm .. setelah menggali lebih jauh, saya setuju - pengaturan yang saya daftarkan sudah dalam pengaturan standar, dan jika saya menjalankan tmux tanpa file .tmux.conf, semuanya berfungsi dengan baik. Dan jika saya menghapus baris yang saya kutip dari file .tmux.conf saya, itu juga berfungsi untuk saya, meskipun sebelumnya tidak. Jelas ada sesuatu yang salah sesekali. Mungkin ada hubungannya dengan menangguhkan / mengembalikan atau melampirkan / melepas atau menghisap sesi tmux dari jarak jauh. Saya akan tetap membuka mata dan memperbarui jika saya menemukan faktor yang membuatnya dapat diproduksi ulang.
Trevor Powell

update-environmentdiatur dengan benar. Namun, masalahnya tetap terjadi.
Rich

2
Masalah dengan ini adalah bahwa konfigurasi hanya akan dieksekusi kembali ketika tidak ada tmuxserver, menentang tujuan melampirkan kembali ... Mungkin ada saklar baris perintah untuk memperbarui kembali variabel-variabel itu?
Tobias Kienzler

3

Itu terjadi pada saya bahwa panel yang dibuat ketika menghubungkan melalui ssh dari OS X mulai menanyakan frasa sandi saya setelah beberapa saat berfungsi ok. Saya menemukan cara untuk memperbaiki yang mencuri baris ini dari http://santini.di.unimi.it/extras/ph/my-tmux-setup.html

eval $(tmux show-environment -t [YOUR-SESSION] | grep '^SSH_AUTH_SOCK')

Jalankan saja dari panel yang mengeluh.


2

Tidak yakin apakah Anda menggunakan bash atau shell lain, tetapi setup tmux orang ini sepertinya akan bekerja untuk bash. Secara pribadi, saya menggunakan zsh dengan oh-my-zsh , dan saya menemukan bahwa ssh-agent mulai bekerja di tmux setelah saya menambahkan

zstyle :omz:plugins:ssh-agent agent-forwarding on

ke file .zshrc saya dan memuat ulang konfigurasi di sesi zsh saya yang sedang berjalan. Saya juga menemukan solusi berorientasi zsh orang ini , tetapi ternyata tidak perlu bagi saya.


1

Apa yang dilakukan:

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

mencetak?

Jalankan di terminal normal Anda, lalu jalankan di dalam tmuxsesi Anda . Mereka harus mencetak hal yang sama.


Saya menambahkan respons pada perintah-perintah ini pada pertanyaan. Saya juga menyadari bahwa masalah juga terjadi ketika saya login lewat ssh (tanpa menggunakan tmux), dan telah mengedit pertanyaannya.
Kaya

4
sshgampang. Aktifkan penerusan agen. Cara termudah untuk melakukannya adalah menjalankan ssh -Aalih-alih ssh. Gunakan alias sehingga Anda tidak perlu mengetiknya setiap waktu, atau memasukkannya ke dalam .SSH/config.
Mikel

Keren Terimakasih. Itu berhasil untuk ssh. Ada ide bagaimana cara memperbaikinya di tmux?
Kaya

0

Ada banyak solusi, tetapi yang paling sederhana ditemukan dalam jawaban Hans Ginzel, tertanggal 8 Januari 2016, untuk pertanyaan terkait StackOverflow tertanggal 27 Januari 2014 . Cukup tambahkan berikut ini ke shell Anda ~/.profileatau yang serupa:

alias ssh='eval $(tmux show-env -s | grep "^SSH_") && ssh'

Tidak perlu mendefinisikan fungsi multi-line atau membuat file sementara baru. Jika Anda tidak ingin alias ssh, cukup ubah ke fixsshdan hapus && sshdi akhir, dan jalankan fixsshsetiap kali Anda mencoba menjalankan sshdari dalam sesi tmux yang disambungkan kembali.

Jawaban oleh Hans Ginzel menunjukkan bahwa 'versi yang lebih baru' dari tmux diperlukan untuk dijalankan show-env -s. Ini berfungsi untuk saya di tmux 2.7, dan pada bacaan saya tentang changelog , -sditambahkan pada 3 Juni 2008 sebelum rilis tmux 0.3. tmux 2.3 (29 September 2016) ada di stabil Debian.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.