Yanıtlar:
Bunun geç bir cevap olduğunu biliyorum ama bunu yapmanın güzel bir yolunu buldum. Temelde Holger Just'un cevabı, ancak kaydedilmiş bir config dosyasında:
Bu ~/.ssh/config
dosyayı local.machine dosyasına eklemeniz gerekir , (eğer mevcut değilse dosyayı oluşturabilirsiniz)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null
Dosyayı kaydettikten sonra, sadece
ssh target.machine
bağlanmak istediğiniz zaman. Scp ayrıca ssh config dosyasına saygı duyduğundan da çalışacaktır. Öyleyse Nautilus, eğer GNOME kullanıyorsanız ve bir GUI kullanmak istiyorsanız.
Host proxy.machine
aynı ~/.ssh/config
dosyadaki satırları da göstermiş olsaydınız yardımcı olurdu , 2) Bu komutların iç içe geçip yerleştirilemeyeceğinden bahsedin (yani, istemci, bağlanan proxy ana bilgisayara 2 bağlanan proxy ana bilgisayara 1 bağlanır. ..target) ve 3) ne nc %h %p
anlama geliyor
Bunu tek bir komutla yapabilirsiniz, ancak proxy makinesinde netcat (nc) kurulu olmalıdır:
ssh -o "ProxyCommand ssh poxyuser@proxy.machine nc -w 1 %h 22" targetuser@target.machine
[EDIT: makinelerin sırasını karıştırdı ...]
Şimdi * bunu hiçbir yere gerek olmadan tek gömlek olarak yapabilirsiniznc
:
scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .
açıklama
pcreds
ve tcreds
gerekirse (proxy ve hedef kimlik bilgilerini temsil username
, username:password
vb.)
Bu, dahili bir ağ hattı benzeri yetenek sayesinde, nc
ara konak için gerekliliği ortadan kaldırarak mümkündür . Kullanarak ssh -W host:port
belirtilen ana bilgisayara ve bağlantı noktasına bir tünel kurar ve onu stdin / stdout'a bağlar ve ardından scp
tünelin üzerinden geçer.
İçinde %h
ve %p
içinde ProxyCommand
belirttiğiniz hedef ana bilgisayar ve bağlantı noktası ile değiştirilir.
Daha fazla kolaylık için proxy'yi ssh yapılandırmanızda yapılandırabilirsiniz:
Host target.machine
ProxyCommand ssh pcreds@proxy.machine -W %h:%p
ve ondan sonra sadece yapmak
scp tcreds@target.machine:file .
* OpenSSH 5.4'ten beri - Mart 2010'da yayınlandı
-p <portnum>
önce eklemeniz gerektiğini düşünüyorum-W
Bir astar mı? Başımın üstünden değil. Önce bir proxy oluşturmanız gerekir ve bunu scp ile kendi başınıza yapamazsınız.
Manuel olarak yaparken, tünelim için bir ekran oturumu açıyorum:
screen -S tunnel
Ekran, tünelin arka plan kabuğunda ilerlemesini sağlamak için kullanılır. Tüneli arka planda açık tutmak için istediğiniz tekniği kullanın (@ weeheavy'in cevabı muhtemelen en basitidir). Ekran oturumuna girdiğimde tünelime böyle başlıyorum.
ssh -L 2222:target.machine:22 [user@]proxy.machine
Bunu kırmak için, temel olarak "Yerel makinemde, 2222 numaralı bağlantı noktasını ve localhost'a çarpan herhangi bir bağlantıyı açın: 2222, proxy.machine'den target.machine: 22'ye proxy'liyor.
Ssh bağlantısı ve tünel kurulduktan sonra, "Ca d" ile ekran oturumundan ayrılın. Bu ekran oturumuna geri dönmek için,screen -raAd tunnel
Özgün kabuğunuza döndüğünüzde scp komutunuz şuna benzer:
scp -P 2222 localhost:your/file/on/target.machine local/path
Yerel ana liman 2222 portunun gerçekten sadece hedefe giden bir tünel olduğunu unutmayın.
Görünüşe göre scp "-o" seçeneğini destekledi, ssh gibi, ancak bir proxy kullanıcı adı / şifresini nasıl geçireceğimi bilmiyorum:
scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path
Eğer alırsanız nc: invalid option -- X
bakınız https://stackoverflow.com/a/23616021/32453
Peki ya:
scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" your.filename username@yourdestination.yourdomain.com:/whatever_location
Gibi bir şey deneyebilirsiniz:
ssh user@proxy.machine "ssh user@target.machine 'cat > file'" < file
Fakat eğer proxy.machine şifrenizi size sorması gerekiyorsa işe yaramaz (SSH’nin TTY’de olmadığı, dolayısıyla askpass başarısız olur).
Birden fazla dosyanız varsa, bu şekilde tar kullanabilirsiniz (denenmemiş, genellikle bu şekilde bir netcat kullanırım):
tar cf - file1 file2 folder1/ | ssh user@proxy.machine "ssh user@target.machine 'tar xvf -'"
Bir başka basit bir çözüm bir transfer source_file gelen source_host a destination_host üzeri proxy_host :
Üzerinde giriş yapın Proxy_Sunucusu :
ssh login@proxy_host
Proxy sunucusu itibaren aktarmak source_file gelen source_host için destination_host (eğer atlayarak, bir satır olarak bu yazabilirsiniz \
, ya da iki satır olarak, aşağıda gösterildiği gibi):
scp login@source_host:/path_to_source_file \
login@destination_host:/path_to_destination_directory
Bu, source_host'ta proxy_host'taki oturum açma işleminin bir rsa_key kullanmasını gerektirir.
Genel anahtarları kullanmanız gerekirse, bunun gibi bir şeye ihtiyacınız olacaktır.
Host target-machine
User target-user
HostName target.example.com
IdentityFile /path/to/file.pem
ProxyCommand ssh bastion -W %h:%p
Host bastion
User bastion-user
HostName bastion.example.com
IdentityFile /path/to/file.pem
Bu yazıyı takip ettim ve benim için işe yarayan bir cevap buldum. (Çünkü yukarıdaki cevaplar benim için işe yaramıyor).
scp
Bir ara ana bilgisayardan (aka atlama ana bilgisayarı) bir dosyaya nasıl erişilir
http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.html
Ve cevabım aşağıdaki gibidir:
scp -oProxyCommand="ssh -W %h:%p {username}@{proxy_IP}" \
{source_file} {remote_username}@{remote_IP}:{remote_file_path}
Örnek:
scp -oProxyCommand="ssh -W %h:%p ubuntu@10.60.10.145" \
archive.gz wise@35.xxx.xxx.xxx:/home/wise/archive.gz
Umarım bu cevap size yardımcı olabilir.