Dosyaları sunucudan iki adım ötede alın [kapalı]


14

Aşağıdaki durumumuz var:

  1. Benim makine
  2. Bir ağ geçidi makinesi
  3. Hedef makine

Hem # 2 hem de # 3'te kök hakkım yok. Ben de (# 200'den fazla MiB) makine # 2 gerçekten bilgi saklayamıyorum (çünkü ağın geri kalanına bir ağ geçidi olduğu söz, daha sonra değil). Makinede # 3, yerel olarak kopyalamak istediğim yaklaşık 3 GiB boyutunda bir klasör var. # 1'den # 3'e SSH yapamıyorum, ancak SSH'yi # 2'ye ve sonra # 3'e yapabilirim. Ayrıca # 2 ve # 3 arasında ortak bir özel anahtar çifti ayarlamak da mümkün değildir, ancak # 1 ve # 2 arasında kurulu bir anahtar çifti vardır.

Normalde bunu yapmak için SSH ve katran kombinasyonunu kullanıyorum:

ssh name@host "tar cf - folder" > folder.tar

Ama bu durumda bu bir çeşit yuvalama gerektiriyordu ve bunu yapamıyorum.

Peki, # 3'ten # 1'e veri almanın iyi bir yolu nedir?

Yanıtlar:


27

Makine2 üzerinden bir SSH tüneli oluşturabilir ve ardından başka bir oturumda tünele bağlanabilirsiniz.

Örneğin, makine1'de iki CLI oturumu açın. İlk oturumda aşağıdakileri çalıştırın:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

İkinci oturumda aşağıdakileri çalıştırın:

MACHINE1 $ ssh -p 2022 <user>@localhost

İlk komutta olan şey, yerel bir bağlantı noktasının (makine1'deki 2022) makine2'ye SSH bağlantınızı kullanarak makine3'teki bağlantı noktası 22'ye tünel olmasıdır.

İkinci komutla, yeni açılan yerel bağlantı noktasına (2022) bağlanıyorsunuz ve sanki doğrudan makineye3 bağlanıyorsunuz.

Şimdi tipik dosya aktarım sürecinizi kullanmak istiyorsanız aşağıdakileri yapabilirsiniz:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Alternatif olarak, rsync'i tanıyabilir ve bunun yerine böyle bir şey yapabilirsiniz:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

Son hedefi varsaymak bir tarball elde etmek değildir.


2
Kullanarak ProxyCommandve ssh -Wiki sshkomut tek bir komut satırında birleştirilebilir. OpenSSH istemcisinin çok yeni bir sürümüne sahipseniz, hepsini tek bir sshkomutla yapmanıza izin veren bir argüman vardır .
kasperd

+1 için rsync;)
NieDzejkob

Tar'ı kullanıyorum çünkü çok sayıda dosyayı aktarmak büyük bir dosyayı aktarmaktan daha uzun sürüyor. Rsync bunu çözüyor mu?
Cheiron

Uzaktan aktarım yaparken rsync, aktarılan verileri (alıcı uçta, diske yazmadan önce) denetler, bu nedenle bir dosyanın aktarılması daha fazla zaman alır. Ancak, bu iyi zaman geçirdi.
Gene

5

SSH'nin yeni sürümlerinin Ana oturum özelliğini de kullanabilirsiniz. Burada açıklanmıştır:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Muhtemelen tek ihtiyacınız olan .ssh / config dosyanızı düzenlemek / oluşturmaktır. Ana oturumları kontrol eden tanımlar ekleyin:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Sonra ilk atlama sunucusu tanımınızı aşağıdaki gibi belirleyebilirsiniz:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

İkinci atlama ilk atlama sunucunuzu proxy olarak kullanır:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

~ / .Ssh / cm_socket dizini oluşturmayı unutmayın ve yapılandırma izinleri 644 olmalıdır.

Ardından, doğrudan ikinci sunucunuza / sunucunuzdan SSH veya SCP yapabilmeniz gerekir. Bunun gibi zincirlenmiş daha fazla sunucu olabilir.


3
Bağlantınızı okuduktan ControlMastersonra, çoğaltmanın / vekil sunucuya ihtiyaç olduğunu düşünmüyorum . Bu
wikibook'ta

Evet katılıyorum. Birden çok yol var. Ancak Master oturumu en zarif olarak görüyorum. Sadece kişisel tercihler hakkında ;-)
Jaroslav Kucera 22:17

Birimiz ya da diğeri bir şeyi yanlış anlamıştık. Görebildiğim kadarıyla, "ana bağlantı" ağ kaynaklarının verimli kullanımı ile ilgilidir ve bu soru ile ilgisi yoktur. Bunu yapmanın farklı bir yolu değil, sadece eldeki görevle alakasız.
IMSoP
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.