Links

Sunucu Yönetimi

Uzak sunucu (server) yönetimi, kurulum, yapılandırma ve ssh ile şifresiz bağlanma işlemleri

💻 Sunucu Kiralama

  • 🔗 DigitalOcean sitesi üzerinden hesap açıp GitHub veya Google ile bağlayabilirsin
  • 💳 Kredi kartı bilgilerini verip, 1$ çekim işlemine müsaade ederek sahte bir kullanıcı olmadığını doğrulamalısın
  • ⛅ Hesap kaydı tamamlandıktan sonra herhangi bir sunucu alman gerekmekte
  • 💵 GitHub Student Package alanından alınan Promo code kısmını, sunucu oluşturduktan sonra Billing alanından girmen gerekmekte
💁‍♂️ Türkiye içerisinde sunucu kiralamak için Natro sitesine göz atabilrisin

🔌 Sunucuya Bağlanma

  • ssh -l <username> <ip> veya ssh <user>:<IP> komutu ile sunucuya bağlanılır ve şifre girilir
  • Sunucuya bağlanma sırasında terminal oturumu açılmaktadır
  • Oturum kapandığında terminal de sonlanır, yani bağlantıdan çıkarsanız tüm işler sonlanır
  • Bunu engellemek için sudo apt install tmux komutu ile tmux aracını indirin (nohup uğraştırıcı 😢)
  • tmux ile terminal oturumu içerisinde yeni bir process başlatılmakta ve oturum kapansa da devam etmektedir
‍🧙‍♂ Detaylı bilgi için How to run a Python script in the cloud? yazısına bakınız

🔒 Sunucuya Şifresiz Bağlanma

✴️ Windows
🐧 Linux
ConnectServer.ps1
cd ~
$USER = Read-Host 'Username'
$IP = Read-Host 'IP adress'
$KEY_ID = Read-Host 'Key ID'
$KEY_PATH = ".ssh/${KEY_ID}_ecdsa"
ssh-keygen -t ecdsa -b 521 -f ${KEY_PATH}
# Windows için SSH servisini başlatma
Get-Service -Name ssh-agent | Set-Service -StartupType AutomaticDelayedStart
Start-Service ssh-agent
# SSH keyi sunucuya kopyalama ve yetkilendirme
ADDRESS=$USER@$IP
ssh-copy-id -i $KEY_PATH.pub $ADDRESS
# SSH copy çalışmaz ise alttakini deneyin
# $pub = (Get-Content ~/${KEY_PATH}.pub)
# ssh [email protected]$IP "mkdir -p ~/.ssh && echo $pub >> .ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
# SSH keyi yerel anahtarlara ekleme (eğer şifre istenirse anahtar eklenmeli)
ssh-add $KEY_PATH
# SSH ile adrese bağlanma
ssh $ADDRESS -A
create-ssh-connection.sh
#!/usr/bin/bash
read -p 'Username: ' USER
read -p 'IP adress: ' IP
read -p 'Key ID: : ' KEY_ID
# SSH key oluşturma
KEY_PATH="$HOME/.ssh/${KEY_ID}-ecdsa"
ssh-keygen -t ecdsa -b 521 -f ${KEY_PATH}
# SSH keyi sunucuya kopyalama ve yetkilendirme
ADDRESS=$USER@$IP
ssh-copy-id -i $KEY_PATH.pub $ADDRESS
# SSH keyi yerel anahtarlara ekleme (eğer şifre istenirse anahtar eklenmeli)
ssh-add $KEY_PATH
# SSH ile adrese bağlanma
ssh $ADDRESS -A
  1. 1.
    🧐 ssh ${USER}@${IP}komutu ile OpenSSH varlığını kontrol edil, tepki veriyorsa vardır
  2. 2.
    🔑 ssh-keygen -t ecdsa -b 521 -f ${KEY_PATH} komutu ile ssh anahtarı oluşturun
    • SSH, secure shell anlamına gelir ve uzaktan terminal yönetim protokoldür
    • SSH anahtarlarından pub uzantılı olan açık anahtardır ve sunucuya aktarılması gerekir
    • Diğer anahtar kapalı olandır ve paylaşılmaması gerekmektedir
  3. 3.
    ✴️ Bu adımlar sadece Windows kullanıcıları tarafından powershell üzerinden yapılmalıdır
    • 📢 Get-Service -Name ssh-agent | Set-Service -StartupType AutomaticDelayedStart komutu ile ssh servisini gecikmeli olarak otomatik başlatabilmek için yapılandırın
    • 👮‍♂️ Eğer servis otomatik başlatılmazsa her ssh bağlantısı için yeniden başlatmanız gerekir
    • ⚙️ Start-Service ssh-agent komutu ile ssh servisini başlatın
    • ssh-add ${KEY_PATH} komutu ile sshanahtarını keystores içerisine ekleyin
    • Kapalı anahtarınız keystores içerinde saklanır
    • Sunucu bağlantılarında bu anahtar deposu kullanılır
  4. 4.
    🚚 ssh ${USER}@${IP} "\ komutunu yazın ve ardından alttaki komutları girin
    • 📂mkdir -p ~/.ssh && \ ile sunucuda sshantahtarları dizini yoksa oluşturun
    • echo (Get-Content ${KEY_PATH}.pub) >> .ssh/authorized_keys && \ ile açık anahtarınızı sunucuda onaylı anahtar listesine ekleyin
    • 🐧echo \"cat ${KEY_PATH}.pub\" && \ komutu ile Linux işletim sistemini kullananlar açık anahtarı ekleyebilir
    • 👮‍♂️ chmod 700 ~/.ssh && \ komutu ile sshdizinini yetkilendirin
    • 👮‍♂️ chmod 600 ~/.ssh/authorized_keys" komutu ile anahtarların olduğu dosyaya okunabilmesi için izinleri verin
📢 Eğer sunucu sizden tekrardan şifre istiyor ise, 3. ve 4. adımları uyguladığınızdan emin olun

🖤 Windows Terminal ile Bağlanma

  • ⚙️ Terminal üzerinden resimdeki gibi sunuya bağlanmak için Windows Terminal ayarlarını açın
  • 🔨 Yapılandırma dosyasında profiles içerisindeki list alanına alttaki ayarları ekleyin
settings.json
{
"guid": "{4dc7203f-1c35-4058-8a46-1a2d4989fbe0}", // Eşsiz GUID değeri
"name": "Natro Host", // Sekme adı
"suppressApplicationTitle": true, // Tab ismini sabit yapar
"icon": "%USERPROFILE%/OneDrive/Pictures/Icons/Ico/terminal.ico", // Bu alana belirlediğiniz ikonu koyun
"commandline": "ssh [email protected]<IP>", // IP alanına ip adresinizi yazın
"hidden": false
}

✨ Sunucu Paketlerini Yenileme

  • Sunucuya bağlandıktan sonra yapılacak ilk iş yüklü olan paketleri güncellemek olmalıdır
  • sudo apt update ve sudo apt upgrade komutları ile paketlerini güncelleyebilirsin
  • Çok fazla paket güncellemelerinden sonra reboot komutu ile sistemi yeniden başlatmanız tavsiye edilir
  • Paket yükseltme işlemi sonrasında kullanılmayan veya eski paketleri temizlemek için sudo apt autoremove komutunu kullanın

🔏 Git için Şifre Saklama

  • 💁‍♂️ Her git işlemi için tekrardan giriş yapmak istemiyorsanız bu adım sizin için faydalı olacaktır
  • 📧 git config --global user.email "<email>" ile email adresinizi tanımlayın
  • 🤵 git config --global user.name "<username>" le kullanıcı adınızı tanımlayın
  • 💼 git config --global credential.helper 'cache --timeout=999999' komutu ile bilgilerinizi saklayın

🕐 Zaman Ayarı Yapma

  • NTP (network time protocol) ayarlarını yapmak için apt-get install ntp ntpdate komutu ile ntpdate paketini kurun
  • ntpdate time.ume.tubitak.gov.tr ile TÜBİTAK NTP sunucusuna bağlantı yapın
  • service ntp restart komutu ile yeniden başlatın
  • date komutu ile tarihi görüntüleyebilirsiniz
  • tzselect komutu ile zaman bölgesini seçenekler arasından de seçebiliriz
  • timedatectl set-timezone Europe/Istanbul komutu ile direkt olarak Istanbul zaman dilimini ayarlayabilriiz
sudo timedatectl set-timezone Europe/Istanbul
# Yukarıdaki komut hatalı olursa aşağıdakini deneyin
apt-get install ntp ntpdate
ntpdate time.ume.tubitak.gov.tr
service ntp restart
timedatectl set-timezone Europe/Istanbul
# date
‍🧙‍♂ Detaylı bilgi için Linux zaman sunucusu ayarlama alanına bakabilirsin.

⏳ tmux ile Uzun Süreli İşlemler

  • tmux komutu ile yeni bir terminal açtırın ve oraya komutunuzu yazın
  • ✲ Ctrl + B, D kısayolu ile ana terminalinize geçin
  • Artık oturumu kapatsanız bile tmux ile açılan terminaldeki işlemler devam etmektedir
  • tmux attach komutu ile son terminale bağlanabilirsin
  • Terminal işini sonlandırmak için ✲ Ctrl + B, : kısayoluna basıp kill-session komutunu yazın
‍🧙‍♂ Detaylı bilgi için Getting started with Tmux alanına bakabilirsin.

🐍 Python 3.9 Kurulumu

  • Sunucularda python3.6 default olarak olur ama pip ve venv kurulu olmaz
  • sudo apt install python3-pip ile pip kurulur
    • pip python paketlerinin indirilmesine yardımcı olan araçtır
  • sudo apt install python3-venv ile sanal ortam oluşturma aracı kurulur
    • venv sanal python ortamları oluşturarak sistemin python paketlerinin bozulmasını engeller
Python3.9 ve venv Kurulumu
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
apt install python3-venv python3.9 python3.9-venv
python3.9 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
📢 Python 3.9-venv kullanılması için python3-venv paketi gereklidir
‍🧙‍♂ Detaylı bilgi için Ubuntu 20.04/19.04: Install Python 3.9/3.8/3.7/3.6, Pip and Venv alanına bakabilirsin.