SSH
SSH (Secure Shell) হলো remote server-এ securely connect করার protocol। তুমি যখন SSH দিয়ে connect করো, তখন তোমার সব data encrypted হয়ে যায় — কেউ network-এ sniff করলেও শুধু gibberish দেখবে। Cybersecurity-তে SSH বোঝা অত্যন্ত গুরুত্বপূর্ণ।
How SSH Works
SSH একটা client-server model follow করে। তোমার নিজের computer হলো client, আর যে computer-এ তুমি connect করতে চাও সেটা হলো server।
তোমার computer (LOCAL / Client)
│
│ Encrypted SSH connection (port 22)
│
Remote server (SERVER)
│
└── তুমি এখন server-এর terminal-এ কাজ করছConnection-এর সময় দুইটা জিনিস ঘটে:
- Server authentication — তুমি নিশ্চিত হও যে তুমি সঠিক server-এ connect করছ (MITM attack থেকে রক্ষা)
- User authentication — server নিশ্চিত হয় যে তুমি authorized user
দুইভাবে authenticate করা যায়:
| Method | কীভাবে কাজ করে | কোনটা ভালো |
|---|---|---|
| Password | Username + password দাও | সহজ কিন্তু brute force-এর ঝুঁকি আছে |
| SSH Key | Cryptographic key pair ব্যবহার করে | Recommended — অনেক বেশি secure |
Connecting
# Basic connection
ssh username@server-ip
# নির্দিষ্ট port দিয়ে (default 22)
ssh -p 2222 username@server-ip
# নির্দিষ্ট key file দিয়ে
ssh -i ~/.ssh/id_rsa username@server-ip
# Example
ssh omar@192.168.1.10
ssh ubuntu@ec2-54-123-456.compute.amazonaws.comপ্রথমবার connect করলে কী হয়?
প্রথমবার কোনো server-এ connect করলে এই message আসবে:
The authenticity of host '192.168.1.10' can't be established.
ED25519 key fingerprint is SHA256:abc123xyz...
Are you sure you want to continue connecting (yes/no)? yesএই message টা আসে কারণ SSH নিশ্চিত হতে চায় যে তুমি সঠিক server-এ connect করছ — imposter server নয়। yes type করলে server-এর fingerprint তোমার local machine-এর ~/.ssh/known_hosts file-এ save হয়। পরেরবার connect করলে এই warning আর আসবে না।
যদি কোনো server-এ আগে connect করেছিলে এবং পরে হঠাৎ এই warning আসে — সেটা suspicious। এর মানে হতে পারে server বদলে গেছে অথবা কেউ MITM attack করছে।
SSH Keys
Password দিয়ে login করলে কেউ সেই password brute force করতে পারে। SSH key-এ এই সমস্যা নেই কারণ এটা cryptographic — randomly generated, অনেক long, এবং mathematically linked।
How Keys Work
SSH key pair-এ দুটো file থাকে:
| File | নাম | কোথায় যায় | কী করে |
|---|---|---|---|
id_ed25519 | Private key | শুধু তোমার LOCAL machine-এ | এটাই তোমার identity — কাউকে দেবে না |
id_ed25519.pub | Public key | VPS server-এ, অথবা GitHub Settings-এ | Server বা GitHub এটা দিয়ে তোমাকে verify করে |
সহজ analogy: Public key হলো তালা, Private key হলো চাবি। Server-এ তালা লাগানো থাকে, চাবি তোমার কাছে।
SSH Key Setup
তুমি কোথায় connect করছ তার উপর নির্ভর করে workflow আলাদা। তোমার situation অনুযায়ী tab বেছে নাও।
AWS / Cloud
AWS বা অন্য cloud provider (GCP, Lightsail) instance তৈরির সময় নিজেই একটি .pem file তৈরি করে দেয় — এটাই তোমার Private Key। Public key AWS সার্ভারে আগে থেকেই configured থাকে। তোমাকে শুধু file-টা সঠিক জায়গায় রেখে permission দিতে হবে।
Step 1: Download the Key
AWS console থেকে instance তৈরির সময় .pem file download করো। এই file download করার সুযোগ মাত্র একবার — পরে আর পাওয়া যায় না।
Step 2: Move and Set Permission
# ~/.ssh/ ফোল্ডারে move করো
mv ~/Downloads/my-server-key.pem ~/.ssh/
# Permission ঠিক করো — এটা না করলে SSH connect করতে দেবে না
chmod 400 ~/.ssh/my-server-key.pemStep 3: Connect
# -i দিয়ে .pem file চিনিয়ে দাও
ssh -i ~/.ssh/my-server-key.pem ubuntu@your-server-ipঅথবা ~/.ssh/config-এ shortcut বানিয়ে নাও:
Host my-aws-server
HostName your-server-ip
User ubuntu
IdentityFile ~/.ssh/my-server-key.pemএরপর শুধু ssh my-aws-server লিখলেই হবে।
Multiple Keys
সহজ চাক্ষুষ উদাহরণ: তোমার বাসার চাবি আর অফিসের চাবি কি একই? নিশ্চয়ই না। একইভাবে ব্যক্তিগত কাজ (GitHub) আর প্রফেশনাল বা ল্যাব কাজের (VPS) জন্য আলাদা আলাদা কি ব্যবহার করা সিকিউর। একে বলে Context Isolation।
Custom Names
ডিফল্ট নাম (id_ed25519) বদলে -f (file) ফ্ল্যাগ দিয়ে কাস্টম নাম দেওয়া যায়। সেই সাথে -C দিয়ে একটি কমেন্ট বা লেবেল (যেমন: ইমেইল) যোগ করা বেস্ট প্র্যাকটিস, যাতে পরে চাবিটি চিনতে সুবিধা হয়।
# GitHub-এর জন্য
ssh-keygen -t ed25519 -f ~/.ssh/id_github_personal -C "your-github-email@example.com"
# অফিসের VPS-এর জন্য
ssh-keygen -t ed25519 -f ~/.ssh/id_vps_office -C "any-email@example.com"IdentityFile Link
কাস্টম নাম দিলে সার্ভার একা চাবি খুঁজে পায় না। তাই ~/.ssh/config ফাইলে চাবিটি চিনিয়ে দিতে হয়।
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github_personal
Host office-server
HostName 1.2.3.4
User root
IdentityFile ~/.ssh/id_vps_officeGitHub একই পাবলিক কি (Public Key) একাধিক অ্যাকাউন্টে ব্যবহার করতে দেয় না। তোমার যদি ২টা গিটহাব অ্যাকাউন্ট থাকে, তবে ২টা আলাদা কি জেনারেট করা বাধ্যতামূলক।
Multiple Servers
বারবার IP এবং username টাইপ করা ক্লান্তিকর। Config file দিয়ে তুমি সব সার্ভারের একটি “Address Book” বানিয়ে ফেলতে পারো।
এই file শুধু LOCAL machine-এ থাকে। তুমি যত খুশি Host entry যোগ করতে পারো।
nano ~/.ssh/config# ১. নিজের VPS
Host myserver
HostName 192.168.1.10
User omar
IdentityFile ~/.ssh/id_ed25519
# ২. AWS Production Server (PEM key)
Host aws-prod
HostName ec2-54-123-456.compute.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/aws-key.pem
# ৩. Lab Server (Custom Port)
Host homelab
HostName 10.0.0.50
User admin
Port 2222প্রতিটি ফিচারের কাজ:
- Host: শর্টকাট নাম (যেমন:
ssh homelab)। - HostName: সার্ভারের একদম সঠিক IP বা domain।
- User: রিমোট সার্ভারের ইউজারনেম।
- IdentityFile: ঐ সার্ভারের নির্দিষ্ট Private key-এর পথ।
- Port: সার্ভার যদি standard 22 বাদে অন্য কোনো পোর্টে চলে।
এখন তুমি সরাসরি shortcut দিয়ে কানেক্ট করতে পারবে:
ssh myserver
ssh aws-prod
ssh homelabFile Permissions
SSH নিজেই check করে যে file permissions সঠিক আছে কিনা। Wrong permission থাকলে SSH connection করতে অস্বীকার করে।
LOCAL machine-এ এই permissions থাকা দরকার:
# .ssh folder
chmod 700 ~/.ssh/
# Private key — শুধু তুমি read করতে পারবে
chmod 600 ~/.ssh/id_ed25519
# Public key
chmod 644 ~/.ssh/id_ed25519.pub
# Config file
chmod 600 ~/.ssh/configSERVER-এ এই permissions থাকা দরকার:
# .ssh folder
chmod 700 ~/.ssh/
# authorized_keys
chmod 600 ~/.ssh/authorized_keysSCP
এক কম্পিউটার থেকে অন্য কোনো রিমোট সার্ভার বা কম্পিউটারে ফাইল আদান-প্রদান করার জন্য SCP (Secure Copy) ব্যবহার করা হয়। এটি SSH প্রোটোকল ব্যবহার করে অত্যন্ত সুরক্ষিতভাবে ফাইল ট্রান্সফার করে। SCP-এর মূল মন্ত্র হলো: scp [উৎস] [গন্তব্য]।
নিচের সব কমান্ড তোমার LOCAL Machine-এর টার্মিনালে চালাবে।
Upload (LOCAL → SERVER)
# Single file upload
scp localfile.txt omar@server:/home/omar/
# Folder upload
scp -r local-folder/ omar@server:/home/omar/
# Config-এর alias দিয়ে
scp file.txt myserver:/tmp/CyberSec Note
SSH CTF-এ আর Pentesting-এ:
Private Key Found:
Target machine-এ যদি কোনো user-এর private key পাও (.ssh/id_rsa বা id_ed25519), সেটা দিয়ে সরাসরি login করা যায়।
# Key download করার পর permission ঠিক করো
chmod 600 id_rsa
# সেই key দিয়ে connect করো
ssh -i id_rsa user@target-ipSSH Brute Force:
Kali Linux-এ hydra pre-installed। Ubuntu-তে sudo apt install hydra দিয়ে install করো।
# Hydra দিয়ে SSH brute force
hydra -l admin -P /usr/share/wordlists/rockyou.txt ssh://target-ipKali-তে rockyou.txt /usr/share/wordlists/ এ থাকে। Ubuntu-তে sudo apt install wordlists দিয়ে install করতে হবে।
Weak Configuration খোঁজো:
এই commands SERVER-এ (বা target-এ shell পেলে) চালাও:
# SSH server config দেখো (root বা sudo লাগবে)
sudo cat /etc/ssh/sshd_config
# Root login allowed?
grep "PermitRootLogin" /etc/ssh/sshd_config
# Password auth allowed?
grep "PasswordAuthentication" /etc/ssh/sshd_configযদি PasswordAuthentication yes থাকে — brute force possible।
যদি PermitRootLogin yes থাকে — root directly brute force করা যাবে।
Quick Check
- Key pair তৈরি করার command কোথায় চালাতে হয় — LOCAL নাকি SERVER?
- Public key আর Private key — কোনটা server-এ রাখে, কোনটা local-এ?
- AWS-এ connect করতে কোন file লাগে এবং কেন
ssh-keygenকরতে হয় না? - GitHub-এ SSH setup করলে Public key কোথায় দিতে হয়?
-
ssh-copy-idcommand কী করে এবং এটা কোন scenario-তে কাজে লাগে? -
~/.ssh/configকোন machine-এ থাকে এবং এটার কাজ কী? - SSH কেন password-এর চেয়ে key authentication বেশি secure?
এই section শেষ।
পরবর্তী → Processes