ssh multi-hop… komutu ssh config dosyasına uyarlama


10

Multi-hop ssh komutumu ssh .ssh / config dosyasına koymaya çalışıyorum.

Bu benim bağlantı grafiğim: dizüstü bilgisayar (buradayım) ------> userver -------> iş istasyonu

Ssh public rsa anahtarlarını 'userver' ve 'workstation'a koydum. Şu anda bu satırı yazarak bağlanabilirim:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Ancak, aynı etkiyi elde etmek için ~ / .ssh / config yapılandırma dosyasının yeteneklerini kullanabilmek ama aynı zamanda 'scp' ile hızlı kopyalama yapmama izin verecek tek bir komut kullanarak istiyorum. Tek sorun 'userver' "nc" komutu yok ve ben orada süper kullanıcı yok, sadece benim ev klasörü kontrol olmasıdır. Yine de bazı şeyler denedim:

Benim laptop (~ / .ssh / config) bu yapılandırma dosyası var:

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Ayrıca userver içindeki başka bir yapılandırma dosyası (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Bu yapılandırma dosyaları ile

ssh -A -t userver ssh -A workstation

ki bu bir gelişme ancak yeterli değil. Dizüstü bilgisayarlarımda başka bir ana bilgisayar eklemeyi denedim, şöyle:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Sonra, yaptığımda

ssh hop

i aşağıdaki çıktı hataları ile almak ve bağlanamıyor:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Herhangi bir fikir?

Yanıtlar:


6

İhtiyacınız olan komut ProxyCommand.

.Ssh / config dosyanıza şu satırları koymalısınız:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Şimdi pc iş istasyonuna şu şekilde bağlanabilirsiniz:

  ssh worksation

Bu net değilse veya daha fazla ayrıntı istiyorsanız, ssh multi-hoplama için bu mükemmel girişi okumanızı öneririz .

Düzenle:

her zaman bir takma ad tanımlayabilirsiniz: /home/your_name/.bashrc dosyanızda şu satırı ekleyin:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

( -XUzak sunucuda grafik uygulamaları çalıştırabilmeniz için seçeneği ekledim, bunları yerel olarak görün; bunu istemiyorsanız, bırakın -X).


Merhaba MariusMatutiae, çözümünüzü denedim ama orijinal yazıda dediğim gibi 'userver' düğümü netcat (nc) programından yoksun. Yani bu hatayı alıyorum: ssh iş istasyonu bash: nc: komut bulunamadı ssh_exchange_identification: Uzak ana bilgisayar tarafından bağlantı kapatıldı
labotsirc

Yükleyemiyor musun?
MariusMatutiae

Ne yazık ki hayır, 'userver' üzerinde süper kullanıcı yok, bu yüzden alternatif bir yöntem deniyordum. Bu "ssh -A -t userver ssh -A iş istasyonu" çalışırsa, alamadım, neden aynı ProxyCommand koymak koymak değil?
labotsirc

1
@labotsirc Cevabımı biraz değiştirdim. Umarım faydalı bulabilirsin. Alternatif olarak, Netcat'i kendi netcat kopyanızın tam yolunu ekleyerek Proxycommand .... satırına ekleyerek yerel olarak netcat kurmayı (yani, sadece sizin için!) Deneyebilirsiniz. Bunun izinler nedeniyle çalıştığından emin değilim, ancak deneyebilirsiniz.
MariusMatutiae

Netcat ikili dosyamı kopyaladı, hata verdiğinden -q0 seçeneğini kaldırdı ve şimdi çalışıyor! Teşekkürler
labotsirc

10

Aşağıdaki çözüm nc, diğer örnekte olduğu gibi netcat ( ) kullanmaktan çok daha iyi çalışmak için bulundu . Netcat ile bağlantım çok yavaştı ve bazı tuşlara basana kadar tekrar tekrar askıda kalacaktı. Ayrıca netcat'in kurulu olması gerekmez.

Aşağıdakileri kendinize ekleyin ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

O zaman şöyle ssh yapabilirsiniz:

ssh workstation

Ayrıca ProxyCommand, çalışmamanızın nedeninin işe yaramadığınızı unutmayın ProxyCommand. SSL bağlantısı kurabilecek ProxyCommandbir kanal oluşturmalıdır ssh. Başka bir deyişle, komutun stdin ve stdout bağlantı sshnoktalarına bağlanan bir işlemi başlatması gerekir sshd. Yapılandırmanızda, bir bağlantı noktasına değil, komut kabuğuna ProxyCommandbağlanan bir ssh bağlantısı yapıyorsunuz .sshsshd

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.