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.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.