Bir dosyayı sadece SSH olan başka bir ana bilgisayara nasıl indirebilirim?


30

Dosyaları ofis bilgisayarımdan dizüstü bilgisayarıma indirmek istiyorum.

Ofis makinemi SSH ile organizasyon sunucusuna, ardından SSH'yi sunucudan ofis makineme bağlayabilirim.

Kuruluş sunucusunun kabul ettiği tek komut ssh, ssh1 ve ssh2'dir.

Bir dosyayı ofisimden (uzak) makinemden sunucu üzerinden dizüstü bilgisayarıma (yerel) makineme nasıl indirebilirim?


2
Ters SSH tünelleri kullan? Cevabımı burada görün ve gerektiği gibi uyarlayın: superuser.com/questions/1186905/…
Darren

1
çoklu atlama SSH?
mckenzm

Yanıtlar:


37

Önceki cevaplar, ProxyJump direktifinin (OpenSSH 7.3'de eklenmiştir) bir ara sunucu üzerinden (genellikle ana bilgisayar ana bilgisayarı olarak adlandırılır) bağlanmak için nasıl kullanılacağından bahseder, ancak sadece komut satırı argümanı olarak bahseder.

Gelecekte bağlanamayacağınız bir makine değilse, en iyi şey, onu yapılandırmanızdır ~/.ssh/config.

Gibi bir dosya koyardım:

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

ProxyJump'ı desteklemeyen daha eski bir OpenSSH sürümü kullanıyorsanız, onu eşdeğeri ile değiştirirsiniz:

ProxyCommand ssh -W %h:%p bastion-machine

ve eğer yerel ssh versiyonunuz desteklemeyen gerçekten eski bir versiyonuysa -W:

ssh bastion-machine nc %h %p

bu sonuncusu da temel makinenin nckurulu olmasını gerektirse de .

Ssh'nin güzelliği, dosyadaki her bir hedefi yapılandırabilmeniz ve çok iyi istifleyebilmeleri. Böylece office-machinetüm araçlar üzerinde (ssh, scp, sftp ...) direkt olarak bağlandıkları gibi hostname olarak çalışacaksınız ve ssh_config'e bağlı olarak nasıl bağlanacaklarını bulabileceksiniz. Ayrıca, Host *.internal.company.localtüm ana bilgisayarların bu şekilde bitmesini sağlamak için belirli bir tabanda geçmesi gibi joker karakterlere sahip olabilirsiniz ve bu, hepsi için geçerli olacaktır. Doğru şekilde yapılandırıldıktan sonra, bir atlama bağlantısı veya yirmi arasındaki tek fark, daha yavaş bağlantı süreleri olacaktır.


36

Eğer yeni bir OpenSSH (8.0) kullanıyorsanız, -J(atlama) anahtarını kullanabilirsiniz :

scp -J user@intermediate user@target:/path

Daha eski sürümlerde (ancak en az 7.3), ProxyJumpyönergeleri ya komut satırında kullanabilirsiniz:

scp -o ProxyJump=user@intermediate user@target:/path

veya ssh_config@ Ángel tarafından verilen cevapta gösterildiği gibi dosyada.


ProxyCommandOpenSSH'nin daha eski sürümlerinde bile kullanabileceğiniz başka seçenekler veya port yönlendirme var. Bunlar, OpenSSH multihop girişini destekliyor mu?


2
@yochaymaganssh -J userA@orgserv userB@officecomp cat remote/path > local/path
mosvy

4
Scp için 7.10
Ángel

4
scpDesteklemese bile -J, ProxyJumpseçeneği destekleyecek kadar yeni olabilir ; açıkça bu seçeneği kullanan diğer cevaplardan birini deneyin.
Gordon Davisson

2
Bu kabul edilen cevap olmalı. İşi yapmak için basit bir komut satırı seçeneği yeterli olduğunda, belirli ana bilgisayarlar için sshsizi değiştirmenizi öneren soruların cevaplarını küçümsüyorum config.
clemisch

2
"Despise" aşırı bir tepki gibi görünüyor. Elbette, komut satırında hızlı bir değişiklik yapmanın, ilk önce yapılandırma dosyasını değiştirmek zorunda kalmanın daha kolay olduğu durumlar vardır. Ancak, aynı ana bilgisayara birden çok kez bağlanmayı planlıyorsanız, her zaman bağlanmam gerektiğinde yapılandırma dosyamı kesinlikle güncellemeyi tercih -J user@intermediateederim.
chepner

10

Bazen sadece boru hattını kullanabiliriz. O zaman bugün.

ssh -A user@host1 ssh user@host2 cat filename > filename

Siz de yükleyebilirsiniz

ssh -A user@host1 ssh user@host2 cat \\\> filename < filename

Evet, proxy vb. İçeren başka çözümler de var ama bunun nasıl yapılacağını bilmek yararlı.


Faydalı kullanımı cat!
Piskvor

Bunun, ssh aracınıza ve anahtarlarınıza ara ana bilgisayar erişiminden yeterince ayrıcalıklı bir kullanıcıya sahip olduğunu unutmayın. Ana bilgisayarınız ile ana bilgisayar2 arasında akan veriler de ana bilgisayar1'de şifrelenmemiş olarak kalacaktır. Proxy kullanan ve üstünden atlayan yöntemler, bu sorunların her ikisinden de kaçınır.
james

@james: habersiz değilim. Bunun gibi Bastion ana bilgisayarları genellikle çok güvenilirdir.
Joshua,

7

ProxyJumpYapılandırmayı kullanın :

ProxyJump
[user @] host [: port] veya ssh URI olarak bir veya daha fazla atlama proxy'si belirtir. Birden çok proxy virgül karakterleriyle ayrılabilir ve sırayla ziyaret edilir. Bu seçeneğin ayarlanması, önce belirtilen ProxyJump ana bilgisayarına bir ssh (1) bağlantısı kurarak ve ardından oradan nihai hedefe bir TCP iletme kurarak ssh (1) 'nin hedef ana bilgisayara bağlanmasına neden olacaktır.

scp -o ProxyJump=user@intermediate user@target:/path

2

ZMODEM adında eski bir protokol var : bugünlerde çok az sayıda program bunu destekliyor, ancak işe yaradığında oldukça uygun olabilir.

Öncelikle dizüstü bilgisayarınızın terminal programının ZMODEM'i destekleyip desteklemediğini kontrol edin. (Örneğin, iTerm2'yi (Mac'te) ZMODEM'i destekleyecek şekilde yapılandırabilirsiniz. Burada örnek bir komut dosyası kullanılabilir .)

Ofis makinenizde çalıştırın: sudo apt install lrzsz

Şimdi tek yapmanız gereken ofis makinenize gitmek ve koşmak sz (filename). Dosya terminaliniz üzerinden indirilecektir.


1

Ssh altında kullanıcı yapılandırması: ~/.ssh/config

Host *
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking=no
    ServerAliveInterval 300
    ServerAliveCountMax 2
    ForwardAgent yes


Host jump server
    HostName server.company.org
    User root

Host jump1 server1
    HostName server1.dmz.company.org
    User root
    ProxyJump jump

Host jump2 server2
    HostName server.dmz2.company.org
    User root
    ProxyJump jump1

Host *.intranet.company.org
    User user
    ProxyJump jump2

Şimdi intranet sunucusundan doğrudan 3 atlama sunucusundan kopyalayabilirsiniz .

scp user@server.intranet.company:/home/user/ ./*

Bunu, artık scp ile atlama sunucuları belirtmeye gerek olmadığından tercih ediyorum.


0

SCP -3 ile:

scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt

2
Bu -3seçenek "İki uzak ana bilgisayar arasındaki kopyalar yerel ana bilgisayardan aktarılıyor" olarak tanımlanmıştır. bu sorunun yerel sunucunun "remote2" ye erişemediğini öngördüğünü düşünüyorum.
Jeff Schaller

2
@JeffSchaller: Eğer ortada makineye bağlanmak, daha sonra kullanmak -3. Ancak bu, orta makineden birinciye bağlanabileceğinizi varsayar.
Joe,

Bu aşkın avantajını görmüyorum -J/ ' JumpHost. Tam aksine, @Joe'nun bahsettiği sınırlamaya sahip.
Martin Prikryl
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.