> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Linux Script

> SSH üzerinden uzak Linux sunucularında komut ve betik çalıştırmak için güvenli bağlantı oluşturur. SSH üzerinden uzak Linux sunucularında komut ve betik çalıştırarak hızlı DevOps otomasyonu gerçekleştirebilir

## Genel Bakış

<AccordionGroup>
  <Accordion title="Amacı Nedir?">
    <CardGroup cols={1}>
      <Card title="DevOps Otomasyonu">
        Integration Flow veya Connector adımlarının uzak Linux sunucularında betik/komut tetiklemesini sağlar ve DevOps otomasyonunu merkezileştirir.
      </Card>

      <Card title="Credential Yönetimi">
        Tekil credential yönetimi ile bakım, dağıtım veya gözlem betiklerini tekrar kullanılabilir hale getirir ve manuel SSH bağımlılığını azaltır.
      </Card>

      <Card title="Proje Bazlı İzolasyon">
        Proje bazlı izolasyon sayesinde aynı yapılandırmanın Development/Test/Production ortamlarında izlenebilir şekilde kullanılmasını sağlar.
      </Card>

      <Card title="Etkin/Pasif Yönetim">
        Bağlantı etkin/pasif yönetimi ile planlı bakım sırasında tetiklenen görevleri güvenli biçimde durdurmaya imkân tanır.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Çalışma Prensibi">
    <CardGroup cols={2}>
      <Card title="Bağlantı Başlatma" icon="play">
        Integration Flow veya Connector içerisinden Linux Script bağlantısı talep edildiğinde, sistem yapılandırılmış connection parametrelerini okur.
      </Card>

      <Card title="Connection Pool Yönetimi" icon="database">
        Worker düğümleri SSH oturumlarını talep bazlı açar; aynı kimlik bilgileri için kısa süreli hafif bir cache kullanılarak gereksiz oturum açma maliyeti düşürülür.
      </Card>

      <Card title="Kimlik Doğrulama" icon="lock">
        Kullanıcı adı/şifre tabanlı SSH Authentication mekanizmasıyla hedef Linux sunucusuna kimlik doğrulaması yapılır.
      </Card>

      <Card title="Veri İletişimi" icon="send">
        Betik gövdesi ve değişkenleri SSH kanalı üzerinden gönderilir, çıktı akışı JSON olarak Connector'a geri döner.
      </Card>

      <Card title="Bağlantı Yönetimi" icon="settings">
        İşlem tamamlandıktan sonra bağlantı kapatılır ve worker üzerindeki geçici credential verileri hafızadan temizlenir.
      </Card>

      <Card title="Hata Yönetimi" icon="alert-circle">
        Bağlantı hatası, timeout veya authentication hatası durumunda CustomParameterizedException ile detaylı hata kodu ve mesaj üretilir; loglar üzerinden kök neden izlenir.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Kullanım Alanları">
    <CardGroup cols={2}>
      <Card title="Deployment Otomasyonu" icon="rocket">
        Deployment öncesi/sonrası betiklerinin otomatik tetiklenmesi
      </Card>

      <Card title="Log ve Metrik Toplama" icon="bar-chart">
        Log dökümlerinin veya metrik toplanmasının periyodik olarak yapılması
      </Card>

      <Card title="Sistem Sağlık Kontrolü" icon="activity">
        Konfigürasyon drift kontrolü için sistem sağlık kontrollerinin yürütülmesi
      </Card>

      <Card title="Güvenlik Yönetimi" icon="shield">
        Güvenlik yamaları veya paket güncellemelerinin sıralı olarak dağıtılması
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Teknik Özellikler ve Yetenekler

<AccordionGroup>
  <Accordion title="Temel Özellikler">
    <CardGroup cols={2}>
      <Card title="SSH Üzerinden Betik Tetikleme" icon="terminal">
        Parametrik bash script'leri uzak Linux sunucusunda etkileşim gerektirmeden çalıştırır.
      </Card>

      <Card title="Anlık Çıktı ve Hata Toplama" icon="file-text">
        Standard output ve error akışlarını Integration Flow adımlarına geri taşır; Connector değişkenleri ile paylaşır.
      </Card>

      <Card title="Proje Bazlı İzolasyon" icon="folder">
        Her bağlantı bir projeyle etiketlenir, ADMIN\_PROJECT\_ID dışındaki projeler diğer projelerin kaynaklarını göremez.
      </Card>

      <Card title="Ortam Bazlı Yapılandırma" icon="code-branch">
        Her ortam (Development, Test, Production) için ayrı connection parametreleri tanımlama imkanı.
      </Card>

      <Card title="Enable/Disable Kontrolü" icon="toggle-on">
        Connection'ı aktif veya pasif hale getirme (enable/disable toggle). Pasif durumda bağlantı kullanılamaz ancak yapılandırması saklanır.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="İleri Düzey Özellikler">
    <CardGroup cols={2}>
      <Card title="Dinamik Değişken Enjeksiyonu" icon="code">
        Connector adımlarındaki global, önceki görev veya döngü değişkenleri script gövdesine yerleştirilebilir.
      </Card>

      <Card title="Connector Entegrasyonu" icon="plug">
        connector-linux-script bileşeni connection listesini gerçek zamanlı çeker ve yeni bağlantılar eklenir eklenmez kullanılabilir hale getirir.
      </Card>

      <Card title="Merkezi Olay Kaydı" icon="file-lines">
        ApinizerMessageService ile kayıt başarı/hata senaryoları UI ve log katmanında aynı anda izlenir.
      </Card>

      <Card title="Connection Test Özelliği" icon="flask">
        "Test Connection" butonu ile bağlantı parametrelerini kaydetmeden önce doğrulama imkanı.
      </Card>

      <Card title="Export/Import Özelliği" icon="file-export">
        Connection yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
      </Card>

      <Card title="Connection Monitoring" icon="chart-line">
        Bağlantı sağlığı, pool durumu ve performans metriklerini izleme.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Connection Parametreleri

<AccordionGroup>
  <Accordion title="Zorunlu Parametreler">
    <CardGroup cols={1}>
      <Card title="Name" icon="tag">
        **Açıklama:** Connection adı (benzersiz olmalı)\
        **Örnek Değer:** `Production_LinuxScript`\
        **Notlar:** Boşlukla başlamaz, özel karakterler kullanılmamalı
      </Card>

      <Card title="Host Name" icon="server">
        **Açıklama:** SSH ile erişilecek Linux sunucusunun tam etki alanı veya IP adresi\
        **Örnek Değer:** `ops-runner-01.apmz.local`\
        **Notlar:** DNS çözümlemesi yapılabilir olmalı, ilgili worker'dan erişilebilir olmalı
      </Card>

      <Card title="SSH Port" icon="network">
        **Açıklama:** SSH servisine bağlanmak için kullanılan port\
        **Örnek Değer:** `22`\
        **Notlar:** Varsayılan 22; güvenlik nedeniyle farklı port kullanılıyorsa Network/Firewall'da açılmalıdır
      </Card>

      <Card title="Username" icon="user">
        **Açıklama:** Uzak sunucudaki servis veya otomasyon kullanıcısı\
        **Örnek Değer:** `deploysvc`\
        **Notlar:** Yalnızca gerekli klasör/script izinlerine sahip kısıtlı kullanıcı olmalı
      </Card>

      <Card title="Password" icon="lock">
        **Açıklama:** Kullanıcıya ait parola (şifrelenmiş saklanır)\
        **Örnek Değer:** (Şifrelenmiş değer)\
        **Notlar:** UI'de zorunlu; kayıttan önce test bağlantısında doğrulanır
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="İsteğe Bağlı Parametreler">
    <CardGroup cols={1}>
      <Card title="Description" icon="file-text">
        **Açıklama:** Connection'ın amaç veya kapsam açıklaması\
        **Varsayılan Değer:** (Boş)\
        **Önerilen Değer:** Görev, sunucu ve risk bilgisi eklenmeli
      </Card>

      <Card title="Deploy To Worker" icon="upload">
        **Açıklama:** Bağlantının Integration Worker'larına dağıtılıp dağıtılmayacağını belirler\
        **Varsayılan Değer:** `true`\
        **Önerilen Değer:** Sadece kullanılacağı worker havuzlarına dağıtılması önerilir
      </Card>

      <Card title="Environment (Ortam)" icon="layers">
        **Açıklama:** Development/Test/Production seçimi\
        **Varsayılan Değer:** `Development`\
        **Önerilen Değer:** Ortama uygun credential seçimi yapılmalı
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

### Timeout ve Connection Pool Parametreleri

<CardGroup cols={2}>
  <Card title="Connection Timeout" icon="clock">
    **Açıklama:** Bağlantı kurulması için maksimum bekleme süresi\
    **Varsayılan:** 5000 ms\
    **Min:** 1000 ms | **Max:** 30000 ms
  </Card>

  <Card title="Request Timeout" icon="hourglass">
    **Açıklama:** İstek yanıtı için maksimum bekleme süresi\
    **Varsayılan:** 60000 ms\
    **Min:** 5000 ms | **Max:** 180000 ms
  </Card>

  <Card title="Pool Size" icon="layer-group">
    **Açıklama:** Connection pool'daki maksimum bağlantı sayısı\
    **Varsayılan:** 5\
    **Min:** 1 | **Max:** 20
  </Card>

  <Card title="SSH KeepAlive Interval" icon="repeat">
    **Açıklama:** Uzun işlemlerde oturumu açık tutmak için gönderilen keep-alive aralığı\
    **Varsayılan:** 30000 ms\
    **Min:** 5000 ms | **Max:** 60000 ms
  </Card>
</CardGroup>

## Kullanım Senaryoları

<CardGroup cols={2}>
  <Card title="Canlı Deployment Sonrası Servis Restart" icon="refresh-cw">
    **Durum:** Rolling Deployment tamamlandıktan sonra servisleri yeniden başlatma ihtiyacı\
    **Çözüm:** Host name olarak servis düğümünü, script olarak systemctl restart komutlarını tanımla, SSH Port 22\
    **Beklenen Sonuç:** Betik başarıyla çalışır, servisler sırasıyla yeniden başlatılır
  </Card>

  <Card title="Log Arşivleme" icon="archive">
    **Durum:** Günlük logları sıkıştırıp FTP'ye atma\
    **Çözüm:** Script içinde tar ve scp komutları kullanılır, kullanıcıya ilgili klasör izni verilir\
    **Beklenen Sonuç:** Loglar toplanır, transfer tamamlandığında Connector çıktısında dosya yolu döner
  </Card>

  <Card title="Güvenlik Yaması Kontrolü" icon="shield">
    **Durum:** Patch seviyesini belirli aralıklarla raporlama\
    **Çözüm:** Scheduled Job'da bu connection seçilir, script yum check-update çıktısını döner\
    **Beklenen Sonuç:** Rapor Integration Flow üzerinden SIEM'e aktarılır
  </Card>

  <Card title="Konfigürasyon Drift Tespiti" icon="search">
    **Durum:** /etc altındaki kritik dosyaların checksum takibi\
    **Çözüm:** Script sha256sum çıktısını üretir, sonuç JSON olarak işlenir\
    **Beklenen Sonuç:** Drift tespit edilen dosyalar uyarı loguna düşer
  </Card>

  <Card title="Olağanüstü Durum Testi" icon="alert-triangle">
    **Durum:** DR senaryosunda failover öncesi altyapı doğrulaması\
    **Çözüm:** Host cluster'ları için ayrı connection kopyaları oluşturulur, her biri health-check.sh çalıştırır\
    **Beklenen Sonuç:** Başarılı sonuçta DR koşulları onaylanır, hata halinde süreç durdurulur
  </Card>

  <Card title="Yüksek Kaynak Kullanımı (Opsiyonel)" icon="activity">
    **Durum:** CPU/RAM artışı durumunda otomatik müdahale\
    **Çözüm:** Script top çıktısını analiz edip servisleri yeniden başlatır\
    **Beklenen Sonuç:** Eşik aşıldığında otomatik düzeltme yapılır, connector logu ayrıntı içerir
  </Card>
</CardGroup>

## Connection Yapılandırma

### Yeni Linux Script Oluşturma

<img src="https://mintcdn.com/apinizer/YX1NcEKlSBeHefxE/images/yonetici/baglantilar/linux-variable-new.png?fit=max&auto=format&n=YX1NcEKlSBeHefxE&q=85&s=fb9c3b4e78329ba34847334e00f96b74" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/yonetici/baglantilar/linux-variable-new.png" />

#### Yapılandırma Adımları

<Steps>
  <Step title="Oluşturma Sayfasına Gitme">
    * Sol menüden **Connection → Linux Script** bölümüne gidin.
    * Sağ üstteki **\[+ Create]** butonuna tıklayın.
  </Step>

  <Step title="Temel Bilgileri Girme">
    **Enable Status (Aktif Durumu):**

    * Toggle ile aktif/pasif durumu ayarlayın. Yeni connection'lar varsayılan olarak aktiftir.

    **Name (İsim) - Zorunlu:**

    * Örnek: `Production_LinuxScript`
    * Benzersiz isim girin, boşlukla başlamaz.
    * Sistem otomatik kontrol eder. Yeşil tik: kullanılabilir. Kırmızı çarpı: mevcut isim.

    **Description (Açıklama):**

    * Örnek: "Prod node restart betikleri"
    * Maks. 1000 karakter.
    * Connection'ın amacını açıklayın.

    <Info>
      Sayfanın üst kısmındaki işlem butonları alanında, **\[\<> Variable]** butonunu kullanarak dinamik değer seçebilir, Global variable ifadeleri sayesinde connection parametrelerini sabit değer yerine değişken tabanlı yönetebilirsiniz. Detaylı bilgi için [Dinamik Değişkenler](/tr/concepts/temel-kavramlar/dinamik-degiskenler) sayfasını inceleyebilirsiniz.
    </Info>
  </Step>

  <Step title="Environment (Ortam) Seçimi">
    * Dropdown menüden ortam seçin: **Development**, **Test**, veya **Production**.
    * Her ortam için farklı connection parametreleri tanımlanabilir.
  </Step>

  <Step title="Linux Sunucu Parametreleri">
    * **Host Name:** Betiğin çalışacağı Linux sunucusunu tam etki alanı (FQDN) veya IP ile girin.
    * **SSH Port:** Varsayılan 22'dir; güvenlik politikası farklıysa yeni portu yazın ve firewall'da açıldığından emin olun.
    * Host erişimi worker'dan test edilmelidir; erişilemeyen sunucular kayıt sırasında hata verir.
  </Step>

  <Step title="Kimlik ve Betik Yetkileri">
    * **Username:** Sadece gerekli dizin/script izinlerine sahip servis kullanıcısı kullanın.
    * **Password:** Şifre alanı kaydetmeden önce test edilir ve veritabanında şifrelenerek saklanır.
    * Kullanıcıya hedef scriptler üzerinde yürütme (execute) izni verildiğinden emin olun.
  </Step>

  <Step title="Timeout ve Connection Pool Ayarları">
    * Connection timeout, request timeout ve pool size değerlerini workload'a göre ayarlayın.
    * Uzun süren komutlar için keep-alive aralığını düşürerek SSH oturumunun kapanmasını engelleyin.
  </Step>

  <Step title="Güvenlik ve Authentication Ayarları">
    * Kimlik bilgilerini secret manager veya environment variable üzerinden doldurun.
    * SSL/TLS tünellemesi gerekiyorsa bastion host üzerinden port yönlendirmesi yapılandırın.
    * Root hesap kullanmayın; sadece gerekli yetkiye sahip servis kullanıcısı tanımlayın.
  </Step>

  <Step title="Test Connection">
    * **\[Test Connection]** butonuna tıklayın.
    * Bağlantı parametrelerinin doğru olup olmadığını test edin.
    * **Başarılı:** Yeşil onay mesajı
    * **Başarısız:** Hata detayları gösterilir
  </Step>

  <Step title="Kaydetme">
    * Sağ üstteki **\[Save and Deploy]** butonuna tıklayın.

    **Kontrol Listesi:**

    * Benzersiz isim
    * Zorunlu alanlar dolu
    * Test connection başarılı (önerilir)

    **Sonuç:**

    * Connection listeye eklenir
    * Integration Flow ve Connector adımlarında kullanılabilir hale gelir
    * Ortama göre aktif olur

    <Check>
      Connection başarıyla oluşturuldu! Artık Integration Flow ve Connector adımlarında kullanabilirsiniz.
    </Check>
  </Step>
</Steps>

### Connection'ı Silme

Connection'ı silmek için:

<CardGroup cols={2}>
  <Card title="Yöntem 1: Liste Ekranından" icon="list">
    * Connection listesinde satır sonundaki **⋮** menüsünden **Delete** seçeneğini tıklayın.
    * Onay dialogunda silme işlemini onaylayın.
  </Card>

  <Card title="Silme İpuçları" icon="info-circle">
    **Silmeden Önce Kontrol Edin:**

    * Integration Flow veya Connector adımlarında kullanılıyor olabilir.
    * Gerekirse alternatif bir connection atayın.
    * Silmeden önce Export ile yedek alın.
  </Card>

  <Card title="Alternatif: Deaktif Etme" icon="toggle-off">
    * Silmek yerine connection'ın aktif durumunu pasif hale getirin.
    * Connection pasif olur ancak silinmez.
    * Gerektiğinde aktif hale getirerek yeniden kullanabilirsiniz.
  </Card>
</CardGroup>

### Connection'ı Dışa/İçe Aktarma

<Info>
  Bu adımda kullanıcı, mevcut connection'ları yedekleme, farklı ortamlara taşıma veya paylaşma amacıyla dışa aktarabilir (export) ya da daha önce dışa aktarılmış bir connection'ı tekrar içe aktarabilir (import). Bu işlem, sürüm yönetimi, test ve üretim ortamları arasında geçiş veya ekipler arası paylaşım süreçlerinde veri bütünlüğünü korumak için kullanılır.
</Info>

<AccordionGroup>
  <Accordion title="Dışa Aktarma (Export)">
    <CardGroup cols={2}>
      <Card title="Yöntem 1: Liste Ekranından" icon="list">
        * Connection listesinde satır sonundaki **⋮** menüsünden **Export** seçeneğini tıklayın.
        * ZIP dosyası otomatik olarak indirilir.
      </Card>

      <Card title="Dosya Formatı" icon="file-zipper">
        Format: `{Date}-linux-integration-{ConnectionName}-export.zip`\
        Örnek: `13 Nov 2025-linux-integration-Production_LinuxScript-export.zip`
      </Card>

      <Card title="ZIP İçeriği" icon="folder-open">
        * Connection JSON dosyası
        * Metadata bilgileri
        * Bağımlılık bilgileri (örneğin sertifikalar, key store)
      </Card>

      <Card title="Kullanım Alanları" icon="list-check">
        * Yedekleme
        * Ortamlar arası taşıma (Test → Prod)
        * Versiyonlama
        * Ekip veya proje bazlı paylaşım
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="İçe Aktarma (Import)">
    <CardGroup cols={2}>
      <Card title="İçe Aktarma Adımları" icon="upload">
        * Ana listede **\[Import Linux Script]** butonuna tıklayın.
        * İndirilen ZIP dosyasını seçin.
        * Sistem kontrolleri: Format geçerli mi? İsim çakışması var mı? Bağımlılıklar mevcut mu?
        * Ardından **\[Import]** butonuna tıklayın.
      </Card>

      <Card title="İçe Aktarma Senaryoları" icon="info-circle">
        **Senaryo 1: İsim Çakışması** → Eski connection'ın üzerine yazın veya yeni bir isimle oluşturun.

        **Senaryo 2: Eksik Bağımlılıklar** → Eksik sertifikaları veya key store'ları önce oluşturun veya import sırasında çıkarın.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

### Connection'ın Kullanım Alanları

<CardGroup cols={2}>
  <Card title="Connection Oluşturma ve Aktif Etme" icon="plus-circle">
    **Adımlar:**

    1. Connection'ı oluşturun
    2. Test Connection ile bağlantıyı doğrulayın
    3. Save and Deploy ile kaydedin ve etkinleştirin
    4. Connection'ın Enabled durumda olduğundan emin olun.
  </Card>

  <Card title="Integration / Connector Adımlarında Kullanım" icon="workflow">
    SSH üzerinden Linux sunucularında komut ve betik çalıştırma gerektiren adımlarda connection seçilir. Örnek: "Execute Linux Script", "Pre-Deployment Hook", "Health Check", "Remote Command" gibi adımlar. Bağlantı seçimi bu adımların yapılandırmasında yer alan Connection alanından yapılır.
  </Card>

  <Card title="Scheduled Job Kullanımı" icon="clock">
    Zamanlanmış görevlerde (ör. belirli aralıklarla log arşivleme, kaynak kullanımı ölçümleri, sistem sağlık kontrolleri vb.) bağlantı seçilerek uzak Linux sunucularında komut çalıştırılır. Connection değiştiğinde, job çalışma davranışı da buna göre güncellenir.
  </Card>

  <Card title="Test Amaçlı Kullanım" icon="check-circle">
    Connection Test özelliği ile bağlantının doğruluğu Integration Flow'dan bağımsız olarak kontrol edilebilir. Bu test hata ayıklama sürecinde kritik önem taşır.
  </Card>
</CardGroup>

## Best Practices

<AccordionGroup>
  <Accordion title="Yapılması Gerekenler ve En İyi Uygulamalar">
    <CardGroup cols={2}>
      <Card title="SSH Kullanıcı Yönetimi" icon="users">
        **Kötü:** Root hesabını tüm betikler için paylaşmak\
        **İyi:** Her ekip için ayrı servis kullanıcısı oluşturmak\
        **En İyi:** Asgari yetki prensibine göre sudoers dosyasında yalnızca gerekli komutlara izin vermek
      </Card>

      <Card title="Komut Versiyonlama" icon="git-branch">
        **Kötü:** Güncel scriptleri manuel tutmak\
        **İyi:** Script içeriğini VCS'de saklamak ve Connector'a kopyalamak\
        **En İyi:** Scripti pipeline sırasında otomatik olarak güncelleyen IaC süreçleri kullanmak
      </Card>

      <Card title="Çıktı Yönetimi" icon="file-text">
        **Kötü:** Uzun çıktıları log'lara doğrudan yazmak\
        **İyi:** Kritik satırları filtrelemek\
        **En İyi:** Çıktıyı JSON formatında standartlaştırıp Integration Flow içindeki sonraki adımlara parametre olarak geçirmek
      </Card>

      <Card title="Kaynak Tüketimi" icon="activity">
        **Kötü:** Aynı anda onlarca uzun süreli script tetiklemek\
        **İyi:** Erişimi zamanlanmış job'larla yaymak\
        **En İyi:** Pool size ve keep-alive değerlerini trafiğe göre sürekli izleyip ayarlamak
      </Card>

      <Card title="Ortam Yönetimi" icon="layers">
        **Kötü:** Tüm ortamlarda aynı connection parametrelerini kullanmak\
        **İyi:** Her ortam için ayrı connection oluşturmak\
        **En İyi:** Environment seçeneğini kullanarak tek connection'da tüm ortamları yönetmek, ortamlar arası geçişte sadece environment değiştirmek
      </Card>

      <Card title="Connection Test" icon="check-circle">
        **Kötü:** Connection'ı test etmeden kaydetmek ve deploy etmek\
        **İyi:** Kaydetmeden önce Test Connection ile doğrulamak\
        **En İyi:** Her parametre değişikliğinden sonra test etmek, production'a geçmeden önce test ortamında tam entegrasyon testi yapmak
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Güvenlik En İyi Uygulamaları">
    <CardGroup cols={2}>
      <Card title="Kimlik Bilgisi Rotasyonu" icon="refresh-cw">
        Şifreleri periyodik olarak yenileyin, rotation planı sırasında yeni connection oluşturup eskisini devre dışı bırakın
      </Card>

      <Card title="Bastion Host Kullanımı" icon="shield">
        Production sunucularına erişimde doğrudan internete açık port bırakmak yerine bastion üzerinden tünelleme yapın ve IP whitelisting uygulayın
      </Card>

      <Card title="Komut Yetkilendirmesi" icon="lock">
        Kullanıcıya yalnızca izin verilen dizinlerde script çalıştırma hakkı verin, sudo gereksinimini sudoers dosyasında komut bazlı kısıtlayın
      </Card>

      <Card title="Kimlik Bilgileri Yönetimi" icon="key">
        Kullanıcı adı ve şifre gibi hassas bilgileri environment variable veya secret manager kullanarak saklayın. Kimlik bilgilerini kod veya konfigürasyon dosyalarına hardcode etmeyin. Periyodik olarak şifreleri güncelleyin
      </Card>

      <Card title="SSL/TLS Kullanımı" icon="shield-check">
        Production ortamında mutlaka SSL/TLS aktif edin. Self-signed sertifikalar sadece development ortamında kullanın. Sertifika expiration tarihlerini takip edin ve zamanında yenileyin
      </Card>

      <Card title="Erişim Kontrolü" icon="user-check">
        Connection yapılandırmasını sadece yetkili kullanıcıların değiştirmesine izin verin. Connection değişiklik loglarını saklayın. Kritik connection'lar için değişiklik approval süreci uygulayın
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Kaçınılması Gerekenler">
    <CardGroup cols={2}>
      <Card title="Paylaşılan Root Hesabı" icon="alert-triangle">
        **Neden kaçınılmalı:** Tek hata tüm sunucuları etkiler, denetlenemez\
        **Alternatif:** Roller bazlı servis kullanıcılar tanımlayın
      </Card>

      <Card title="Firewall Kısıtlarını Göz Ardı Etme" icon="alert-triangle">
        **Neden kaçınılmalı:** SSH portu kapalıysa betikler başarısız olur\
        **Alternatif:** Network ekibinden host/port için açılış onayı alın ve izleme kurun
      </Card>

      <Card title="Betik Çıktısını Doğrulamama" icon="alert-triangle">
        **Neden kaçınılmalı:** Yanlış başarı mesajları süreçleri yanıltır\
        **Alternatif:** Çıktıyı parse edip Integration Flow içinde koşullu adımlar ekleyin
      </Card>

      <Card title="Production Connection'ı Test Ortamında Kullanma" icon="alert-triangle">
        **Neden kaçınılmalı:** Test verileri production sistemine yazılabilir, gerçek kullanıcılar etkilenebilir, güvenlik riski oluşur\
        **Alternatif:** Her ortam için ayrı connection oluşturun, environment parametresini kullanın, connection isimlerini ortama göre prefix ekleyerek ayırın (Test\_, Prod\_)
      </Card>

      <Card title="Çok Düşük Timeout Değerleri" icon="alert-triangle">
        **Neden kaçınılmalı:** Ağ gecikmelerinde connection sürekli timeout olur, Entegrasyon adımları başarısız olur\
        **Alternatif:** Gerçek kullanım senaryolarına göre timeout değerlerini ayarlayın, network latency'yi ölçün ve timeout'ları buna göre belirleyin
      </Card>

      <Card title="Connection Pool Kullanmama" icon="alert-triangle">
        **Neden kaçınılmalı:** Her istekte yeni bağlantı açılır, performans düşer, kaynak tüketimi artar, hedef sistem yükü artar\
        **Alternatif:** Connection pool aktif edin, pool size'ı trafik hacmine göre ayarlayın, pool monitoring kurun
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Performans İpuçları">
    <CardGroup cols={2}>
      <Card title="Script Sürelerinin İzlenmesi" icon="clock">
        **Öneri:** Connector çıktılarına süre metriği ekleyin, 95. persentil değerini izleyin\
        **Etki:** Uzayan betikler erken tespit edilir, ölçeklendirme yapılır
      </Card>

      <Card title="Çıktı Boyutu Kontrolü" icon="file">
        **Öneri:** Büyük çıktıları sıkıştırıp dosya olarak dönün, Integration Flow'da sadece özet gönderin\
        **Etki:** Payload küçülür, Gateway hafızası optimize edilir
      </Card>

      <Card title="Paralel İstek Planlama" icon="layers">
        **Öneri:** Aynı host'a yönelik iş yüklerini dağıtın, Cron zarflarıyla sıralı çalıştırın\
        **Etki:** Sunucu kaynakları dengeli kullanılır, SSH kuyrukları oluşmaz
      </Card>

      <Card title="Connection Pool Optimizasyonu" icon="database">
        **Öneri:** Pool size'ı peak trafiğe göre ayarlayın (önerilen: eşzamanlı istek sayısı × 1.5), idle connection timeout'ları belirleyin, pool health check yapın\
        **Etki:** Bağlantı açma maliyeti %80 azalır, yanıt süreleri düşer, kaynak kullanımı optimize edilir
      </Card>

      <Card title="Timeout Değerleri Optimizasyonu" icon="hourglass">
        **Öneri:** Gerçek network latency'yi ölçün, timeout değerlerini buna göre ayarlayın, çok düşük veya çok yüksek timeout'lardan kaçının\
        **Etki:** Gereksiz beklemeler önlenir, hızlı fail-over sağlanır, kullanıcı deneyimi iyileşir
      </Card>

      <Card title="Connection Monitoring" icon="activity">
        **Öneri:** Connection pool kullanımını izleyin, timeout oranlarını takip edin, connection health check yapın, alerting kurun\
        **Etki:** Sorunlar proaktif tespit edilir, performans darboğazları erken belirlenir, kesinti süresi azalır
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Sorun Giderme (Troubleshooting)

<AccordionGroup>
  <Accordion title="Betik Çalışıyor Ancak Çıktı Boş">
    <Warning>
      Script stdout yerine dosyaya yazıyor, JSON format hatalı veya output key doğrulaması başarısız olabilir.
    </Warning>

    <Steps>
      <Step title="Script Güncelleme">
        Scripti stdout'a yazacak şekilde güncelleyin.
      </Step>

      <Step title="JSON Doğrulama">
        JSON çıktısını jq ile doğrulayın.
      </Step>

      <Step title="Output Key Kontrolü">
        Connector output key ayarını kontrol edin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="SSH Yetki Hatası">
    <Warning>
      Kullanıcının hedef dizine erişimi yok, sudo gereksinimi karşılanmamış veya anahtar parmak izi doğrulanmamış olabilir.
    </Warning>

    <Steps>
      <Step title="Kullanıcı İzinleri">
        Kullanıcının izinlerini kontrol edin.
      </Step>

      <Step title="Sudoers Ayarları">
        sudoers dosyasına komut bazlı izin ekleyin.
      </Step>

      <Step title="Host Fingerprint">
        Host fingerprint'ini worker'a ekleyin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Connection Timeout">
    <Warning>
      Network gecikmesi, hedef sistem yavaş yanıt veriyor veya timeout değeri çok düşük olabilir.
    </Warning>

    <Steps>
      <Step title="Network Kontrolü">
        Network connectivity kontrol edin.
      </Step>

      <Step title="Sistem Sağlığı">
        Hedef sistem sağlığını kontrol edin.
      </Step>

      <Step title="Timeout Ayarları">
        Timeout değerlerini artırın.
      </Step>

      <Step title="Log İnceleme">
        Connection loglarını inceleyin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Authentication Failed">
    <Warning>
      Yanlış kullanıcı adı/şifre, expired credentials veya yetki problemi olabilir.
    </Warning>

    <Steps>
      <Step title="Kimlik Bilgileri">
        Kimlik bilgilerini doğrulayın.
      </Step>

      <Step title="Kullanıcı Durumu">
        Hedef sistemde kullanıcının aktif olduğunu kontrol edin.
      </Step>

      <Step title="Yetki Kontrolü">
        Gerekli yetkilerin verildiğini kontrol edin.
      </Step>

      <Step title="Sertifika Kontrolü">
        SSL/TLS sertifikalarını kontrol edin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Pool Exhausted">
    <Warning>
      Pool size çok düşük, connection leak var veya trafik çok yüksek olabilir.
    </Warning>

    <Steps>
      <Step title="Pool Size">
        Pool size'ı artırın.
      </Step>

      <Step title="Connection Kontrolü">
        Connection'ların düzgün kapatıldığını kontrol edin.
      </Step>

      <Step title="Idle Timeout">
        Idle connection timeout'ları ayarlayın.
      </Step>

      <Step title="Metrik İzleme">
        Connection kullanım metriklerini izleyin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Connection Test Başarılı Ama Entegrasyon Akışı Hata Veriyor">
    <Warning>
      Integration/Connector adımında farklı connection seçili olabilir, adım yanlış yapılandırılmış olabilir veya Flow/Job redeploy edilmemiş olabilir.
    </Warning>

    <Steps>
      <Step title="Enable Toggle">
        Connection'ın enable toggle'ının aktif olduğunu kontrol edin.
      </Step>

      <Step title="Connection Seçimi">
        Integration Flow'da doğru connection'ın seçildiğini doğrulayın.
      </Step>

      <Step title="Connection Deploy">
        Connection'ı tekrar deploy edin.
      </Step>

      <Step title="Flow/Job Deploy">
        Integration Flow veya Job'ı redeploy edin.
      </Step>

      <Step title="Log Kontrolü">
        Gateway loglarını kontrol edin.
      </Step>
    </Steps>
  </Accordion>
</AccordionGroup>

## Sık Sorulan Sorular (SSS)

<AccordionGroup>
  <Accordion title="Aynı Linux Script bağlantısını farklı projeler paylaşabilir mi?">
    <Info>
      Hayır, her connection belirli bir projeye aittir; paylaşım gerekiyorsa export/import veya move-to-global işlemi uygulanmalıdır.
    </Info>
  </Accordion>

  <Accordion title="Betik başarısız olduğunda otomatik tekrar deneme yapılır mı?">
    <Info>
      Hayır, connector tek çalıştırmayı gerçekleştirir. Yeniden deneme gerekiyorsa Integration Flow içinde Retry adımı konfigüre edilmelidir.
    </Info>
  </Accordion>

  <Accordion title="Şifreler nasıl saklanıyor?">
    <Info>
      UI üzerinden girilen parolalar kaydedilirken şifrelenir, worker tarafında UtilCommon.decryptWithDefaultAlgorithm ile sadece çalışma anında çözülür.
    </Info>
  </Accordion>

  <Accordion title="Test Connection hangi komutu çalıştırıyor?">
    <Info>
      Kayıt sırasında UtilRemoteLinux.runLinuxCommand üzerinden ls komutu tetiklenir; böylece SSH ve yetki doğrulaması yapılır.
    </Info>
  </Accordion>

  <Accordion title="Script çıktısını başka adımlarda nasıl kullanırım?">
    <Info>
      Connector'dan dönen output key'leri Integration Flow içindeki sonraki adımlarda değişken olarak seçebilirsiniz; JSON path ayarlarıyla sadece gerekli alanları alın.
    </Info>
  </Accordion>

  <Accordion title="Aynı connection'ı birden fazla Integration Flow'da kullanabilir miyim?">
    <Check>
      Evet, aynı connection birden fazla Integration Flow veya Connector adımında kullanılabilir. Bu merkezi yönetim sağlar ve konfigürasyon tutarlılığını garanti eder. Ancak connection'da yapılan değişiklikler tüm kullanım yerlerini etkileyeceği için dikkatli olunmalıdır.
    </Check>
  </Accordion>

  <Accordion title="Connection pool kullanmak zorunlu mudur?">
    <Info>
      Connection pool kullanımı zorunlu değildir ancak yüksek trafikli sistemlerde şiddetle önerilir. Her istekte yeni bağlantı açmak yerine mevcut bağlantıları yeniden kullanmak performansı önemli ölçüde artırır.
    </Info>
  </Accordion>

  <Accordion title="Test ve Production için farklı connection'lar mı oluşturmalıyım?">
    <Check>
      Evet, her ortam için ayrı connection oluşturmanız önerilir. Alternatif olarak environment parametresini kullanarak tek connection içinde tüm ortamları yönetebilirsiniz. Bu yaklaşım daha kolay yönetim ve daha az hata riski sağlar.
    </Check>
  </Accordion>

  <Accordion title="Test Connection başarılı ama Integration Flow'da çalışmıyor, neden?">
    <Warning>
      Birkaç neden olabilir:
    </Warning>

    1. Connection enable toggle'ı pasif olabilir
    2. Integration adımında farklı bir connection seçili olabilir
    3. Connection deploy edilmemiş olabilir
    4. Integration Flow henüz redeploy edilmemiş olabilir
  </Accordion>
</AccordionGroup>
