Sth komutunu çalıştırarak uzaktaki bir sunucuya giriş yapmak istiyorum. ssh remoteServer gibi . Uzak sunucuya yalnızca bir giriş sunucusu (iki tane vardır) üzerinden erişilebilir.
Almak istediğim iki yol var (bir giriş sunucusunun kullanılamaması durumunda):
- A → B → D
- A → C → D
Bazı bilgiler:
- A : yerel bilgisayarım
- B : giriş sunucusu; sadece usernameB / şifre girişine izin verir (anahtar dosyası yok); Değişiklik yapamıyorum (anahtar dosyasını kaydet vb.)
- C : giriş sunucusu; anahtar dosya girişine izin verir; Bazı değişiklikler yapabilirim (yine de bir süper kullanıcı değil)
- D : hedef sunucu; sadece B veya C'den ulaşılabilir; anahtar dosya girişine izin verir
C ve D'ye giriş yapmak için kullanabileceğim bir parola korumalı özel anahtar dosyası kullanıyorum (A ve C'de aynı).
- ssh B_D : usernameB @ B'nin şifresini sorar ve sonra usernameD @ D için özel anahtar dosyasının şifresini sorar . Özel anahtarı B'ye kaydedemediğim için bir şekilde iletilmesi gerekiyor. Eğer ssh-agent ile yüklediyseniz şifreyi tekrar sormamalı.
- ssh C_D : Özel anahtarın şifresini bir kez sorar ve daha sonra usernameC @ C ve daha sonra usernameD @ D olarak oturum açmak için kullanın. Yine, anahtar önceden ssh-agent ile yüklenmişse, bir şifre sorulmamalıdır.
Kısmen yukarıdaki komutu elde etmek için aşağıdaki komutu kullanabiliyorum (ancak, anahtar ssh-agent ile yüklendiyse):
ssh -A -t usernameB@B ssh usernameD@D
ssh -A -t usernameC@C ssh usernameD@D
Anahtar dosyayı ilk yükleyen ama sadece bu oturum için yüklenen bir değişiklik olabilir mi? Oturumu kapattıysam, anahtar dosyası kaldırılmalıdır.
Yukarıdaki komutun iki sorunu vardır:
- Anahtarı önce ssh-agent ile manuel olarak yüklemek istemiyorum. Bu, yalnızca bir komut girme amacını ortadan kaldırır.
- Bunu veya eşdeğer bir komutu ssh config dosyasına yerleştirmek istiyorum. İstediklerimi elde etmenin farklı bir yolu varsa, bu da iyi olacaktır (B'deki herhangi bir şeyi değiştirmem ya da C'deki süper kullanıcı haklarına ihtiyacım olmadığı sürece).
Sth'yi başarabildim. ssh config dosyasını kullanarak benzer:
Host C
HostName addressOfC
User usernameC
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Host C_D
HostName addressD
User usernameD
IdentityFile ~/.ssh/id_rsa
Port 22
ProxyCommand ssh -A -W %h:%p C
Yine, iki problem:
- Önce anahtarı ssh-agent ile yüklemeliyim. Aksi takdirde şifre için iki kez ister.
- Bağlanması yıllar alır (24 saniye). Burada söylemeliyim ki, Windows'ta mobaXterm kullanıyorum, bunun 24 saniye boyunca sorumlu olması durumunda.
Bir son yakalama var: Ajanın yönlendirilmesi https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/ uyarınca güvenli görünmüyor . Dolayısıyla, aracı yönlendirmeyi engelleyen bir çözüm iyi olacaktır.
Düzenle:
@Jakuje'nin açıklamalarından sonra config dosyasını şu şekilde değiştirdim:
Host C
HostName addressOfC
User usernameC
IdentityFile ~/.ssh/id_rsa
Host C_D
HostName addressD
User usernameD
IdentityFile ~/.ssh/id_rsa
Port 22
ProxyCommand ssh -W %h:%p C
Çalışan ssh -vvv C_D
aşağıdaki günlüğü alıyorum (MobaXterm 7.4):
OpenSSH_6.2p2, OpenSSL 1.0.1g 7 Apr 2014
debug1: Reading configuration data /home/mobaxterm/.ssh/config
debug1: /home/mobaxterm/.ssh/config line 24: Applying options for C_D
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -W addressOfD:22 C
debug1: permanently_drop_suid: 1000
debug3: Incorrect RSA1 identifier
debug3: Could not load "/home/mobaxterm/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /home/mobaxterm/.ssh/id_rsa type 1
debug1: identity file /home/mobaxterm/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug2: fd 5 setting O_NONBLOCK
debug2: fd 4 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "addressOfD" from file "/home/mobaxterm/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /home/mobaxterm/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-rsa
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-rsa,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 zlib@openssh.com
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 zlib@openssh.com
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 135/256
debug2: bits set: 533/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA [...]
debug3: load_hostkeys: loading entries for host "addressOfD" from file "/home/mobaxterm/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /home/mobaxterm/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys
debug1: Host 'addressOfD' is known and matches the RSA host key.
debug1: Found key in /home/mobaxterm/.ssh/known_hosts:1
debug2: bits set: 515/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/mobaxterm/.ssh/id_rsa (0x20072e98), explicit
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic,password
debug3: preferred hostbased,publickey,password,keyboard-interactive
debug3: authmethod_lookup publickey
debug3: remaining preferred: password,keyboard-interactive
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/mobaxterm/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp [...]
debug3: sign_and_send_pubkey: RSA [...]
debug1: Enabling compression at level 6.
Burada yaklaşık 22 saniye duraklar.
debug1: Authentication succeeded (publickey).
Authenticated to addressOfD (via proxy).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: x11_get_proto: /bin/xauth list :0.0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 0: request x11-req confirm 1
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: X11 forwarding request accepted on channel 0
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Düzenleme 2:
Ubuntu 16.04 altında ssh config kurulumunu denedim ve 24 saniyelik gecikmeyi alamadım (bağlantı 2 saniyenin altında kuruldu). MobaXterm'in son sürümünü (v9.1) indirdim ve yalnızca ilk bağlantı kuruluşu yavaştı. Ayrıca MobaXterm'i Windows 10'da da test ettim (önce: Windows 7), aynı sonuç. Bu yüzden sanırım bu, Windows / MobaXterm ile veya başlık altında ne kullanıyorsa onunla ilgili bir sorun.
Sonuç:
Yapabileceğimin en iyisi Linux'a (biraz fazladan) hareket etmek ya da ssh aracısını (eğer kendimi şanslı hissediyorsam) ilerletmek ya da arkanıza yaslanıp biraz beklemektir. Her iki durumda da, şifresini iki kez girmek zorunda kalmamak için ssh tuşunu önceden yüklemeliyim.