Bir ara sunucu üzerinden bir dosyayı nasıl SCP yapabilirim?


14

WinXP'de (bash shell ile) Ccygwin kullanıyorum. Yerel bilgisayarımdan uzaktaki bir makineye bir dosya SCP yapmak istiyorum - host2. Ancak, yalnızca bir ara makineye SSH yapabilirim - host1 ve sonra oradan SSH'den host2'ye. (Not, host2'ye localhost'tan erişemiyorum).

Tünel açmanın benim cevabım olduğunu sanıyordum, fakat bir tünel kurmaya çalıştığımda

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Ancak bu komutu yazıp enter tuşuna bastıktan sonra, sistem kilitleniyor. Bir tünel kurmanın ve ardından SCP'yi yapmanın doğru yolu nedir?

Teşekkürler, -


2
Superuser.com/questions/174160/… ' nin kopyası - bir özet için aşağıdaki cevabımı inceleyin.
jmetz

Kullanıcı itibaren Meir D : Ayrıca bakınız serverfault.com/questions/337274/...
fixer1234

Yanıtlar:


15

Bu zaten burada en iyi cevaplandı .

Özetlemek için: içine şunu yazın ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

ve sonra basitçe scpproxy.machine ile proxy yapmak istediğiniz herhangi bir zamanda target.machine!

Aynı zamanda çalışır ssh, bu yüzden size hedef makineye geçerken zaman kazandırır.

Kredi, 2011 yılında bunu cevaplayan kullanıcı24925’e gitmelidir.


12

Bir SSH tüneli kurmak için aşağıdaki formatı kullanın:

ssh -L 9999:host2:22 user@host1

Bu komut, bağlantı noktası 22'ye komutu veren bilgisayardaki host1as userve 9999 numaralı bağlantı noktalarına bağlanır host2. -Nisteğe bağlıdır veya gerekirse oturumu canlı tutmak için topveya gibi bir şey kullanabilirsiniz watch.

Ardından, scplocalhost'ta host2'ye: 9999.


1
Bu komutu çalıştırdığımda, host1'e giriş yapmış olmam gerekecek mi? Ayrıca, bu komutu çalıştırdıktan sonra, başka bir bash kabuğu açtım ve "scp hello.txt localhost: 9999" yazdım, ancak "ssh: localhost port 22: connect reddedildi" sunucusuna bağlandım. Neyi yanlış yapıyorum burada?
Dave

3
Bu komutu çalıştırdığınızda host1'e bağlanacaksınız, evet. Sizin scpkomut sözdizimi olsa yanlıştır. Bunu , giriş yapmak istediğiniz kullanıcının scp -P 9999 hello.txt user@localhost:/path/to/destination/filenerede userolduğu deneyin host2.
Yağmur

1
@Rain, bu örneği ana cevaba
yazabilirsiniz

4

OpenSSH 7.3'ten bu yana , bastion / jump ana bilgisayarını belirtmek için -Jya da kullanabilirsiniz -o ProxyJump. Bu nedenle, için SSH node2aracılığıyla node1:

ssh -J you@node1 you@node2

SCP'nin -Jargümanı yok, ama izin veriyor -o, bu yüzden işe yarıyor:

scp -o ProxyJump=you@node1 file.txt you@node2:~

3

İlk önce dosyayı host1'e kopyalayabilirsiniz:

scp file dalvarado@host1:.

Sonra bunu host2'ye almak için yapın:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

-tSeçeneği sshdaha kolay hale getirebilir bir sözde terminali ayırmaya güçleri scpanabilgisayar1 bir parola / şifre isteyecek şekilde. Her yerde çalışan ve yapılandırılan ssh-ajanınız varsa, bir parola / şifre girmeniz istenmemelidir.

Bu alternatifi öneriyorum, çünkü eğer bir tünel kullanıyorsanız, yine de iki komuta ihtiyacınız olacak: biri tüneli kurmak ve diğeri dosyayı kopyalamak için. Bu daha basit görünüyor.


Harika bir çözüm !!!
Riccardo,
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.