Bir .ssh / config Host cihazında birden fazla HostName girişi olabilir mi?


10

Evde olmadığımda ev ağımda bir bilgisayara ssh yapabilmek için ssh ve yönlendirici bağlantı noktası iletmeyi ayarladım. Şu anda .ssh/configdosyamda biri ev ağımdayken diğeri olmadığım için iki giriş var :

Host mycomputer
  HostName 192.168.X.X

Host mycomputerathome
  HostName my.no-ip.dynamic

Bu işe yarıyor ama işleri kendim daha kolay yapıp yapamayacağımı merak ediyorum. İlk başarısız olursa o ikinci düşüyor ki birden çok HostName girdilerini listelemek için bir yol umuyordum:

Host mycomputer
  HostName 192.168.X.X
  HostName my.no-ip.dynamic

İlk önce yerel ağımdaki bir ana bilgisayara bağlanmaya çalışacak ve bu yoksa, ip no dinamik ana bilgisayar adımı kullanarak bağlanmaya çalışacak. İki HostNames girmeyi denedim ama ssh mycomputersadece hiçbir şey yapmadan blokları çalıştıran .

Ev ağımda değilken yanlışlıkla yerel ağdaki bir bilgisayara bağlanmak için şifre kimlik doğrulamasını anahtarlar lehine kapattım.

İlki çalışmıyorsa denemek için yedek Ana Bilgisayar Adları belirtmek mümkün mü?


unix.stackexchange.com/questions/424755/… benzerdir ve muhtemelen port yerine ana bilgisayar adı için uyarlanabilir
00'de

BTW, .ssh/configbelirli özellikler için komut dosyalarını çalıştırabilir. ProxyCommand ile yapabileceğinizi biliyorum. Bu soru-cevap bölümünde gösterildiği gibi SF - serverfault.com/questions/401233/… adresinden bir şeyler yapabilirsiniz .
slm

Yanıtlar:


8

Çirkin, ama sanırım bir liman vuruşunun çıkış durumundaki kriteri kullanarak bunu yapabilirdiniz.execMatch

Host mycomputer
  Match exec "nc -z 192.168.1.11 %p"
    HostName 192.168.1.11
  Match !exec "nc -z 192.168.1.11 %p"
    HostName my.no-ip.dynamic

Bunun gerçekten "ev" ağınızda olup olmadığınızı söyleyemeyeceğini unutmayın - yalnızca aynı adres / bağlantı noktasını dinleyen bir hizmete sahip olan aynı adres aralığına sahip özel bir LAN segmentinde olduğunuzdan emin olun.


1
Eklemek zorunda mıyım -w 1yoksa ncsonsuza kadar beklemek gibiydi. Daha basit olabilecek ikinci maç olabilir, Match exec "true"çünkü ilk maç başarısız olursa, ikinci seçimi körü körüne deneyin.
Corey Ogburn

@CoreyOgburn ah evet Alternatif koşulu yapmak için daha güzel bir yol düşünmeye çalışıyordum (yazık Matchyok Else)
steeldriver

Bu yüzden bu yaklaşımla ilgili bir sorunla karşılaştım. Ayrıca şeklinde bir site, xyz.com söyler ve ben çalıştım ssh xyz.combenim Match exec "true"yakaladı ve benim uzaktan HostName kullanarak benim ev sunucusuna beni yönlendirildi söyledi. Ben senin exec ile deneyeceğim ama sanırım aynı şey olacak.
Corey Ogburn

Evet, ' Match exec... Match !execnı kullanmak, ssh'ing komutunun Match !execHostName'i tetikleyip yeniden yazmasına neden oluyor .
Corey Ogburn

2
Yani, ~/.ssh/configgirintiyi daha az umursamayacağı ortaya çıktı . Belirli komutlar kapsamı sıfırlar, yani her yeni Ana Bilgisayar satırı "önceki satırlar önceki Ana Bilgisayar içindi, aşağıdaki satırlar bu yeni Ana Bilgisayar için" diyor. Anlaşılan Match, Host ile aynı "kapsam sıfırlama" gücüne sahip. Bunu hesaba katmak için, Host hattımı değiştirdim Match Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"ve yerel ağım için tüm özel değerleri tanımladım. Sonra !execağ dışında bir satır ekledim ve tüm değerleri ekledim. Şimdi tüm ana bilgisayarlar için iyi çalışıyor.
Corey Ogburn

2

Ben böyle kullanıyorum.

Match host mycomputer exec "nc -G 1 -z 192.168.1.11 %p"
    HostName 192.168.1.11
Match host mycomputer # fallback
    HostName my.no-ip.dynamic
Host mycomputer
    # ... other configs

Host not-my-computer
# ... other configs

ssh_config, girinti bloğu gibi bir şeye sahip değildir. Maç cümlesini belirli bir ana bilgisayarla sınırlamak istiyorsanız, tam koşulu tanımlamanız gerekir.

Uzun bekleyen önleyebilirsiniz ncvererek -G 1(1'ler zaman aşımı bağlantı) seçeneği ve çoklu çağırmayı önlemek için aşağıdaki davranışı yararlanabilirlernc

Eşleme
Koşullu bir blok sunar. Eşleşme satırındaki ölçütlerin tümü karşılanırsa, aşağıdaki satırlardaki anahtar kelimeler, başka bir Eşleşme satırı veya dosyanın sonuna kadar yapılandırma dosyasının genel bölümünde ayarlanan anahtar kelimeleri geçersiz kılar. Bir anahtar kelime memnun olan birden çok Eşleme bloğunda görünürse, anahtar kelimenin yalnızca ilk örneği uygulanır.

https://www.freebsd.org/cgi/man.cgi?sshd_config(5)


1

Hayır; HostNamebir Hostgiriş için birden fazla s belirtirseniz , yalnızca ilk kayıt kabul edilir:

$ grep -A5 Host .ssh/config
Host test
   HostName fake.tld.xyzzy
   HostName real.example.com
   HostName 127.1.2.3
   User username
$ ssh test
ssh: Could not resolve hostname fake.tld.xyzzy: Name or service not known

Sanırım mantıklı. Eğer yazdığımda ssh mycomputerhangi bilgisayara bağlandığım oldukça net olmalı.
Corey Ogburn
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.