Merhaba,
Yakın zamanda elime geçen bir case’de istenen aşamalardan birisi, dockerize edilmiş bir sftp sunucusunun kurulması ve High Availability mimarisine göre AWS ortamında deploy edilmesiydi. Bu yazıda sunucuda yaptığım ayarların tamamını anlatmayacağım, sadece hızlı bir şekilde sftp sunucusunun Dockerfile üzerinden nasıl hazır build edileceğini ve olası troubleshooting eylemlerinden bahsedeceğim.
Dockerfile’ın oluşturulması
Aşağıdaki yapıyı olduğu gibi kopyalayabilirsiniz.
FROM ubuntu:16.04 MAINTAINER deniz
RUN apt-get -y install openssh-server
RUN rm -f /etc/ssh/sshd_config
COPY sshd_config /etc/ssh/sshd_config
RUN service ssh restart
RUN echo "root:1" | chpasswd
Mevcut imajdaki sshdconfig dosyasında gerekli değişiklikler yine Dockerfile üzerinden sed vb. komutlarla da yapılabilir fakat daha pratik olması açısından kendi makinem üzerinde düzenlediğim sshdconfig dosyasını mevcuttakini silerek yerine kopyaladım.
Son satırda Docker imajındaki root kullanıcısının parolasını “1” olarak belirledim, burayı kendinize göre değiştirebilirsiniz.
Ssh ayarlarında yaptığım kilit değişiklikler, publickey authentication kullanmak yerine password authentication kullanmak ve root kullanıcısının erişimine izin vermek oldu. Tabi ki best practice olarak root erişiminin verilmemesi ve anahtar çifti kullanılması güvenlik açısından önemli ayrıntılar ama bu örnekte o konulara girmiyorum. sshd_config dosyasını ve Dockerfile’ı aynı dizin içerisine aldıktan sonra:
docker build -t sftp_server .
komutunu giriyoruz ve imajımız oluşturuluyor. Oluşturduğumuz imajı çalıştırıyoruz:
docker run -t -i --name sftp sftp_server
Dilerseniz burada boştaki bir portu kullanarak ssh için onu kullanabilir veya client’tan sftp sunucusuna bağlantı gerçekleştirirken port forwarding yapabilirsiniz.
Container ID’sini “docker ps -lq” komutu ile aldıktan sonra:
docker inspect container_ID | grep IPAddress | cut -d '"' -f 4 | uniq
komutuyla çalıştırdığımız container’ın IP adresini alıyoruz ve “sftp root@ip” ile sftp sunucusuna bağlantımızı gerçekleştiriyoruz.
Olası problemler
publickey auth hatası alıyorsanız sshd_config dosyasında
#PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
parametrelerinin comment modunda veya argümanlarının “no” olduğundan emin olun.
root kullanıcısının parolasını doğru girmenize rağmen giriş yapamıyorsanız:
PermitRootLogin yes
parametresinin açık ve “yes” olarak set edildiğinden emin olun.
Çeşitli bağlantı problemleri yaşıyorsanız, iptables, SELinux veya firewalld servislerinde kısıtlama olup olmadığını kontrol edin.
Halen problem yaşıyorsanız “Better Call Deniz”:
denizparlak@protonmail.ch
İyi çalışmalar.