ProxyCommand kullanarak birden çok ana bilgisayar üzerinden SSH?


11

Ben evde bilgisayarımda ~ / .ssh / config bir giriş var:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

nerede gateway.example.comgenel Internet ve dahili bir ağ hem bağlandığı iş yerinde bir sunucudur. Ağ geçidi kutusu, / etc / hosts içindeki girişleri kullanarak foo ve çubuğu çözer.

Benim sorunum diğer tarafında bir kutu ulaşmak gerekir foo. Buna "baz" diyelim. "Baz" ana bilgisayarı, foo'nun bağlı olduğu başka bir özel ağ üzerindedir, ancak "ağ geçidinin" bağlı olduğu başka bir ağda değildir.

Bunu kullanarak denedim:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

Ama bu işe yaramıyor ve ben derinliğimden biraz uzaktayım. Bunu nasıl yaparım?

Bunun önemli olduğunu düşünmüyorum, ama bunu Ubuntu 10'da yapıyorum.

Yanıtlar:


13

Kolay.

Aşağıdaki ağ kurulumunu kabul edin:

örnek ağ kurulumu

Şuna benzer bir ~ / .ssh / config dosyası kullanabilmeniz gerekir:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

Buradaki fikir SSH olmasıdır gelmez bir SSH orada başarılı olur, böylece "foo" almak için biliyorum. Ve oradan baz'a "nc" yapabilirsiniz. Ve dahili özel ağda "baz" ın yanında başka ana bilgisayarlar varsa, bunları yalnızca "host baz" satırına ekleyebilirsiniz.

Bu temelde "foo" yı "baz" a ağ geçidi olarak ele alır, tıpkı "gateway" in "foo" ya giriş kapısı olduğu gibi.

Açık?


13

Ghoti cevabını ilgili olarak: yerine Netcat'i (kullanmanın "ssh ... nc %h 22"), OpenSSH 5.4 ile başlayarak, doğrudan bunu yapabilirsiniz: "ssh -W %h:22 ...". Bu şekilde, netcat'in doğru yere kurulup kurulmadığı konusunda endişelenmenize gerek kalmaz.


1
Harika bir nokta, teşekkürler. Bu eski bir soru, ama Ubuntu'yu iş istasyonumda çalıştırırken, "ağ geçidi" nin OpenSSH 5.3 ile eski bir Busybox Linux olduğunu ve "foo" ve "baz" sunucularının FreeBSD (OpenSSH) olduğunu açıklığa kavuşturabilirim. 5.4). Bu yüzden en azından bir netcat'e ihtiyacım vardı.
Graham

@Graham Hayır. Çalışması için sadece 5.4 veya daha büyük olması gereken istemci -W. Çok daha eski olan sunucu tarafında bağlantı noktası yönlendirme koduna dayanır.
kasperd

1

Yerel bilgisayarınızda depolanan özel anahtarları kullanarak, özel komut yollarını, kabuk kullanıcı adlarını ve ana bilgisayar adlarını / IP adreslerini yerel-> ağ geçidi-> hedef ssh gereksinimleriniz olarak değiştirilmiş olarak bu komutu girin.

Bir ağ geçidi / bağlantı kutusu kök ele geçirildiğinde, özel anahtar kimlik doğrulamasından (ağ geçidi ve yerel ssh aracı bağlantısı kullanılarak, diğer ana bilgisayarların ele geçirilmesi gibi) güvenliğini aşma riskini azaltmak için ProxyCommand'ın Aracı İletme'ye göre tercih edildiğini unutmayın.

Sunucuya Proxy SSH'ye Tek Komut (her iki özel anahtarı da yerel bilgisayarda saklayın):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

Korumalı ağdan internete atlamak için yaptığım şey bu.

Ben derleme kodu ile çalışmak için dizüstü bilgisayarımı kullanıyorum . Yana inşa Internet erişimi kısıtlandı, içine atlamak için ilk ihtiyaç github.com bir repo klonlamak için araç kutusu ya internet erişimi yok ki. Ancak internet olan gw'ye erişebilir .

Bunun gibi:

SSH atlama şeması

Benim .ssh/configüzerinde inşa :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

Açıklama.

  1. Bakış açısı derlemedir . Diğer sunucularda yapılandırma yoktur.
  2. İlk olarak, gw almak için bunu araç kutusu ile yapmanız gerektiğini beyan ederim .
  3. İkinci olarak, github.com'a ulaşmak için bunu gw yoluyla yapmanız gerektiğini beyan ederim . Dahili olarak SSH önceki kuralı kullanır.
  4. Sonuçta, git clone git@github.com:aRepo/Theresadece çalışıyor!

Açık?

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.