Belge

ShellHub kullanarak Merkezi SSH Yapılandırma

SSH, Secure Socket Shell veya secure Shell’in kısaltmasıdır. Bu, güvenli olmayan bir ağ üzerinden iki bilgisayar arasında güvenli bir iletişimi yönetmek ve oluşturmak için kullanılan bir şifreleme protokolüdür. SSH, SSH protokolünü uygulayan yardımcı program paketini ifade etmek için de kullanılabilir. Çeşitli kimlik doğrulama mekanizmaları vardır; en yaygın olanı parola kimlik doğrulamasıdır, ancak aynı zamanda genel anahtar tabanlı kimlik doğrulama ve şifreli veri iletişimleri de vardır.

SSH aşağıdaki işlevleri gerçekleştirmek için kullanılabilir:

  • Kullanıcılar için SSH özellikli ağ sistemlerine veya cihazlarına ve ayrıca otomatik süreçlere güvenli uzaktan erişim sağlayın.
  • dosya aktarımlarını otomatikleştirin ve güvenli hale getirin.
  • Ağ altyapısı bileşenlerinin güvenli yönetimi.
  • Güvenli ve etkileşimli dosya aktarım oturumları oluşturun.
  • Uzak cihazlara veya sistemlere güvenli komut verilmesi

Piyasada SSH protokolünü uygulayan çeşitli araçlar bulunmaktadır. Bu araçlar arasında SmarTTY, ZOC, Xshell, FileZilla, Chrome SSH uzantısı, Bitvise SSH İstemcisi, WinSCP, MobaXterm, KiTTY, mRemoteNG vb. bulunur.

Bu kılavuzda, ShellHub kullanarak Linux sistemleri için merkezi SSH’nin nasıl yapılandırılacağını öğreneceğiz. ShellHub, Linux cihazlarına bir komut satırı (SSH istemcisi kullanarak) veya web tabanlı bir kullanıcı arayüzü aracılığıyla uzaktan erişmek için kullanılabilen modernleştirilmiş bir SSH sunucusudur.

Normalde yerel ağınızdaki uzak bir sisteme SSH aracılığıyla erişmek istediğinizde sistemin IP adresini bilmeniz gerekir. Ancak ağ dışındaki bir sisteme erişmek istiyorsanız, genel IP adresini almak ve yönlendiricinizi gerektiği gibi yapılandırmak gibi yapmanız gereken çeşitli yapılandırmalar vardır. Cihaz SSH bağlantılarını kısıtlayan kurumsal bir güvenlik duvarının arkasındaysa VPN/güvenlik duvarı yapılandırmasını değiştirmek daha da zorlaşır. ShellHub, NAT veya güvenlik duvarı arkasındaki herhangi bir Linux sistemine erişimi kolaylaştırarak bu kötü durumu ortadan kaldırır.

ShellHub ile ilgili tatmin edici özellikler şunlardır:

  • SCP/SFTP support: Kullanıcıların, 3. taraf uygulamalar olmadan endüstri standardı araçları kullanarak cihazlara ve cihazlardan dosya kopyalamasına olanak tanır
  • Firewall rules: SSH bağlantılarını filtrelemek için esnek bir güvenlik duvarı sağlar ve ayrıca hangi SSH bağlantılarının cihazlara ulaştığı üzerinde ayrıntılı kontrol sağlar.
  • Session recording: Tüm etkileşimli SSH oturumları kaydedilir ve ShellHub Web kullanıcı arayüzündeki yerleşik bir oturum oynatıcısı aracılığıyla yeniden oynatılabilir. Bu, oturum sırasında gerçekleşen tüm kullanıcı etkinliğini içerir.
  • Audit logging: ShellHub’a her SSH bağlantısı yapıldığında, denetim amacıyla bir oturum oluşturulur ve sunucuda saklanır.
  • Native SSH support: OpenSSH Client, PuTTY vb. gibi standart araçları kullanarak ShellHub merkezi SSH sunucusunun arkasındaki herhangi bir cihaza erişin
  • Public-key authentication: Bu, birden fazla kullanıcının, aralarında tek bir şifreyi paylaşmak zorunda kalmadan aynı sistem kullanıcısı olarak oturum açmasına izin vermeyi kolaylaştırır. Diğer kullanıcıların erişimini iptal etmeden tek bir kullanıcının erişimini iptal edebilir ve tek bir kullanıcının birçok farklı şifreyi yönetmeye gerek kalmadan birçok hesapta oturum açmasını kolaylaştırabilirsiniz.

Başlarken

Kurulum sırasında yaşanan tüm bağımlılık sorunlarını ortadan kaldırmak için ShellHub kurulumunun Docker Compose dosyası kullanılarak docker konteynerlerinde gerçekleştirilmesi önerilir.

Bu kılavuzun en iyi şekilde çalışması için aşağıdakilere ihtiyacınız vardır:

  • Sisteminizde Docker Engine ve Docker Compose’un kurulu olduğundan emin olun.
  • Bağlantı noktası 22 ve 80 mevcut ve güvenlik duvarında açık

Docker Engine linux sisteminizde kurulu olmalı:

    Kurulduktan sonra hizmetin başlatıldığından emin olun.

    sudo systemctl start docker && sudo systemctl enable docker

    Ayrıca sistem kullanıcınızı docker grubuna ekleyin.

    sudo usermod -aG docker $USER
    newgrp docker

    Docker compose linux sisteminizde kurulu olmalı

      Ayrıca gerekli paketlerin kurulu olduğundan emin olun:

      ##CentOS/RHEL/Rocky Linux/Alma Linux'ta
      sudo yum install make -y
      
      ##Debian/Ubuntu'da
      sudo apt install make -y

      Güvenlik duvarı üzerinden 80 ve 22 numaralı bağlantı noktalarına izin verin:

      ##Güvenlik Duvarı için
      sudo firewall-cmd --add-port={22/tcp,80/tcp} --permanent
      sudo firewall-cmd --reload
      
      ## UFW için
      sudo ufw allow 22
      sudo ufw allow 80

      22 ve 80 numaralı bağlantı noktalarını kullanan tüm hizmetleri durdurun. Bağlantı noktalarında çalışan başka önemli hizmetler varsa, aşağıdaki adımda gösterildiği gibi .env dosyasında değişiklik yaparak diğer bağlantı noktalarını kullanmayı seçebilirsiniz.

      Adım 1 – Linux’ta ShellHub’u indirin

      GitHub’dan en son kararlı sürümü kopyalayarak başlayacağız:

      sudo apt install build-essential
      git clone https://github.com/shellhub-io/shellhub.git

      Şimdi dizine gidin:

      cd shellhub
      echo "SHELLHUB_ENV=development" >> .env.override

      Dizine girdikten sonra aşağıdaki komutla gerekli anahtarları oluşturun:

      $ make keygen
      Generating RSA private key, 2048 bit long modulus (2 primes)
      ................+++++
      .................................................+++++
      e is 65537 (0x010001)
      writing RSA key
      Generating RSA private key, 2048 bit long modulus (2 primes)
      ...........+++++
      .................................................+++++
      e is 65537 (0x010001)

      Adım 2 – ShellHub’u Linux’a yükleyin

      Bu dağıtım için, çeşitli ortamlara yönelik çeşitli docker tarafından oluşturulan dosyalar vardır. Ancak ne yaptığınızdan emin olmadığınız sürece docker-compose’u doğrudan kullanmaktan kaçınmamız önerilir.

      Dağıtımı varsayılanlarla başlatmanın en kolay yolu şu komutu yürütmektir:

      make start

      Örnek çıktı:

      .......
      [+] Running 8/8
       ⠿ Network shellhub_network      Created                                   0.2s
       ⠿ Container shellhub-ssh-1      Started                                   3.6s
       ⠿ Container shellhub-mongo-1    Started                                   3.8s
       ⠿ Container shellhub-redis-1    Started                                   3.8s
       ⠿ Container shellhub-api-1      Started                                   3.6s
       ⠿ Container shellhub-ui-1       Started                                   4.6s
       ⠿ Container shellhub-cli-1      Started                                   4.4s
       ⠿ Container shellhub-gateway-1  Started                                   4.9s

      Tamamlandıktan sonra kapsayıcıların çalışıp çalışmadığını doğrulayın:

      $ docker ps
      CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS                    PORTS                                       NAMES
      c210563acd7a   shellhubio/gateway:v0.10.3   "/entrypoint.sh /usr…"   43 seconds ago   Up 37 seconds             0.0.0.0:80->80/tcp, :::80->80/tcp           shellhub-gateway-1
      f74a69259458   shellhubio/ui:v0.10.3        "/docker-entrypoint.…"   44 seconds ago   Up 38 seconds             80/tcp                                      shellhub-ui-1
      71b867c8032a   shellhubio/cli:v0.10.3       "/bin/sleep infinity"    44 seconds ago   Up 38 seconds                                                         shellhub-cli-1
      495206e835e0   shellhubio/api:v0.10.3       "/bin/sh -c '/api se…"   44 seconds ago   Up 39 seconds                                                         shellhub-api-1
      65c5aabb9362   shellhubio/ssh:v0.10.3       "/bin/sh -c /ssh"        45 seconds ago   Up 40 seconds             0.0.0.0:2222->2222/tcp, :::2222->2222/tcp   shellhub-ssh-1
      7de36a089ea7   mongo:4.4.8                  "docker-entrypoint.s…"   45 seconds ago   Up 40 seconds (healthy)   27017/tcp                                   shellhub-mongo-1
      e3b3e85e9add   redis                        "docker-entrypoint.s…"   45 seconds ago   Up 40 seconds             6379/tcp                                    shellhub-redis-1

      Ayrıca ortamınıza uygun dağıtımlar da yapabilirsiniz.

      Üretim Dağıtımı

      Üretim dağıtımı için yapmanız gereken bazı yapılandırmalar vardır. Bunlar:

      • HTTPS’yi etkinleştir
      • MongoDB için kalıcı birimi ayarlayın

      A. HTTPS’yi etkinleştirme

      Varsayılan olarak ShellHub, Let’s Encrypt kullanarak otomatik HTTP desteği sağlar. Bunu etkinleştirmek için değişkenler dosyasında şu ayarlamaları yapmanız gerekir:

      vim .env

      Dosyada şunları sağlayın:

      • SHELLHUB_HTTP_PORT​, varsayılan bağlantı noktası 80’dir
      • SHELLHUB_HTTPS_PORT​, varsayılan bağlantı noktası 443’tür
      • SHELLHUB_SSH_PORT, varsayılan bağlantı noktası 22’dir ancak bunu 2222 gibi başka herhangi bir bağlantı noktasına ayarlayabilirsiniz.
      • SHELLHUB_PROXY, varsayılan olarak false olarak ayarlanmıştır. ShellHub’un önünde proxy protokollü bir Katman 4 yük dengeleyici çalıştırıyorsanız bu, doğru olarak ayarlanabilir.
      • SHELLHUB_AUTO_SSL, varsayılan olarak false değerine ayarlıdır ancak Let’s Encrypt ile otomatik HTTPS kullanacak şekilde etkinleştirilebilir
      • SHELLHUB_REDIRECT_TO_HTTPS, false olarak ayarlayın, ancak isteklerin HTTP bağlantı noktasından HTTPS bağlantı noktasına yönlendirilmesini etkinleştirebilirsiniz.
      • SHELLHUB_DOMAIN, varsayılan değer localhost’tur, burada sunucunun etki alanını sağlayabilirsiniz.

      Ancak HTTP’leri manuel olarak yapılandırmak da mümkündür. Bu genellikle NGINX ters proxy’sini istediğiniz sertifikalarla yapılandırarak yapılır. Bu durumda docker-compose.yml dosyanızı değiştirip aşağıdaki satırı eklemeniz gerekir.

      version: '3.7'
      
      services:
        gateway:
            ports:
             - "127.0.0.1:${SHELLHUB_HTTP_PORT}:80"

      Nginx’i ters proxy için yapılandırırken aşağıdaki blokları eklemeyi unutmayın:

      location / {
           proxy_pass http://127.0.0.1:<SHELLHUB_HTTP_PORT>;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_read_timeout 86400;
           proxy_set_header Host $host;
      }
      
      location /ws/ {
           proxy_pass http://127.0.0.1:<SHELLHUB_HTTP_PORT>;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_read_timeout 86400;
      }
      
      location /ssh/ {
           proxy_pass http://127.0.0.1:<SHELLHUB_HTTP_PORT>;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_read_timeout 86400;
       }

      B. MongoDB kalıcı birimini kurun

      Varsayılan olarak depolama, dosyaların Docker’ın dahili birimine yazılmasıyla gerçekleşir. Üretim ortamında, ana sistem dosya sisteminde bir veri dizini oluşturmanız ve bunu MongoDB kapsayıcısıyla eşlemeniz önemle tavsiye edilir.

      Dizini oluşturun:

      sudo mkdir -p /data/mongo
      sudo chmod 775 /data/mongo

      Şimdi docker-compose.yml dosyanızı değiştirin

        mongo:
          image: mongo:4.4.8
          restart: unless-stopped
          healthcheck:
            test: "test $$(echo \"rs.initiate({ _id: 'rs', members: [ { _id: 0, host: 'mongo:27017' } ] }).ok || rs.status().ok\" | mongo --quiet) -eq 1"
            interval: 30s
            start_period: 10s
          command: ["--replSet", "rs", "--bind_ip_all"]
          networks:
            - shellhub
          volumes:
            - /data/mongo:/data/db

      Değişiklikler yapıldıktan sonra kapları şu komutla başlatabilirsiniz:

      make start

      Adım 3 – ShellHub Web Kullanıcı Arayüzüne erişin

      Yapılan dağıtıma bağlı olarak IP adresinizi veya alan adınızı kullanarak ShellHub Web’e HTTP veya HTTPS üzerinden erişebilirsiniz.

      Giriş yapabilmek için yönetici kullanıcı adı ve şifre oluşturmanız gerekmektedir. Bu, şu komutu çalıştırarak yapılabilir:

      $ ./bin/add-user <username> <password> <email>

      Değerleri doğru şekilde değiştirmeyi unutmayın. Örneğin:

      $ ./bin/add-user admin StrongPassword [email protected]
      User added!
      name: admin
      username: admin
      email: [email protected]

      Kullanıcı şu komutla silinebilir:

      $ ./bin/del-user <username>

      Ayrıca şifreyi düzenleyebilir/sıfırlayabilirsiniz:

      $ ./bin/reset-user-password <username> <password>

      Şimdi Web’de oturum açmak için oluşturulan kullanıcı kimlik bilgilerini kullanın.

      Kimlik doğrulaması yapıldıktan sonra aşağıdaki kontrol panelini göreceksiniz.

      Şimdi bir namespace ekleyin. Bu, gösterildiği gibi web aracılığıyla yapılabilir.

      Bunu komut satırından da yapabilirsiniz:

      $ ./bin/add-namespace <namespace> <owner>

      Değerleri değiştirin, örneğin:

      $ ./bin/add-namespace test admin
      Namespace added: test
      Owner: 63736b67de1792158ce86436
      Tenant ID: d2961764-ea74-4aff-8683-cefed4f45b83

      Ad alanını silmek için şu komutu kullanın:

      ./bin/del-namespace <namespace>

      Ad alanına bir kullanıcı eklemek için:

      ./bin/add-user-namespace <username> <namespace>

      Kullanıcıyı ad alanından silmek için:

      ./bin/del-user-namespace <username> <namespace>

      Adım 4 – ShellHub kullanarak Cihazları Yönetme

      Kurulum yapıldıktan sonra altyapınıza çeşitli cihazlar ekleyip bağlanabilirsiniz. Bir cihaz eklemek için namspace seçin ve cihazlar sekmesine gidin.

      Docker’ın yüklü olduğu ve çalıştığı uzak sunucuan birinde verilen komutu yürütün.

      ShellHub aracısı cihaza yüklendikten sonra, bildirimlere tıklayarak veya Devices -> Pending altında bunu kabul etmeniz gerekir.

      Kabul ettiğinizde cihaz gösterildiği gibi görünecektir.

      Cihazlara Bağlanma

      Cihazlar ShellHub’a eklendikten sonra iki yöntemi kullanarak cihazlara bağlanabilirsiniz. İlk ve en kolay yöntem web üzerindendir. Devices sekmesine gidin ve bağlanılacak cihazı seçin:

      Bağlandıktan sonra komutları tıpkı diğer SSH oturumlarında yaptığınız gibi yürütebilirsiniz.

      Başka bir yöntem SSH istemcisini kullanmaktır. Desteklenen SSH istemcisi sürüm 2.0 ve üzeridir. Bu, aşağıdaki komut kullanılarak yapılabilir:

      ssh <USER>@<SSHID> -<SSH_PORT>

      The SSHID is obtained from the web. To make this way niftier, you can to connect to the added devices using public keys(no password required). First, create a public key on the host machine:

      $ ssh-keygen -q -N ""
      Enter file in which to save the key (/root/.ssh/id_rsa): 

      Oluşturulan anahtarı görüntüleyin:

      cat ~/.ssh/id_rsa.pub

      Artık ShellHub webinde, Public Keys -> Add Public Key seçeneğine giderek belirli/tüm makinelere bağlanmak için kullanılabilecek bir Anahtar oluşturun.

      Genel anahtarı sağlayın ve anahtarı oluşturun.

      Artık oluşturulan anahtarı kullanarak ana bilgisayar sistemindeki herhangi bir cihaza şu komutla bağlanabilirsiniz:

      ssh <USER>@<SSHID> -<SSH_PORT>

      Bu durumda ShellHub 2222 numaralı bağlantı noktasında çalıştığından bağlantı noktasını ben sağlayacağım.

      Adım 5 – ShellHub Örneğini Yönetmek

      ShellHub kapsayıcıları sistem önyüklemesinde otomatik olarak başlar. Yalnızca 22 ve 80 numaralı bağlantı noktasında başka hizmetlerin etkinleştirildiği durumlarda başarısız olabilirler.

      Kapsayıcıları daha yeni sürümlere yükseltmek için aşağıdaki adımları kullanın.

      Öncelikle ShellHub proje dizinine gidin:

      cd shellhub

      Örneği durdurun:

      make stop

      En son değişiklikleri Fetech:

      git remote update origin

      En son sürümleri inceleyin:

      git checkout v0.10.3

      Şimdi örneği başlatın:

      make start

      Yazının orijinalini buradan okuyabilirsiniz.