Önceden yönlendirilmiş bir ssh anahtarını tmux'a nasıl iletebilirim?


15

SSH ile anahtarlarımın saklandığı bir makineden bağlanıyorum, ikinci bir makineye yönlendiriyorum ve daha sonra tmux içindeki anahtarları kullanmaya çalışıyorum. Ben tmux girerken yönlendirme "gevşek" gibi görünüyor. Anahtarlarımı tmux içinden kullanabilmem için nasıl "tekrar ilet" yapabilirim?

$ 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)

Tüm oturumlarınız arasında paylaşılan bir aracıyı başlattığınızda onaylıyorum, işe yarıyor. Bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > ssh-agent İşlemini Yapılandır'daki belgeler bu sonuca ulaşmak için bir yöntem açıklar.
Dereckson

Yanıtlar:


12

Zaten var olan bir tmux oturumunu ekliyorsanız, kabuk ortam değişkenlerini giriş kabuğunuzdan devralmıyor. Özellikle, ssh aracısı ortam değişkenlerini devralmaz.

Bu düzeltmeyi deneyin :

  1. Bu komut dosyasını oluşturun ve $ HOME / .ssh / saveagent içine koyun

    #!/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. Kabuk başlangıç ​​komut dosyanıza ekleyin. Örneğin bash kullanıyorsanız:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Tmux'u taktıktan sonra . $HOME/.ssh/latestagent

Ayrıca bkz. SSH üzerinden bağlandıktan hemen sonra bir komut dosyasını nasıl çalıştırabilirim? ve tmux oturumuna ekleyin ve bir komut çalıştırın


1
Diğer kabuklarla uyumlu olmaya çalışıyorsanız .profile adresine gönderin.
Dereckson

2
Mükemmel cevap! Birkaç sorunla karşılaştım: a - bazı ortam değişkenleri boşluk içeriyor, bu yüzden saveagentkomut dosyasındaki son satır : olmalıdır echo "export $var=\"$(eval echo '$'$var)\"". b - latestagentsenaryo ile çağrılmalıdır sourceyerine shdeğişkenleri ayarlayarak çağıran kabuk etkileyecek böylece,. c - tmux'u ekledikten sonra latestagentkomut dosyasının otomatik olarak çağrılması burada açıklanan yöntemle yapılabilir: unix.stackexchange.com/questions/86925/…
Joe

Teşekkürler @ Joe, cevabımı iyileştirmelerinizi içerecek şekilde değiştirdim.
GnP

0

Aynı tmuxsunucu oturumları tarafından oluşturulan herhangi bir yeni kabukta ihtiyacınız olan her kabukta ihtiyacınız olan tüm değişkenleri içeren bir komut dosyası oluşturmak istemiyorsanız, büyük olasılıkla tmuxdeğişkenleri set-environmentkomutla global ortamlara veya oturuma koymayı söylemek isteyeceksiniz . Örneğin şu şekilde (bash için):

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

-gbayrağını diğer oturumlarda da eklemeyi ve -t <session>dışarıdan çalıştırıyorsanız kullanmayı unutmayın tmux.


0

Buradaki diğer yanıtları okuduktan sonra, genel / özel anahtar çiftimi uzak sunucuya kopyalamaya karar verdim, böylece artık aracı iletme konusunda endişelenmem gerekmiyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.