Verileri SSH tüneli üzerinden birden fazla atlama üzerinden kopyalama


14

Söz konusu iki ana ortamımız var:

Geliştirme ve KG

Her ortamın iki sunucusu vardır:

  • Atlama Kutusu
  • Uygulama sunucusu

Uygulama sunucusuna bağlanmak için önce atlama kutusuna, ardından Uygulama sunucusuna SSH bağlamanız gerekir.

Güvenlik duvarının izniyle birkaç kural vardır:

  • Uygulama sunucusuna atlama kutusu üzerinden bağlanmanız GEREKİR
  • Uygulama sunucusu atlama kutularından birine bağlanamıyor
  • Atlama kutuları aynı alt ağdadır ve birbirleriyle konuşabilirler.

Bizim problemimiz

Üzerinde çok fazla içeriğimiz var (670 GB) DEVELOPMENT APPLICATION SERVERve bunu QA APPLICATION SERVER.

Bu verilerin atlama kutularına kopyalanması bir seçenek değildir, çünkü gerekli alan yetersizdir.

Biraz araştırma yaptım ve bu sunucular üzerinden potansiyel olarak bir dizi tünel yapabileceğimizi öğrendim, böylece verileri doğrudan bir uygulama sunucusundan diğerine tüneller üzerinden aktarabiliriz. Ancak, uygulama sunucusundan atlama kutusuna bağlanamadığımız sorun.

Herhangi bir seçeneğimiz var mı? Bu umutsuz bir durum haline geliyor ve zaman çok önemli. Verileri indirmek ve yeniden yüklemek için zamanımız yok. Bir gigabit bağlantısı olduğu için sunuculardaki ağ üzerinden kopyalama hızlı bir şekilde devam edecektir.


2
Bağlantı kurulduktan sonra, her iki şekilde de kopyalayabilirsiniz: $ devel_host $ tar -cf - | ssh -t jumbox 'ssh app_serv "tar -xf -"' ya da tar etrafında başka bir yol.
Alex_www

Bu yüzden dev atlama kutusundan dev uygulama sunucusuna bağlanabiliriz, ancak başka şekilde değil. Bu bağlantı kurulmuşsa, her iki şekilde de kopyalayabilir miyiz? bu içeriği önce atlama kutularına kaydetmeden diğer uygulama sunucusuna taşımanın en iyi yolu nedir?
Barry Chapman

Tam olarak, "borulama" "katran" en basit çözümdür.
Alex_www

Yanıtlar:


15

Şimdiye kadar, en kolay yol sadece scp ile kopyalamaktır. Ayrıca, bu sözdizimi aslında diğer bazı önerilerin aksine çalışır.

Bu sözdizimini kolaylıkla yenemezsiniz. Potansiyel olarak karmaşık boruları düşünmek zorunda kalmadan tekrar tekrar kopyalamanızı, rsync'i veya istediğinizi kopyalamanızı sağlar. Bu sözdizimi sezgisel olarak açıktır, sizi takip eden Sys Admins tarafından daha kolay desteklenecek ve kediden yararsız kullanılmayacaktır .

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

Gönderen scp adam sayfası : -3İki uzak konak arasında kopyalama yerel ana bilgisayar üzerinden aktarılır. Bu seçenek olmadan veriler doğrudan iki uzak ana bilgisayar arasında kopyalanır. Bu seçeneğin ilerleme ölçeri devre dışı bıraktığını unutmayın.

Aşağıdaki örnekte

  • İş istasyonunuz MacBook-Pro olarak adlandırılmıştır.
  • Dev Jump Box adı devjumpserver
  • Dev Application Server, devapplicationserver olarak adlandırıldı
    • .Local adlı LAN DNS bölgesinde
  • KG Jump Box, qajumpserver olarak adlandırılır
  • KG Uygulama Sunucusu, qaapplicationserver olarak adlandırılır
    • .Local adlı LAN DNZ bölgesinde
  • 670GB / etc / hosts dosyasının test kopyasını yapacağız ;-)
  • SSH ortak anahtar kimlik doğrulaması yapılandırılmış olarak varsayılmıştır.



İşte, iş yerinizden uygulama sunucularına uygun atlama (diğer adıyla bastion sunucusu) aracılığıyla doğrudan erişimi ayarlayan bir ~ / .ssh / config dosyası.

MacBook-Pro: ~ barrychapman $ cat ~ / .ssh / config
Ana bilgisayar *
  ServerAliveInterval 60
Ev sahibi uygulamaları
  Ana BilgisayarAdı devapplicationserver.local
  ProxyCommand ssh -i ~ / .ssh / id_rsa barrychapman@devjumpserver.example.com -W% ​​sa:% p
  Kullanıcı barrychapman
Ana bilgisayar qaapplicationserver
  Ana BilgisayarAdı qaapplicationserver.local
  ProxyCommand ssh -i ~ / .ssh / id_rsa barrychapman@qajumpserver.example.com -W% ​​sa:% p
  Kullanıcı barrychapman

MacBook-Pro: ~ barrychapman $



Hedef sunucuda dosya olup olmadığını sınama, orada olmayacak.

MacBook-Pro: ~ barrychapman $ ssh qaapplicationserver ls / tmp / hosts
ls: / tmp / hosts dosyasına erişemiyor: Böyle bir dosya veya dizin yok
Sinyal 1 ile öldürüldü.
MacBook-Pro: ~ barrychapman $



Şimdi iş uygulamanız üzerinden Dev Application sunucusundan QA Application'a bir dosya kopyalayalım.

MacBook-Pro: ~ barrychapman $ scp -3 geliştirme sunucusu: / etc / hosts qaapplicationserver: / tmp /
Sinyal 1 ile öldürüldü.
Sinyal 1 ile öldürüldü.
MacBook-Pro: ~ barrychapman $



Şimdi QA Uygulama Sunucusunda kopyalanan dosyanın varlığını kontrol edelim. Bu sefer orada olacak.

MacBook-Pro: ~ barrychapman $ ssh qaapplicationserver ls / tmp / hosts
/ Tmp / ana
Sinyal 1 ile öldürüldü.
MacBook-Pro: ~ barrychapman $ 

Not

ProxyCommand bağlantısını kapatırken, "Sinyal 1 tarafından öldürüldü" uyarı mesajını görürsünüz. Bu SSH, ProxyCommand bağlantısını yıkıyor ve endişelenecek bir şey değil. LogLevel QuietBastion host config stanza'nıza ekleyerek bundan kurtulabilirsiniz .


Şerefe, bu bizim sorunumuzu çözdü. Mutlu Noeller!
Barry Chapman

Ne demek "bastion host config stanza" ?? @BraveNewCurrency?
Andrew Wolfe

Her bir "Host" satırını ve altındaki konfigürasyonları (şiirdeki gibi) bir stanza olarak görüyorum. Bastion "Host" satırınızın altına "LogLevel Quiet" eklerseniz, sadece bu host için geçerli olacaktır.
BraveNewCurrency

8

BORULARI!

İnternet bir dizi tüpse , Unix bir dizi borudur - şuna benzer:

cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "

çalışmalı.

Daha fazla ana bilgisayardan geçmeniz gerekiyorsa, daha fazla boru ekleyin (ve daha fazla iç içe \tırnak -karaklı tırnak katmanı ). (Bununla birlikte, eğer boru hattı / kaçış o kadar karmaşık olursa, kaç kez kaçmak zorunda kaldığınızı belirlemek için parmaklarınızda bir diyagram çizmeniz veya parmaklarınıza başvurmanız gerekir, muhtemelen yenilgiyi kabul etmenin ve uygun bir VPN kurmanın zamanı gelmiştir. !)


1
As Alex_www onun yorumunda işaret Eğer yoksa ihtiyaç şey için ara dosyası yapabilirsiniz Ayrıca sadece boru çıkış tarcivarını. (Ayrıca size değil ihtiyaçcat - boru hattının orta evrelerinde sshStdin yemek ve bunu yaymam mutluluk duyar. catSadece beni iyi hissettirir ve benzeri kullanım isteyebilirsiniz diğer yararlı komutlar için bir yer tutucudur tee.)
voretaq7

Ben OP'ın sorun hiçbir makine olduğunu düşünüyorum hem veri var ve bağlantıları yapmak, ne de her şey ve herkes (bütün borular için konektör olarak hareket etmek) görebilirsiniz herhangi bir makine var.
MadHatter

1
@MadHatter Bu durumda iki cevabımızın bir kombinasyonu işe yarayacaktır (dev sunucusuna bağlanın, bir bağlantı noktasını atlama sunucusunun SSH bağlantı noktasına iletin, ardından SSH boru hattını bu bağlantı noktası üzerinden çalıştırın). Bu elbette çözümü giderek insanların iğrenç hale getireceği noktaya kadar ofisinizin dışına protesto yapmaya başlayacak noktaya kadar iğrenç hale VPN! NOW!getiriyor ...
voretaq7

Neden evet. Evet, ederler. İnşallah!
MadHatter

Bunu yapmak, ara sunucunun (bu durumda user@host1) cat ginormous-filebir noktada herhangi bir noktada depoda tam dolu olacağı anlamına mı gelir? Yoksa veriler doğrudan doğrudan user@host2mı gönderildi ? Yoksa bir şekilde akıyor mu? Bununla ne kadar taralakalı? Sanırım sorduğum sondan ikinci soruyla alakalı. Bu soruların hiçbiri retorik değildir ...
hello_there_andy

1

Doğru anlarsam, iki uygulama sunucusunu (app-qa ve app-dev) koruyan iki atlama sunucunuz (jump-qa ve jump-dev) vardır; atlama sunucuları birbirlerine ssh; ilgili atlama sunucusu dışında hiçbir kutu ilgili uygulama sunucusuna ssh olamaz. Uygulama sunucuları hiç kimseye ssh olabilir. Bir dosya app-dev'den app-qa'ya aktarılacaktır. Her iki atlama sunucusunda da verilerin geçici bir kopyası için yer yoktur.

Bunu ssh tüneli ile çözebilirsiniz. Bir uzak uygulama sunucusuna, atlama sunucusundaki kullanılmayan bir bağlantı noktasına geri bağlanan bir uzak tünel taşıyan bir bağlantı kurduk. Bir atlama sunucusundan diğer atlama sunucusuna ikinci bir bağlantı kurduk, uzaktan yönlendirilen bağlantı noktasının sarkan ucunu tünelden bir diğerine alıp diğer uygulama sunucusunun ssh bağlantı noktasına gönderen bir tünel taşıyoruz.

Tünelleri kurun (bu commmand'ların her birinin ayrı bir pencerede çalıştırılması gerekir jump-qa):

jump-qa% ssh app-qa -R 2345:localhost:2346
jump-qa% ssh jump-dev -L 2346:app-dev:22

Artık app-qa'da app-dev'in telnet localhost 2345ssh banner'ını yapabilir ve alabilirsiniz. Daha sonra veri dosyasını kopyalayabilirsiniz:

app-qa% scp -P 2345 localhost:/path/on/app-dev/data.dat data.dat

Biri KG uygulama sunucusunun önünde ve diğeri DEV uygulama sunucusunun önünde olmak üzere iki atlama kutusu vardır. Atlama kutuları birbirleriyle iletişim kurabilir
Barry Chapman

İstemcide ara kopya için yer var mı?
MadHatter

Hayır, yeterli alan yok
Barry Chapman

müşteri dediğinde, hangi sunucudan bahsediyorsun?
Barry Chapman

Yanlış anlamıştım. Şu anki kavrayışım müşteri olmadığı; iki atlama sunucusu ve iki uygulama sunucusu vardır.
MadHatter
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.