Spitfire

Sürüm: 0.21.0Bu dokümantasyon Spitfire 0.21.0 içindir.

SQL: SSH tüneli

Ne işe yarar

Veritabanınıza doğrudan erişilemiyorsa ve yalnızca bir SSH sunucusu (bastion, jump host) üzerinden ulaşılabiliyorsa, PostgreSQL, MySQL / MariaDB, SQL Server ya da Oracle bağlantısı bir SSH tunnel kullanabilir. Controller (bağlantı testi, istatistik okuma, schema okuma) ve koşu sırasında her runner, veritabanına kendi SSH istemcisi üzerinden bağlanır:

  • runner başına, bağlantı başına tek bir SSH bağlantısı açılır ve o runner'ın bütün veritabanı connection pool'u onu paylaşır;
  • SSH bağlantısı canlı tutulur, koparsa yeniden kurulur;
  • veritabanının host adı SSH sunucusu tarafında çözülür (ör. bastion'ın gördüğü db.internal).

Ne zaman kullanılır

  • Veritabanı özel bir ağda ve dışarıya yalnızca bir bastion açık.
  • Firewall'da veritabanı portunu açmak yerine mevcut SSH erişimini kullanmak istiyorsunuz.

Kimler kurabilir

Tüneli yalnızca kurulum yöneticileri ekler, değiştirir ya da kaldırır. Diğer yöneticiler SSH tüneli bölümünde yalnızca mevcut tünelin hedefini (ya da Yok) ve SSH tünelini yalnızca kurulum yöneticisi kurabilir ya da değiştirebilir. notunu görür; API onlara 403 ssh_install_admin_only döner. Çalışma alanı yöneticileri bağlantının geri kalanını düzenleyebilir. Host key'i getir de bir tarayıcı oturumu ister.

Adım adım

SSH tüneli bölümüSSH tüneli bölümü

  1. Bağlantılar sayfasında SQL bağlantısını düzenleyin (kalem simgesi) ya da yeni bir SQL bağlantısı oluşturun.

  2. Formdaki SSH tüneli bölümünde Bir SSH sunucusu üzerinden bağlan seçeneğini açın.

  3. SSH sunucusu: bastion'ın adresi (ör. bastion.example.com). Zorunlu.

  4. SSH portu: varsayılan 22.

  5. SSH kullanıcısı: bastion'daki kullanıcı. Zorunlu.

  6. Kimlik doğrulama: key (özel anahtar) ya da password.

    • key için Özel anahtar (PEM) alanına anahtarın tamamını yapıştırın (-----BEGIN OPENSSH PRIVATE KEY----- ile başlayan OpenSSH ya da PEM biçimi). Anahtar parola korumalıysa Anahtar parolası'nı girin.
    • password için SSH parolası'nı girin. Bu üç alan da secret'tır: SPITFIRE_SECRET_KEY ile şifrelenir, API hiçbir zaman geri döndürmez.
  7. Host key'i getir'e tıklayın. Spitfire SSH sunucusuna bağlanır, sunduğu host key'i okur ve oturum açmadan bağlantıyı keser.

  8. Ekranda bir uyarı kutusu çıkar: Bu fingerprint'i SSH sunucusundakiyle karşılaştırın. Yalnızca aynıysa güvenin: ve altında anahtar türü ile SHA256:… fingerprint.

    Host key fingerprint onayıHost key fingerprint onayı

  9. Fingerprint'i sunucudakiyle karşılaştırın. SSH sunucusunda (ya da sunucunun yöneticisinden) şu komutla gerçek fingerprint'i alın:

    ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

    Anahtar türü farklıysa (ör. ecdsa, rsa) ilgili .pub dosyasını kullanın. İki değer birebir aynıysa devam edin.

  10. Fingerprint'ler aynı: bu anahtara güven'e tıklayın. Anahtar Host key ya da SHA256 fingerprint alanına yazılır. Fingerprint'i kendiniz biliyorsanız bu alana doğrudan SHA256:… ya da ssh-ed25519 AAAA… biçiminde de yazabilirsiniz.

  11. Sunucu alanına veritabanının host adını bastion'dan göründüğü haliyle yazın (ör. db.internal ya da 10.0.3.15).

  12. Kaydet, sonra listede Test et. Bağlantı satırında hedefin altında tünel simgesiyle kullanıcı@bastion:22 görünür.

Dikkat

Fingerprint'i karşılaştırmadan güvenmeyin. Araya giren biri (man-in-the-middle) kendi anahtarını sunabilir; o durumda veritabanı parolanız dahil bütün trafik ona gider. Fingerprint'i her zaman bastion'ın kendisinden ya da yöneticisinden doğrulayın.

Host key doğrulaması

  • Host key her zaman doğrulanır; doğrulamayı kapatmanın bir yolu yoktur. Host key alanı boşken kayıt reddedilir: SSH sunucusunun host key'i ya da SHA256 fingerprint'i gerekli (getirip onaylayın).
  • Bağlantı ya tam public key'i ya da SHA256 fingerprint'i saklar.
  • Sunucu sonradan farklı bir anahtar sunarsa (sunucu yeniden kuruldu, anahtar değişti ya da araya biri girdi) bağlantı hiçbir şey gönderilmeden reddedilir: ssh: the server's host key does not match the confirmed one. Anahtar gerçekten değiştiyse yeni fingerprint'i doğrulayıp 7–10. adımları tekrarlayın.

Tüneli kaldırma

Bağlantıyı düzenleyip Bir SSH sunucusu üzerinden bağlan seçeneğini kapatın ve kaydedin. Tünelle birlikte SSH secret'ları (özel anahtar, parola) da silinir. Yalnızca kurulum yöneticileri yapabilir.

Loglar

Tüneller açılırken, koparken ve kapanırken log yazılır (bağlantının adıyla; hiçbir secret yazılmaz).

Sık karşılaşılan sorunlar

Belirti: Host key'i getir başarısız, connection refused ya da zaman aşımı. Neden: SSH sunucusunun adresi/portu yanlış ya da controller'dan bastion'a erişim yok. Çözüm: SSH sunucusu ve SSH portu'nu kontrol edin; controller'dan nc -vz bastion 22 deneyin. Koşu için runner'ların da bastion'a erişebilmesi gerekir.

Belirti: ssh: the server's host key does not match the confirmed one. Neden: Sunucunun sunduğu anahtar onaylanandan farklı. Çözüm: Önce sunucunun yöneticisine anahtarın değişip değişmediğini sorun. Değiştiyse yeni fingerprint'i doğrulayıp yeniden güvenin; değişmediyse ağda bir sorun olabilir, devam etmeyin.

Belirti: ssh: handshake failed: unable to authenticate. Neden: SSH kullanıcısı, anahtar ya da parola yanlış; ya da anahtarın public kısmı bastion'da authorized_keys'e eklenmemiş. Çözüm: Anahtarı ve kullanıcıyı kontrol edin; public anahtarı bastion'daki kullanıcının ~/.ssh/authorized_keys dosyasına ekleyin.

Belirti: ssh: the private key is encrypted; enter its passphrase. Neden: Anahtar parola korumalı ama Anahtar parolası boş. Çözüm: Anahtar parolası'nı girip kaydedin.

Belirti: ssh: private key: … (anahtar okunamadı). Neden: Anahtar eksik ya da yanlış biçimde yapıştırıldı (başlık/bitiş satırları eksik). Çözüm: -----BEGIN …----- ve -----END …----- satırlarıyla birlikte, tamamını yapıştırın.

Belirti: Tünel açılıyor ama veritabanına bağlanamıyor (ssh tunnel to db.internal:5432: …). Neden: Sunucu alanındaki ad bastion'dan çözülmüyor ya da bastion veritabanı portuna erişemiyor; SSH sunucusunda TCP forwarding kapalı olabilir. Çözüm: Bastion'da nc -vz db.internal 5432 deneyin; sshd_config'te AllowTcpForwarding'in açık olduğundan emin olun.

Belirti: SSH tüneli bölümünde açma seçeneği yok; yalnızca SSH tünelini yalnızca kurulum yöneticisi kurabilir ya da değiştirebilir. yazıyor. Neden: Kurulum yöneticisi değilsiniz. Çözüm: Bir kurulum yöneticisinden tüneli kurmasını isteyin.

İlgili sayfalar