~ / .Ssh / config dizininde dinamik olarak SSH Ana Bilgisayar girdileri oluşturun


9

Ben ssh üzerinde bir dizi ev sahibi yönetmek zorunda. Ancak bunlara yalnızca belirli bir ağ geçidi ssh sunucusu üzerinden erişebiliyorum.

Bende aşağıdakiler var ~/.ssh/config:

Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

Ancak bu makinelerin çoğuna bağlanmak zorundayım. Benim düzinelerce giriş koymak yerine, ~/.ssh/configyine de böyle bir şey olabilir:

Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22

Argüman %hiçinde kullanabileceğinizi biliyorum Hostname, ama bu ana bilgisayar adı olurdu. Gerçekten ihtiyacım olan şey, bash gibi bir tür dize ikame ${VAR%thingie}. Mümkün mü?

Yanıtlar:


24

Bu, aşağıdaki SSH yapılandırma dosyası ile yapılabilir:

Host *
  ServerAliveInterval 120

Host gateway.somewhere.com
  User jdoe

Host gateway+*
  User jdoe
  ProxyCommand ssh -T -a $(echo %h |cut -d+ -f1).somewhere.com nc $(echo %h |cut -d+ -f2) %p 2>/dev/null
  ControlMaster auto
  ControlPath ~/.ssh/ssh-control_%r@%h:%p

Daha sonra dahili ana makinelerinize şu şekilde erişirsiniz:

ssh gateway+internalhost01.somewhere.com
ssh gateway+internalhost02.somewhere.com

Sağ yarı için seçtiğiniz ad atlama ana bilgisayarı tarafından çözülebilir olmalıdır.

Farklı ana bilgisayar sınıflarındaki farklı kullanıcılara el ile eşlemeniz gerektiğinde User parametresi belirtilir. ControlMaster ve ControlPath, SSH bağlantısının yeniden kullanımına izin vermek için belirtilmiştir.


6

Komut satırından geleceği için Ana MakineAdını manuel olarak belirtmeniz gerekmez.

Deneyin:

Host *.domain  
  IdentityFile ~/.ssh/id_rsa  
  ProxyCommand ssh mygateway /usr/bin/nc %h 22

Bu yaklaşım ile ilgili sorun, Hostname oldukça genel (örn. Db1, www, mail2), oysa ben onlara proje ile birlikte önek istiyorum, çünkü 'db2' adlı farklı bir makineye ssh gerekebilir. Host Dolayısıyla önek
Rory

2
Yani aslında DNS'nizi yeniden yapılandırmak istiyorsunuz. En basit (ama en hantal çözüm) hosts dosyanızı değiştirmektir. Öte yandan, .invalid etki alanına sahip iş istasyonunuza her zaman yerel bir DNS sunucusu ekleyebilir ve tercih ettiğiniz ana makine adlarını kullanabilirsiniz.
Martin M.

Önceki + 1'leyin. Her proje için bir alt alan adı oluşturun. DNS hayatınızı kolaylaştırmak için var;)
Dan Carley

1

Bunu yapmanın bir yolu yok gibi görünüyor.


1

Benzer bir sorunum vardı ve benim için tüm kazanı oluşturan bir senaryo yazdım. Artık ~ / ssh / config değiştirmiyorum, ~ / ssh / config.in değiştiriyorum ve betiğimi yeniden çalıştırıyorum.


1
Senaryonuzu paylaşmak ister misiniz? Bunu yapmayı düşündüm, ancak sağlam ve genel bir çözümün doğru olması için çok fazla iş gerektirebileceği anlaşılıyor. Çözümünüz henüz böyle olmasa bile, neyin doğru olduğunu düşündüğünüzü ve bunu yapmak için farklı bir şekilde ne yapacağınızı bilmek faydalı olacaktır.
iconoclast

Benim düşüncem, .ssh/config.dher şablon için bir dosyaya sahip olmaktı, burada her şablon finalde bir veya daha fazla giriş üretecekti ~/.ssh/config. Evrensel değişkenlere sahip bir dosya da olurdu, ancak her şablonun üstte listelenen küresellere göre öncelikli olacak kendi değişkenleri olabilir. ~/.ssh/configDosya bir talep üzerine veya oluşturulan olabilir zamanlamaya-it olur değil madde-sürece size korumak istediğini kendisine doğrudan düzenlemeler yapılmış asla.
iconoclast

Senaryom tamamen belgelenmemiş ve oluşturmak için zamanım olmayan belgeler veya örnekler olmadan anlaşılabilir olacağını düşünmüyorum.
Michael Hoffman

Anlaşılabilir. Belirttiğim yaklaşımla ilgili herhangi bir geri bildirim takdir edilecektir, özellikle de önemli bir ihtiyaç veya kullanım durumuna veya başka büyük (veya küçük) engellere baktığımda takdir edilecektir.
iconoclast

1
Bence bu iyi bir yaklaşım, muhtemelen kullandığım yaklaşımdan biraz daha az kafa karıştırıcı. Bir dizi Host bildirimini belleğe, sonra da bir dizi host olmayan bildirimi okudum. Ana bilgisayar olmayan bildirimler, başka bir Ana Bilgisayar bulunana kadar geçerli gruptaki her Ana Makineye uygulanır. Ayrıca Ana Bilgisayarların, globbing de dahil olmak üzere dosyada birden çok kez bildirilmesine izin veriyorum. Sonunda bellekte inşa ettiğim her şeyi yazıyorum.
Michael Hoffman

1

Ana makine adının doğrudan Hostnamebildirim yoluyla geçersiz kılınmasını belirtmeyin ve bunun yerine çalışma zamanında belirleyin. Bunu , komutta başvurmak için ProxyCommandkullanarak bir parçası olarak değerlendirerek yapın %h( %p22 olarak sabit kodlama portu yerine de kullanın ) yani

Host mygateway-*
   #Hostname ???WHAT GOES HERE????
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh mygateway nc $(echo %h|sed 's/^mygateway-//') %p

Hatta daha genel bir stanza sahip olabilir, böylece herhangi bir ana bilgisayarı -olduğu gibi veya başka bir eşleşen stanza (lar) a göre tedavi edilecek -şekilde belirtebilirsiniz , ancak herhangi bir belirtmek için genel bir yaklaşıma sahip olabilirsiniz <gateway>-<target>:

Host *-*
   # Assume LHS of "-" is GW and RHS of "-" is target host
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh $(echo %h|cut -d - -f1) nc $(echo %h|cut -d - -f2-) %p

Ayrıca, SSH istemcisinin daha yeni sürümleri [-W host:port]doğrudan nc(netcat) ile aynı işlevi gerçekleştirme seçeneğini destekler . Gibi, değiştirilmiş kullanabilirsiniz:

Host *-*
   # Assume LHS of "-" is GW and RHS of "-" is target host
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh -W $(echo %h|cut -d - -f2-):%p $(echo %h|cut -d - -f1)

Tabii ki, sınırlı bir ana bilgisayar listesine sahip olsaydınız, her zaman şunları yapabilirsiniz:

Host host1 host2 host3 hostN
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh mygateway nc %h %p

Bu yardımcı olur umarım!


0

Aynı kurulumda bir istemcim vardı ve sorunumu çözmek için DSSH kullandım .
DSSH, diğer şeylerin yanı sıra, bir ağ geçidi ana bilgisayarı aracılığıyla uzak ana bilgisayarlara şeffaf bir şekilde oturum açmanıza olanak tanır.

Kullanım örnekleri

  • "Ena" girişi gerektiren Cisco yönlendiricilerinden yapılandırma parametrelerini toplama
  • Çıkış durumunu korurken, PermitRootLogin doğrudan kök olarak devre dışı bırakılan sunuculara (su ve parolayı otomatik olarak yazarak) giriş yapın
  • Gelişmiş günlük kaydı gibi özel mantık ekleme
  • hedef sunucuya ulaşmak için birkaç bağlantı üzerinden tünel

5
Ben ~ / .ssh / config yapabileceğim şeyler için, java kullanan bazı rastgele üçüncü taraf ssh istemcisi kullanmaya başlamak istemem.
Rory

bağlantı öldü
iconoclast

Yazılım kaynağını Github'da bulabilirsiniz
Guest
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.