পাসওয়ার্ড দিয়ে SSH লগইন করা হলো বাড়ির দরজায় তালা না দিয়ে চিরকুটে পাসওয়ার্ড লিখে রাখার মতো। Brute-force অ্যাটাক দিয়ে যেকোনো সময় হ্যাক হতে পারে। সমাধান: SSH Key।
প্রয়োজনীয় প্যাকেজ: openssh-server, openssh-client, fail2ban
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: বোনাস হার্ডেনিং টিপস
- UFW Firewall: শুধু দরকারি পোর্ট খুলুন।
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw enable
- 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+O, Enter, Ctrl+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:
ping 10.0.0.1চলে?ssh tolearn@10.0.0.1পাসওয়ার্ড দিয়ে ঢোকে?- সার্ভারে
sudo systemctl status sshactive? ls ~/.ssh/id_ed25519.pubফাইল আছে?- পোর্ট 22 নাকি অন্য কিছু?
sudo ss -tulpn | grep sshd
ed25519 vs rsa – কোনটা ব্যবহার করবেন?
| Key Type | কমান্ড | সাইজ | সিকিউরিটি | স্পিড | রেকমেন্ডেশন |
|---|---|---|---|---|---|
| ed25519 | ssh-keygen -t ed25519 | 256 bit | সবচেয়ে বেশি | সবচেয়ে ফাস্ট | 2026 এটাই বেস্ট |
| rsa | ssh-keygen -t rsa -b 4096 | 4096 bit | অনেক বেশি | স্লো | পুরনো সার্ভারের জন্য |
| ecdsa | ssh-keygen -t ecdsa | 256 bit | ভালো | ফাস্ট | এখন আর ইউজ হয় না |
| dsa | ssh-keygen -t dsa | 1024 bit | দুর্বল | স্লো | ব্যবহার নিষেধ |
1. ed25519 কেন বেস্ট?
- ছোট সাইজ: Key মাত্র 68 ক্যারেক্টার, RSA 4096-bit হয় 800+ ক্যারেক্টার
- ফাস্ট: লগইন, সাইন করতে সময় কম লাগে
- সিকিউর: 256-bit ed25519 = 3072-bit RSA এর সমান সিকিউরিটি
- 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 পাবেন। ওটা খুললে cat, ls, ssh-keygen, ssh-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/Mac | Windows CMD | Windows PowerShell |
|---|---|---|---|
| ফাইল দেখা | cat file.txt | type file.txt | Get-Content file.txt বা type file.txt |
| ফোল্ডার লিস্ট | ls -la | dir | ls বা dir |
| হোম ডিরেক্টরি | ~ বা \$HOME | %USERPROFILE% | \$HOME বা \$env:USERPROFILE |
সারসংক্ষেপ: cat Error মানে আপনি Windows এ। type %USERPROFILE%\.ssh\id_ed25519.pub দিয়ে key দেখুন, তারপর ম্যানুয়ালি সার্ভারে পেস্ট করুন।
