Ssh config dosyasını id_rsa ile tünel üzerinden ayarlama


17

İkinci bir makine ile bağlantı açmak, başka bir makineden geçmek ve üçüncü makineye bağlanmak için bir id_rsa (bana bir şifre ister) kullanarak geçerli bir yapılandırma kurmak için mücadele ediyorum.

Bu soruyu başka bir forumda sordum, ancak çok yararlı olarak değerlendirilebilecek bir cevap almadım.

Daha iyi tanımlanmış olan sorun aşağıdaki gibidir:

Local machine: user1@localhost
Intermediary machine: user1@inter
Remote target: user2@final

Tüm bağlantıyı sözde tty kullanarak yapabilirim:

ssh -t inter ssh user2@final

(Bu bana makine "inter" var id_rsa dosyası için parola soracaktır)

Ancak, işleri hızlandırmak için, .ssh / config dosyamı ayarlamak istiyorum, böylece makineyi kullanarak "final" e bağlanabiliyorum:

ssh final

Şimdiye kadar sahip olduğum - çalışmıyor - .ssh / config dosyamda:

Host inter
    User user1
    HostName inter.com
    IdentityFile ~/.ssh/id_rsa

Host final
    User user2
    HostName final.com
    IdentityFile ~/.ssh/id_rsa_2
    ProxyCommand ssh inter nc %h %p

İd_rsa dosyası orta makineye bağlanmak için kullanılır (bu bana parola yazmamı gerektirir) ve id_rsa_2 dosyası makineye "final" (bu bir parola ister) bağlamak için kullanılır.

Bazı LocalForwardve / veya RemoteForwardalanları karıştırmayı ve id_rsa dosyalarını hem birinci hem de ikinci makinelere koyarak denedim , ancak hiçbir yapılandırma ile başarılı olamadım.

Not: yardım almak için çalıştığım konu:

http://www.linuxquestions.org/questions/linux-general-1/proxycommand-on-ssh-config-file-4175433750/

Yanıtlar:


21

YÖNTEM 1 (iç kısımda ssh-key kullanın)

Kimlik doğrulama akışını korumak istiyorsanız

local -- authenticate --> inter -- authenticate (ask password) --> final

Bu .ssh / config proxyhost ile yapılamaz.

İhtiyacınız olan şey bash kabuk takma adıdır (umarım bash kullanıyorsunuzdur).

Alanına ~/.bashrc, aşağıdaki satırı ekleyin

alias ssh-final='ssh -t inter ssh user2@final.com'

Komut istemine aşağıdaki komutu yazmanız yeterlidir

ssh-final

finalbölümünde ~/.ssh/configkullanılmaz.

Bağlantı Ayrıntıları (1)

ssh -t inter ssh user2@final.com aşağıdaki gibi görülebilir

local# ssh inter
inter# ssh user2@final.com

localsadece "konuşmaktır" inter. localVe arasında doğrudan veya dolaylı ssh bağlantısı yoktur final. localsadece çıktısını gösteriyor ssh user2@final.com.

YÖNTEM 2 (yerelde ssh anahtarı kullanın)

Aynı ssh-key ile kimlik doğrulama

Host inter
    User user1
    HostName inter.example.com

Host final
    User user2
    Hostname <final.com / final IP Address>
    Port 22
    ForwardAgent yes
    ProxyCommand ssh inter nc %h %p

Yerel ~/.ssh/id_ras.pub olarak şuraya kopyala:

/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`

Bağlantı Ayrıntıları (2)

ssh tünelleme

Ayrıntılarına geçmeden önce ProxyCommandaşağıdaki örneğe bakalım

Adım 1, terminal penceresinde 1

local# ssh inter -L 2000:final.com:22

Adım 2, terminal penceresinde 2

local# ssh localhost -p 2000

Terminal 1'de, yerel bağlantı noktası 2000 ile final.com bağlantı noktası 22 arasında bir tünel kurulur. Yerel bağlantı noktası 2000'e gönderilen her şey final.com bağlantı noktası 22'ye iletilir veya bunun tersi de geçerlidir.

Terminal 2'de, ssh yerel port 2000'e bağlanır, ancak aslında sshd olan final.com port 22 ile iletişim kurar.

Tünel oluşturmada, 2. Adımdaki yerel ssh istemcisi doğrudan final.com sshd'ye bağlanır.

Yerel bağlantı noktası 2000 "çıktı", "ham" ssh daemon trafiğidir.

Bu tünelin yaygın kullanımı dahili web sunucusuna veya e-posta sunucusuna erişmektir. Web sunucusu için örnek

local# ssh inter -L 2000:final.com:80

Tarayıcıda aşağıdaki URL'yi kullanın

http://localhost:2000

Tünelin iki uç noktası yerel bağlantı noktası 2000 ve final.com bağlantı noktası 80'dir.

Trafik, "OLDUĞU GİBİ" tünel bitiş noktasına girip çıkıyor. Buna "ham" trafik diyelim.

ProxyCommand

Host final
    User user2
    Hostname <final.com / final IP Address>
    Port 22
    ForwardAgent yes
    ProxyCommand ssh inter nc %h %p

ProxyCommandBir adım daha ileri götürün. Yerel bağlantı noktası oluşturma adımını atlar ve bu bağlantı noktasına bağlanır.

Bir ssh istemcisi arkada verilen komutu yürütür ProxyCommandve bu komutun çıktısını "ham" trafik olarak görür. Yerel bitiş noktasını tutuyor ve onunla bir ssh bağlantısı başlatıyor.

Neden biri diğeri çalışmıyor?

Aşağıdaki komut

ssh inter nc final.com 22

temel olarak (1) bağlanma anlamına gelir inter, sonra (2) interçalıştır komutuna gelir nc final.com 22.

nc - arbitrary TCP and UDP connections and listens

Böylece nc final.com 22final.com port 22'ye bağlanacak, gelen trafiği stdout'a yazdıracak ve tüm stdin'leri diğer tarafa gönderecektir. Nc stdin / out ve final.com port 22 arasında bir "tünel" dir.

Yana ncstdout tüm "ham" trafik olarak geri ssh müşteriye geçer ssh oturum içinde koştu olduğunu. Ve ssh istemcisi trafiği nc stdin'e aktarabilir, bu da final.com bağlantı noktası 22'de son bulur.

Yukarıdaki "tünel" aracılığıyla, yerel ssh istemcisi final.comdoğrudan bir ssh oturumu başlatacaktır .

Aşağıdaki komut

ssh -t inter ssh user2@final.com

ile değil çalışır ProxyCommandbundan bir ssh daemondan "ham" trafik olmadığı için. Bir ssh istemcisinin stdout'udur . Müşteri, müşteriyle konuşmak iş demek değildir.

Farklı ssh tuşuyla kimlik doğrulama (OP orijinal yapılandırma)

Host inter
    User user1
    HostName inter.com
    IdentityFile ~/.ssh/id_rsa

Host final
    User user2
    HostName final.com
    IdentityFile ~/.ssh/id_rsa_2
    ProxyCommand ssh inter nc %h %p

Yerel ~/.ssh/id_ras.pub olarak şuraya kopyala:

/home/user1/.ssh/authorized_keys in `inter`

Yerel ~/.ssh/id_ras_2.pub olarak şuraya kopyala:

/home/user2/.ssh/authorized_keys in `final`

Yukarıdakilerin her ikisi de aşağıdaki kullanımı sağlayacaktır

local# ssh final

Ek Kontrol

Ayrıntılı kullanın

local# ssh -v final

Bu, ssh sorununun tanımlanmasına yardımcı olacaktır.

Nc'yi kontrol et

ProxcyCommandçalıştırdığı ncile inter. ncGerçekten kullanılabilir olup olmadığını kontrol edin inter.

local# ssh inter
inter# nc final.com 22

Rsa tuşunun doğru ayarlandığını kontrol edin

Farklı anahtarlar kullanılacaksa interve finalyerel makinede aşağıdaki dosyalar bulunmalıdır

local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub

interŞimdiden ssh yapabildiğiniz için tuş kurulumunu açın final. Yerel makinenizden

local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys

id_rsa_2.pubOrada içerik görmelisin .


Üzgünüm, bunu belirtmeliydim; Aslında kullanarak bağlantı kurabiliyorum ssh -t, ama yapmak istediğim tam olarak ssh -tyalnızca yapılandırmayı kullanarak kullanmam gereken davranışı simüle etmektir .ssh/config.
Rubens

Yapılandırma dosyası, yayınladığınız dosya bile çalışmalıdır. checkingAdımdan geçmeyi deneyin . Eksik / yanlış bir şey olmalı.
John Siu

1
İle ssh -t, SSH için finalbaşlatılır interolarak "neredeyse" aynı olan, local# ssh interdaha sonra inter# ssh final. Kimlik doğrulama arasındadır interve final. Proxy / nc ile ssh'den finale, yerel makinenizden, bir tünel üzerinden, ile başlatılır final. Kimlik doğrulama arasındadır localve final.
John Siu

@ Yorumunuzu temel alır, bence interkimlik doğrulaması için hala ssh-key kullandığınızı yanlış anlıyorsunuz final. ~ / .Ssh / id_rsa_2 id_rsa_2içine kopyalamayı deneyin local(yerel id_rsa'yı YAZMAYIN) ve sorununuz belki gitti.
John Siu

2
Ssh2'nin ncyerleşik olduğunu unutmayın . Bunun yerine, ProxyCommand ssh gateway nc %h %pyazmak istiyorsunuz ProxyCommand ssh inter -W %h:%p.
user123444555621

2

Listelenen herhangi bir aslında hata görmedim veya ssh -v ifadeleri nerede asılı olduğunu görmenize yardımcı olur.

Hey adam neredeyse doğru --- en iyi ve en güvenli yolu yerel makinede her iki anahtarı olması. Daha sonra anahtarları ara adımlarda bırakmak yerine bağlanmak için ssh-agent iletmeyi kullanırsınız. Ayrıca, anahtar parolanızı her oturum açma için yalnızca bir kez yazmanız gerekir.

Ubuntu (yerel makinenizde) gibi modern / kullanıcı dostu bir işletim sisteminiz varsa, bu herhangi bir * masaj * olmadan sorunsuz çalışmalıdır. Kimlik dosyasını bilerek bıraktım, buna ihtiyacınız olmayacak.

Yapılandırma dosyanız şu şekilde görünecektir:

Host inter
    User user1
    ForwardAgent yes
    HostName inter.com

Host final
    ForwardAgent yes
    User user2
    HostName final.com
    ProxyCommand ssh inter nc %h %p

Başlamazsa, ssh-agent'ın çalıştığından emin olmak için şu adımları uygulayın:

'ssh-add -l' (lower case L) will list your private keys if any are loaded, or will be blank, or will say can’t connect to ssh-agent, if so, start ssh-agent.
'eval `ssh-agent`' (those are backticks) starts ssh agent
'ssh-add' will add your key… you can add a path argument if you have a key in a non-default area. At this point you will enter your passphrase.

Bunun nasıl çalıştığını açıklayan güzel bir rehber var.

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.