Ssh seçeneklerini git clone'a aktarma


103

git cloneDepo ana bilgisayarının anahtarını kontrol etmeden ssh olmadan çalıştırmaya çalışıyorum . Bunu ssh'den şu şekilde yapabilirim:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

Aynı ssh seçeneklerini git clone komutuna aktarmanın bir yolu var mı?

Düzenleme: ~/.ssh/configO makinede değiştiremeyeceğim bir kısıtlama veya başka dosyalar var.


2
Yapmaya çalıştığınız şey çok riskli ve muhtemelen yapmamalısınız. Uzak SSH sunucusunun kimliği çoğu durumda kötü bir fikirse doğrulamayı devre dışı bırakmak. SSH kullanarak kazanılan tüm güvenliği etkin bir şekilde devre dışı bırakır ve kendinizi ortadaki adam saldırılarına açarsınız.
aef

1
Aslında, bu genellikle yapmak istediğiniz şeydir. Dahili bir deponuz var. Birisi bunu aldatmayı başardıysa, o zaman başın belada demektir. Hiç de "çok riskli" değil. Aslında ana makine anahtarını ne sıklıkla bant dışı kontrol ediyorsunuz? (Yapmalısın).
Graham Nicholls

Yanıtlar:


47

Bunları şuranıza ekleyin ~/.ssh/config:

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

HostGiriş, komut satırında belirtmek gerekir budur ve HostNamedoğrudur ana bilgisayar olduğunu. Aynı olabilirler veya Hostgiriş bir takma ad olabilir. UserBelirttiğiniz yoksa giriş kullanıldığında user@komut satırında.

Bunu komut satırında yapılandırmanız gerekiyorsa, GIT_SSHortam değişkenini, içinde seçeneklerinizle birlikte bir komut dosyasını gösterecek şekilde ayarlayın.


4
O makinede herhangi bir dosyayı değiştiremeyeceğimi söylemeyi unuttum. Aksi takdirde evet çözümünüz işe yarar.
Daniel

28
GIT_SSHOrtam değişkenini kullanın .
Josh Lee

153

Yakın zamanda yayınlanan git 2.3, parametrelerle bir komut tanımlamak için kullanılabilen yeni bir değişken "GIT_SSH_COMMAND" i destekler.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host

$GIT_SSH_COMMANDönceliklidir $GIT_SSHve ek argümanların dahil edilmesine izin veren kabuk tarafından yorumlanır.


Daha önce yeni satır olmalı mı yoksa git clonekod doğru mu?
Tomáš Zato - Monica'yı eski durumuna getir

8
Bu doğru olmalı, satırsonu olmadan değişken aşağıdaki komut için ayarlanmalıdır. Bir satırsonu eklerseniz değişkeni dışa aktarmanız gerekir, o zaman da çalışmalıdır.
Boris

Teşekkür ederim, 2 gündür buna takılı kaldım!
James Gentes

Booya! Teşekkür ederim.
Jasper Blues

Git 1.9 sürümüyle çalışmayacağına inanıyorum, git 1.9 için alternatif bir çözüm var mı
lazarus

34

Farklı anahtarları belirtmek için yapılan bir diğer seçenek git config core.sshCommandde git 2.10 + (Q3 2016).

Bu tarif edilen ortam değişkeni için bir alternatiftir Boris sitesindeki yanıt )

Bkz. Commit 3c8ede3 (26 Haz 2016), Nguyenễn Thái Ngọc Duy ( pclouds) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde dc21164 tamamlama 2016 Temmuz 19)

core.sshCommandDepo başına GIT_SSH_COMMAND için hangi değerin kullanılacağını belirtmek için yeni bir yapılandırma değişkeni eklenmiştir.

$GIT_ASKPASSVeya ile benzer şekilde $GIT_PROXY_COMMAND, önce yapılandırma dosyasından okuruz sonra geri döneriz.$GIT_SSH_COMMAND .

Bu, aynı ana bilgisayarı hedefleyen farklı özel anahtarları seçmek için kullanışlıdır (örneğin, github)

core.sshCommand:

Bu değişken ayarlanmışsa git fetchve git pushyerine belirtilen komutu kullanacaksassh uzak bir sisteme bağlanmaları gerektiğinde .
Komut, GIT_SSH_COMMANDortam değişkeni ile aynı biçimdedir ve ortam değişkeni ayarlandığında geçersiz kılınır.

Anlamı git clone olabilir :

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git

Bunu tüm depolar için uygulamak istiyorsanız , user1300959 yorumlarda eklediği gibi, genel bir konfigürasyon kullanırsınız.

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

2
Muhtemelen henüz bir deponuz yok, çünkü var git clone- bu durumda git ssh komutunu global olarak yapılandırmak isteyebilirsiniz:git config --global core.sshCommand ...
iurii

@ user1300959 İyi nokta, teşekkürler. Daha fazla görünürlük için yorumunuzu cevaba ekledim.
VonC

Bu en iyi cevap.
MikeSchinkel

Son bölümde kesme işaretinden yoksun
Luigi Lopez

@LuigiLopez Cevabı düzenleyebilir misiniz? Düzenlemenizi gözden geçireceğim.
VonC

22

GIT_SSH değişkenini kullanarak ssh bağımsız değişkenlerinin nasıl geçirileceğine dair karmaşık bir örnek:

$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone user@host

Not: Yukarıdaki satırlar, terminalinize yapıştırmanız gereken terminal komut satırlarıdır. Bir ssh dosyası oluşturacak , onu çalıştırılabilir hale getirecek ve çalıştıracaktır.

Özel anahtar seçeneğini geçmek isterseniz, lütfen git'e hangi özel anahtarı kullanacağını nasıl söyleyeceğimi kontrol edin ? .


Güzel! Soru: Her iki $*ve "$@"işin görünüyor. "$@"Diğeri kullanımdan kaldırılmış göründüğü için normalde kullanırım . $*Bu durumda tercih etmenin bir sebebi var mı ?
mh8020

16

Sistem seviyesi ayarlarını etkilemeden depo seviyesinde konfigürasyon

Mevcut yanıtları birleştirerek aşağıdaki adımları seçiyorum. Bu, yapılandırma değişikliklerinin makine düzeyinde değil, yalnızca üzerinde çalışılan havuz için etkili olmasını sağlar. Bu benim durumumda gerekli çünkü senaryomun paylaşılan bir Bamboo aracısında yürütülmesi gerekiyor.

1. Yaklaşımla depoyu kapatın GIT_SSH_COMMAND.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

2. Klonlandıktan sonra arşiv dizinine gidin.

cd repo-dir

3. core.sshCommandYapılandırmayı ayarlayın, böylece gelecekteki tüm aramalar her zamanki gibi git komutlarıyla çalıştırılabilir, ancak sağlanan git seçeneklerini dahili olarak tüketebilir .

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

1
core.sshCommandYukarıda bahsettiğim güzel kullanım . Olumlu oy verildi.
VonC

5

Git'i> = 2.3 sürümüne güncellemenin ve kullanımın GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@hostbahis seçeneği olduğunu düşünüyorum, ancak bu mümkün değilse, @ josh-lee iyi bir seçenek sundu, ancak lütfen ssh yapılandırma dosyasını girerek yanıtınızı güncelleyin.

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

0

Bu sorun, Windows makinesinde aşağıdaki adımlar uygulanarak giderildi: -

  • C: \ Users \ username.ssh klasörü altında yapılandırma dosyası oluşturun.

  • aşağıdaki satırı bir yapılandırma dosyasına ekleyin.

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • sonra tekrar deneyin.

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.