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
final
bölümünde ~/.ssh/config
kullanı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
local
sadece "konuşmaktır" inter
. local
Ve arasında doğrudan veya dolaylı ssh bağlantısı yoktur final
. local
sadece çı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 ProxyCommand
aş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
ProxyCommand
Bir 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 ProxyCommand
ve 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 22
final.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 nc
stdout 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.com
doğrudan bir ssh oturumu başlatacaktır .
Aşağıdaki komut
ssh -t inter ssh user2@final.com
ile değil çalışır ProxyCommand
bundan 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ığı nc
ile inter
. nc
Gerç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 inter
ve final
yerel 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.pub
Orada içerik görmelisin .
ssh -t
, ama yapmak istediğim tam olarakssh -t
yalnızca yapılandırmayı kullanarak kullanmam gereken davranışı simüle etmektir.ssh/config
.