লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং

Blog / লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং

লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং Detail Page

লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং

SSH Key-Based Authentication ও সার্ভার হার্ডেনিং

পাসওয়ার্ড দিয়ে SSH লগইন করা হলো বাড়ির দরজায় তালা না দিয়ে চিরকুটে পাসওয়ার্ড লিখে রাখার মতো। Brute-force অ্যাটাক দিয়ে যেকোনো সময় হ্যাক হতে পারে। সমাধান: SSH Key।

প্রয়োজনীয় প্যাকেজ: openssh-serveropenssh-clientfail2ban

Step 1: SSH Key Pair তৈরি করা – ssh-keygen

আপনার লোকাল পিসি/ল্যাপটপ থেকে রান করুন, সার্ভারে না:

Bash

ssh-keygen -t ed25519 -C "tolearn@my-laptop"

ব্যাখ্যা:

  • -t ed25519: সবচেয়ে সিকিউর ও আধুনিক অ্যালগরিদম। RSA এর চেয়ে ভালো
  • -C: কমেন্ট, কোন মেশিনের কী সেটা বোঝার জন্য

এন্টার চাপলে এটি ২টি ফাইল তৈরি করবে:

/home/your-user/.ssh/
├── id_ed25519 # Private Key: এটা TOP SECRET, কাউকে দেবেন না
└── id_ed25519.pub # Public Key: এটা সার্ভারে দিতে হবে

Special Instruction: Passphrase চাইলে খালি রাখতে পারেন, তবে Passphrase দিলে আরও সিকিউর।

Step 2: সার্ভারে Public Key কপি করা – ssh-copy-id

এটাই সবচেয়ে সহজ উপায়। tolearn ইউজার দিয়ে সার্ভারে লগইন করার জন্য:

Bash

ssh-copy-id tolearn@10.0.0.1

সার্ভারের পাসওয়ার্ড ১ বার চাইবে। এরপর থেকে আর লাগবে না।

Manual পদ্ধতি যদি ssh-copy-id না থাকে:

Bash

cat ~/.ssh/id_ed25519.pub | ssh tolearn@10.0.0.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

সার্ভারে যে ডিরেক্টরি ও ফাইল তৈরি হবে:

/home/tolearn/.ssh/
└── authorized_keys # পারমিশন 600 হতে হবে

চেক করুন: chmod 700 ~/.ssh এবং chmod 600 ~/.ssh/authorized_keys

কেন এবং কীভাবে কাজ করে:

1. সিনারিও:

আপনার ল্যাপটপ = 192.168.1.100 <– এখান থেকে কমান্ড দেবেন
সার্ভার VM-Alpha = 10.0.0.1 <– এখানে key যাবে

2. স্টেপ-বাই-স্টেপ:

Step-A: আপনার ল্যাপটপ/পিসিতে Key বানান

আপনার উইন্ডোজ/লিনাক্স/ম্যাক ল্যাপটপের টার্মিনালে

ssh-keygen -t ed25519 -C "my-laptop"

এটা ~/.ssh/id_ed25519.pub ফাইল বানাবে আপনার ল্যাপটপে।

Step-B: ল্যাপটপ থেকেই Key সার্ভারে পাঠান

আবার আপনার ল্যাপটপ থেকেই রান করুন

ssh-copy-id tolearn@10.0.0.1

এটা প্রথমবার tolearn ইউজারের পাসওয়ার্ড চাইবে। দেওয়ার পর আপনার ল্যাপটপের id_ed25519.pub ফাইলটি সার্ভারের /home/tolearn/.ssh/authorized_keys ফাইলে কপি হয়ে যাবে।

Step-C: টেস্ট করুন – ল্যাপটপ থেকে

Bash

ssh tolearn@10.0.0.1

এবার আর পাসওয়ার্ড চাইবে না।

গুরুত্বপূর্ণ ৩টি পয়েন্ট:

প্রশ্নউত্তর
কমান্ড কোথায় রান করব?আপনার লোকাল পিসি/ল্যাপটপে। যেখান থেকে সার্ভারে লগইন করতে চান।
সার্ভারে রান করলে কী হবে?এরর দেবে। কারণ সার্ভারের পাবলিক কী আপনার ল্যাপটপে পাঠানোর দরকার নেই।
Windows হলে কী করব?Windows 10/11 এ PowerShell বা Git Bash ওপেন করে একই কমান্ড। ssh-keygen ও ssh-copy-id এখন বিল্ট-ইন থাকে।

সহজ মনে রাখার ট্রিক:
ssh-copy-id = “আমার ID/চাবি কপি করে সার্ভারে দাও”। তাই চাবি যার কাছে আছে, কমান্ড সে দেবে। চাবি আপনার ল্যাপটপে আছে, তাই ল্যাপটপ থেকে কমান্ড দেবেন।

Step 3: টেস্ট করুন: পাসওয়ার্ড ছাড়া লগইন

Bash

ssh tolearn@10.0.0.1

ব্যস, পাসওয়ার্ড ছাড়াই লগইন হয়ে যাবে!

Step 4: সার্ভার হার্ডেনিং – /etc/ssh/sshd_config

সতর্কতা: এই ফাইল এডিট করার আগে অবশ্যই আরেকটি SSH সেশন খোলা রাখুন। ভুল হলে লকআউট হয়ে যাবেন।

Bash

sudo nano /etc/ssh/sshd_config

এই ৫টি লাইন মাস্ট চেঞ্জ করুন:

Port 2222 # 1. ডিফল্ট 22 পোর্ট চেঞ্জ করুন
PermitRootLogin no # 2. root দিয়ে ডিরেক্ট লগইন বন্ধ
PasswordAuthentication no # 3. পাসওয়ার্ড লগইন সম্পূর্ণ বন্ধ
PubkeyAuthentication yes # 4. শুধু Key দিয়ে লগইন Allow
AllowUsers tolearn developer # 5. শুধু এই ইউজাররা লগইন করতে পারবে

সেভ করে SSH রিস্টার্ট দিন:

Bash

sudo systemctl restart sshd

নতুন পোর্ট দিয়ে লগইন:

Bash

ssh -p 2222 tolearn@10.0.0.1

Step 5: Fail2Ban দিয়ে Brute-Force অ্যাটাক বন্ধ করা

কেউ বারবার ভুল পাসওয়ার্ড দিলে তার IP অটো ব্যান হয়ে যাবে।

১. ইনস্টল:

Bash

sudo apt update && sudo apt install fail2ban -y

২. কনফিগারেশন কপি করুন:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

৩. [sshd] সেকশন এডিট করুন:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 1h
findtime = 10m

ব্যাখ্যা: 10 মিনিটে 3 বার ভুল করলে 1 ঘন্টার জন্য ব্যান।

৪. রিস্টার্ট ও স্ট্যাটাস চেক:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Step 6: বোনাস হার্ডেনিং টিপস

  1. UFW Firewall: শুধু দরকারি পোর্ট খুলুন।

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw enable

  1. Automatic Updates: সিকিউরিটি প্যাচ অটো ইনস্টল।

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades


3. সিরিজের পরবর্তী পর্ব

Part-4: লিনাক্স ওয়েব সার্ভার সেটআপ – Nginx/Apache, PHP, MySQL – tolearn ইউজার দিয়ে একটি সম্পূর্ণ ওয়েবসাইট হোস্ট করা শিখব।

ssh-copy-id tolearn@10.0.0.1 কাজ না করার ৭টা কমন কারণ + সমাধান দিচ্ছি। ৯০% কেস এগুলোর মধ্যেই পড়ে।

Troubleshooting: ssh-copy-id কাজ না করলে কী করবেন

1. প্রথমে বেসিক চেক: ping ও ssh চলে কিনা

আপনার ল্যাপটপ থেকে:

Bash

ping 10.0.0.1
ssh tolearn@10.0.0.1

যদি ssh পাসওয়ার্ড দিয়ে লগইন না হয়, তাহলে ssh-copy-id ও হবে না। আগে ssh ঠিক করুন।

Error: Connection refused → সার্ভারে SSH ইনস্টল নেই।
সমাধান – সার্ভারে লগইন করে:

Bash

sudo apt update && sudo apt install openssh-server -y
sudo systemctl enable ssh --now
sudo systemctl status ssh

2. Error: Permission denied (publickey,password)

কারণ: সার্ভারের /etc/ssh/sshd_config এ PasswordAuthentication no করা আছে।
সমাধান: সাময়িকভাবে পাসওয়ার্ড লগইন চালু করুন।

সার্ভারে:

Bash

sudo nano /etc/ssh/sshd_config

এই লাইন খুঁজে চেঞ্জ করুন:

Bash

PasswordAuthentication yes

সেভ করে রিস্টার্ট:

Bash

sudo systemctl restart sshd

এখন ল্যাপটপ থেকে আবার ssh-copy-id দিন। হয়ে গেলে PasswordAuthentication no করে দিন।

3. Error: ssh: connect to host 10.0.0.1 port 22: Connection timed out

কারণ ১: IP ভুল অথবা সার্ভার বন্ধ
ip a দিয়ে সার্ভারের IP চেক করুন।

কারণ ২: Firewall ব্লক করছে
সার্ভারে:

Bash

sudo ufw allow 22/tcp
sudo ufw reload

কারণ ৩: পোর্ট 22 না, অন্য পোর্ট
আপনি যদি Part-3 অনুযায়ী পোর্ট 2222 করে থাকেন:

Bash

ssh-copy-id -p 2222 tolearn@10.0.0.1

4. Error: /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: .../.ssh/id_ed25519.pub does not exist

কারণ: আপনার ল্যাপটপে key বানানোই হয়নি।
সমাধান – ল্যাপটপে:

Bash

ssh-keygen -t ed25519 -C "my-laptop"

এন্টার চাপতে থাকুন। তারপর আবার ssh-copy-id দিন।

5. Error: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

কারণ: আপনি সার্ভার রি-ইনস্টল করেছেন, তাই fingerprint মিলছে না।
সমাধান – ল্যাপটপে:

Bash

ssh-keygen -R 10.0.0.1

এটা পুরনো key মুছে দেবে। তারপর আবার ট্রাই করুন।

6. Windows এ ssh-copy-id command not found

সমাধান ১: PowerShell এ ম্যানুয়ালি করুন

powershell

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh tolearn@10.0.0.1 "cat >> .ssh/authorized_keys"

সমাধান ২: Git Bash ব্যবহার করুন – Git Bash এ ssh-copy-id কাজ করে।

7. ১০০% কাজ করবে এমন ম্যানুয়াল পদ্ধতি

যদি ssh-copy-id কোনোভাবেই কাজ না করে:

Step-1: ল্যাপটপে public key দেখুন

Bash

cat ~/.ssh/id_ed25519.pub

পুরো আউটপুট কপি করুন। ssh-ed25519 AAAAC3... my-laptop এর মতো হবে।

Step-2: সার্ভারে পাসওয়ার্ড দিয়ে লগইন করুন

Bash

ssh tolearn@10.0.0.1

Step-3: সার্ভারে key পেস্ট করুন

Bash

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

কপি করা key টা পেস্ট করে Ctrl+OEnterCtrl+X দিয়ে সেভ করুন।

Step-4: পারমিশন ঠিক করুন – এটা মাস্ট

Bash

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Step-5: ল্যাপটপ থেকে টেস্ট

Bash

exit  # সার্ভার থেকে বের হনssh tolearn@10.0.0.1

এখন পাসওয়ার্ড ছাড়া লগইন হবে।


Quick Debug Checklist:

  1. ping 10.0.0.1 চলে?
  2. ssh tolearn@10.0.0.1 পাসওয়ার্ড দিয়ে ঢোকে?
  3. সার্ভারে sudo systemctl status ssh active?
  4. ls ~/.ssh/id_ed25519.pub ফাইল আছে?
  5. পোর্ট 22 নাকি অন্য কিছু? sudo ss -tulpn | grep sshd

ed25519 vs rsa – কোনটা ব্যবহার করবেন?

Key Typeকমান্ডসাইজসিকিউরিটিস্পিডরেকমেন্ডেশন
ed25519ssh-keygen -t ed25519256 bitসবচেয়ে বেশিসবচেয়ে ফাস্ট2026 এটাই বেস্ট
rsassh-keygen -t rsa -b 40964096 bitঅনেক বেশিস্লোপুরনো সার্ভারের জন্য
ecdsassh-keygen -t ecdsa256 bitভালোফাস্টএখন আর ইউজ হয় না
dsassh-keygen -t dsa1024 bitদুর্বলস্লোব্যবহার নিষেধ

1. ed25519 কেন বেস্ট?

  1. ছোট সাইজ: Key মাত্র 68 ক্যারেক্টার, RSA 4096-bit হয় 800+ ক্যারেক্টার
  2. ফাস্ট: লগইন, সাইন করতে সময় কম লাগে
  3. সিকিউর: 256-bit ed25519 = 3072-bit RSA এর সমান সিকিউরিটি
  4. Modern: OpenSSH 6.5+ এ ডিফল্ট। এখন সব সার্ভার সাপোর্ট করে

2. কখন rsa ব্যবহার করবেন?

যদি আপনার সার্ভার খুব পুরনো হয় – যেমন Ubuntu 14.04, CentOS 6। সেগুলো ed25519 সাপোর্ট করে না।

RSA Key বানানোর কমান্ড:

Bash

ssh-keygen -t rsa -b 4096 -C "my-laptop"

-b 4096 মাস্ট দেবেন। 2048 এখন দুর্বল।

3. ssh-copy-id সব টাইপেই কাজ করে

আপনি যে টাইপের key ই বানান, কমান্ড একই:

Bash

ssh-copy-id tolearn@10.0.0.1

এটা অটো ~/.ssh/id_ed25519.pub অথবা ~/.ssh/id_rsa.pub যেটা পাবে সেটা কপি করবে।

স্পেসিফিক ফাইল দিতে চাইলে:

Bash

ssh-copy-id -i ~/.ssh/id_rsa.pub tolearn@10.0.0.1

4. চেক করুন সার্ভার কোনটা সাপোর্ট করে

সার্ভারে লগইন করে:

Bash

ssh -Q key

আউটপুটে ssh-ed25519 থাকলে → ed25519 সাপোর্টেড।

সারসংক্ষেপ: আপনি কোনটা ইউজ করবেন?

আপনার সার্ভার যদি 2020 এর পরের হয় → ed25519 ইউজ করুন:

Bash

ssh-keygen -t ed25519 -C "tolearn-laptop"

যদি “Key type not supported” Error দেয় → rsa ইউজ করুন:

Bash

ssh-keygen -t rsa -b 4096 -C "tolearn-laptop"

ed25519 ফিক্সড না, কিন্তু 2026 এ এটাই ইন্ডাস্ট্রি স্ট্যান্ডার্ড। dsa বাদে বাকি সব চলবে।


cat is not recognized Error মানে আপনি Windows এর Command Prompt বা PowerShell এ আছেন। লিনাক্সের কমান্ড Windows এ সরাসরি চলে না।

সমাধান: আপনি কোন OS এ আছেন তার উপর নির্ভর করে

Case 1: আপনার ল্যাপটপ Windows, সার্ভার Linux

এটাই সবচেয়ে কমন কেস। ssh-keygen আর ssh-copy-id আপনার Windows ল্যাপটপে রান করবেন।

Windows এ cat এর বদলে type ব্যবহার করুন:

১. Public Key দেখতে:

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub

ব্যাখ্যা: %USERPROFILE% = C:\Users\YourName। এটা cat ~/.ssh/id_ed25519.pub এর Windows ভার্সন।

২. ssh-copy-id Windows এ নেই। তাই ম্যানুয়ালি করুন:

Step-A: Key কপি করুন

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub

পুরো ssh-ed25519 AAAAC3... user@DESKTOP লাইনটা কপি করুন।

Step-B: সার্ভারে লগইন করুন

powershell

ssh tolearn@10.0.0.1

Step-C: সার্ভারের ভিতর পেস্ট করুন

Bash

mkdir -p ~/.sshecho "ssh-ed25519 AAAAC3... user@DESKTOP" >> ~/.ssh/authorized_keyschmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keysexit

echo "..." এর ভিতর আপনার কপি করা key পেস্ট করবেন।

Step-D: টেস্ট করুন – Windows থেকে

powershell

ssh tolearn@10.0.0.1

এখন পাসওয়ার্ড ছাড়া ঢুকবে।

Case 2: Windows এ লিনাক্স কমান্ড চালাতে চান

Option 1: Git Bash ব্যবহার করুন
Git ইনস্টল করলে Git Bash পাবেন। ওটা খুললে catlsssh-keygenssh-copy-id সব চলবে। লিনাক্সের মতোই।

Option 2: PowerShell এ OpenSSH
Windows 10/11 এ বিল্ট-ইন আছে। PowerShell ওপেন করে ssh-keygen দিন। cat এর বদলে Get-Content বা type ইউজ করুন।

Option 3: WSL ব্যবহার করুন
wsl --install দিয়ে Ubuntu ইনস্টল করলে পুরো লিনাক্স টার্মিনাল পাবেন।

কুইক চিটশিট: Windows vs Linux কমান্ড

কাজLinux/MacWindows CMDWindows PowerShell
ফাইল দেখাcat file.txttype file.txtGet-Content file.txt বা type file.txt
ফোল্ডার লিস্টls -ladirls বা dir
হোম ডিরেক্টরি~ বা \$HOME%USERPROFILE%\$HOME বা \$env:USERPROFILE

সারসংক্ষেপ: cat Error মানে আপনি Windows এ। type %USERPROFILE%\.ssh\id_ed25519.pub দিয়ে key দেখুন, তারপর ম্যানুয়ালি সার্ভারে পেস্ট করুন।

Leave a Reply

Welcome to To Learn Team, a dynamic educational platform where knowledge meets collaboration. Designed for students, educators, and lifelong learners, we provide a curated hub of interactive study groups, expert tutorials, and comprehensive resources across diverse subjects. We believe that learning is most powerful when done together. By uniting a global community, we transform curiosity into confidence and individual aspirations into shared achievements. Join the To Learn Team today—elevate your intellect and grow with us!

Get In Touch

Address

Dhaka, Bangladesh

Email

abir43tee@gmail.com

Phone

+880 1711427737

Quick Search