Windows'ta Git Bash'i başlatırken SSH Agent'ı çalıştırma


152

Git bash kullanıyorum. kullanmak zorundayım

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

ne zaman yeni bir git bash başlatsam.

Ssh aracısını kalıcı olarak ayarlamanın bir yolu var mı? Yoksa pencerelerin ssh anahtarlarını yönetmek için iyi bir yolu var mı?

Ben yeni biriyim, lütfen bana ayrıntılı bir eğitim verin, teşekkürler!


3
olduğu /my/ssh/location/gibi bir şeye equalivent /c/Users/Foobar/.ssh/?
Nick

Benzer bir sorun, şu anda çözülmüş olan superuser.com/q/1238486/478378 adresinde de yayınlanmıştır . Aşağıdaki öz , tüm detayları içerir gist.github.com/jiggneshhgohel/afe96f0d57bdbf8beba305a73905402d . Teşekkürler.
Jignesh Gohel

Yanıtlar:


138

Bir git bash oturumda, bir komut dosyası ekleyebilir ~/.profileveya ~/.bashrc( ile ~genellikle ayarlı olan%USERPROFILE% başlatmak için söz konusu oturum için sırayla otomatik) ssh-agent. Dosya yoksa, oluşturun.

GitHub'ın " SSH anahtar parolalarıyla çalışma " bölümünde açıkladığı şey budur .

Bu makalenin " Windows için Git'te ssh-agent'ı otomatik olarak başlatma " bölümünde, aracının çalışıp çalışmadığını kontrol eden sağlam bir komut dosyası vardır. Aşağıda sadece bir pasaj vardır, tam çözüm için GitHub makalesine bakın.

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

Diğer kaynaklar:

" Ssh-agent Windows komut kabuğundan git run ile çalışmak için alma " benzer bir komut dosyası vardır, ancak öncelikle GitHub makalesine başvurmak istiyorum, hangi daha sağlam ve güncel.


Sahip olduğum hafif bir sıkıntı, git kullanmayacağımı biliyor olsaydım ssh anahtar parolasını girmeyecektim, sonra açtığım her kabuk tekrar istedi. Bu durum 1, anahtarsız çalışan ajan, bu nedenle ssh-add'i bu bölümden kaldırabilirsiniz, daha sonra parolanızı ilk kez girmezseniz, ssh-add'i manuel olarak çalışana kadar tekrar sorulmaz.
Andy2K11

@Gordon Bu help.github.com/articles/working-with-ssh-key-passphrases GitHub bağlantısının hangi kısmı değişti? İçeriği hala orada ve bu cevap için hala alakalı görünüyor.
VonC

1
@ Andy2K11 Bir kabuk açarken değil, ilk kez parolayı girmek istiyorsanız, benim için en temiz yol, ssh-add'i belirttiğiniz gibi .bash_profile'dan kaldırmak ve "AddKeysToAgent yes" .ssh / config dosyanız (bkz. şu yanıt: superuser.com/a/1114257/523133 ). Bu şekilde ssh-add çalıştırmayı hatırlamanız bile gerekmez.
hardsetting

30

Not: Bu talimatlar, Windows 10 Linux Alt Sisteminde açılan bir Bash kabuğu bağlamındadır ve Windows'da oluşturulan ve Windows'ta Ubuntu'daki Bash ile sym-link SSH anahtarlarından bahsetmez.

1) .bashrc'nizi aşağıdakilere ekleyerek güncelleyin

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    touch $SSH_ENV
    chmod 600 "${SSH_ENV}"
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' >> "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2) Sonra $ source ~/.bashrcyapılandırmanızı yeniden yüklemek için çalıştırın .

Yukarıdaki adımlar https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch adresinden alınmıştır.

3) Varsa, bir SSH yapılandırma dosyası oluşturun. Yeni bir komut oluşturmak için aşağıdaki komutu kullanın:.ssh$ touch config

4) Şuraya ekle: ~/.ssh/config

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes


Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5) Komutunuzu kullanarak anahtarınızı SSH aracısına ekleyin, $ ssh-add ~/.ssh/id_work_gmailardından sith kullanarak github hesabınıza veya uzak ana bilgisayarınıza bağlanabilmeniz gerekir. Örneğin, yukarıdaki kod örnekleri bağlamında:

$ ssh github.com-<YOUR_GITHUB_USERNAME>

veya

$ ssh <USER>@csexperimental.abc.com

SSH aracısına bu anahtar ekleme işleminin yalnızca bir defa gerçekleştirilmesi gerekir.

6) Şimdi Bash oturumunuzun Windows Linux Alt Sistemindeki oturumunu kapatın, yani tüm Bash konsollarından tekrar çıkın ve tekrar yeni bir konsol başlatın ve SSH yapılandırma dosyasında yapılandırıldığı gibi Github Ana Bilgisayarınıza veya başka bir ana bilgisayara SSH'yi deneyin ve fazladan bir şeye ihtiyaç duymadan çalışmalıdır. adımları tekrarlayın.

Not:

Teşekkürler.


1
WSL kullanarak ilginç bir alternatif. +1
VonC

@JigneshGohel Teşekkür ederim, bu script mükemmel ve v. Temiz! Sadece merak ettim, neden var >> "${SSH_ENV}"? Sadece öyle değil > "${SSH_ENV}"mi? Sizinki elbette çalışıyor, ancak yavaş yavaş daha uzun ve daha uzun bir ~/.ssh/environmentdosyayla sonuçlanıyor , çünkü (şu anda düşündüğüm gibi !?) bir sebep yok ... Çok, çok teşekkürler! Bu komut sadece .bashrcWSL Ubuntu için varsayılan dahil edilmesi gerektiğini hissediyorum , çok yararlı!
MikeBeaton

5

Bunu başarmanın en kolay yolunun Pageant'ı SSH ajanı ve plink olarak kullanmak olduğunu buldum.

Uzaktan kumandanızda kullanılan ana bilgisayar adı için bir macun oturumu yapılandırmanız gerekir.

Ayrıca, macun ile aynı siteden indirilebilecek plink.exe'ye de ihtiyacınız olacak.

Ve anahtarınız yüklüyken Pageant'a ihtiyacınız var. Giriş klasörümde oturum açtığımda SSH anahtarımı yükleyen bir kısayol var.

Git-scm'yi yüklediğinizde, OpenSSH yerine kaplumbağa / plink kullanmasını belirtebilirsiniz.

Net etki, git-bash'ı istediğiniz zaman açabileceğiniz ve parolalar için zorlanmadan itebileceğiniz / çekebileceğiniz.

Pageant anahtarınızı yüklediğinde macun ve WinSCP oturumları için de geçerlidir. Hayatı çok daha kolay (ve güvenli) hale getirir.


2

Windows'ta macunu geçici bir çözüm olarak kullanmayı sevmediğim için, çok basit bir yardımcı program ssh-agent-wrapper oluşturdum . .Ssh klasörlerinizi tarar ve aracıya tüm anahtarlarınızı ekler. Çalışması için Windows başlangıç ​​klasörüne koymanız yeterlidir.

Varsayımlar :

  • ssh-agent yolunda
  • shh-add in path (her ikisi de git'i yüklerken "KIRMIZI" seçeneğini seçerek
  • özel anahtarlar% USERPROFILE% /. ssh klasöründedir
  • özel anahtar adları id ile başlar (örneğin id_rsa)

Güzel! +1. Her zaman openssh (macun değil) ile çalışırım, bu yüzden parolaları olan özel anahtarlar için ilginç bir çözümdür.
VonC

Github'da olduğunuz için, neden kaynağı sadece bir git deposu yapmıyorsunuz?
Thorbjørn Ravn Andersen

Sadece / release'ları yoldan kaldırın. ;-)
Erez A. Korn

1

Ben muhtemelen böyle bir PC çaylak ve bariz bir şey eksik çünkü, en iyi cevap dayalı çalışmak için alamadım. Benim kadar meydan Ama sadece Bilginize durumunda başka birinin yardımcı olur ne NİHAYET çalıştı bağlantılardan birinin içinden idi burada (cevapları başvurulan). Bu sadece aşağıdakileri yapıştırmamı içeriyordu .bash_profile:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Muhtemelen bir şey garip yapılandırılmış, ama bu benim için eklendiğinde başarılı olmadı var .profileya .bashrc. Karşılaştığım diğer gerçek zorluk, bu bilgisayarda yönetici değilim ve BT tarafından onaylanmadan ortam değişkenlerini değiştiremem, bu yüzden bu erişemeyenler için bir çözüm.

Git bash'ı açtığınızda ssh şifreniz istenirse bunun işe yaradığını biliyorsunuz. Hallelujah nihayet bir şey çalıştı.


1

Bunu ~ / .bashrc (veya kaynağından alınan bir dosya) içine koyun, bu da kabuk başına gereksiz yere birden çok kez çalıştırılmasını engelleyecektir:

if [ -z "$SSH_AGENT_PID" ]; then
        eval `ssh-agent -s`
fi

Ve sonra ~ / .ssh / config dosyasına "AddKeysToAgent yes" ekleyin:

Host *
    AddKeysToAgent yes

ssh sunucunuza (veya git pull) normal şekilde bağlanırsanız, oturum başına yalnızca bir kez şifre / parola istenir.


0

~ Dizininizde yeni bir .bashrc dosyası oluşturun .

Her bash başlattığınızda yürütülmesini istediğiniz komutları koyabilirsiniz


Çalışmak zorunda. Bu .bashrcdosyaya basit bir şey koymaya çalışın ( echo testGit Bash'i yürüttüğünüzde yüklenip yüklenmediğini kontrol edin.
David Ferenczy Rogožan 21:16

Ayrıca, hangi sürümün kurulu olduğuna ve kullanıcı seçeneklerine bağlı olarak PowerShell'deki ~ öğesinin Git Bash / Cygwin'deki ~ öğesinden muhtemelen farklı olduğunu unutmayın.
dragon788

@Yar Windows'ta .bashrckullanıcı klasörünüzü girin örn C:\Users\john.
Martin van Driel

0

Basit iki dize çözüm gelen bu cevap :

İçin sh , bash vb:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

İçin csh , tcsh , vs:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`
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.