প্রতিবার VPS-এ SSH দিয়ে ঢোকার সময় যদি password দিতে হয়, কিছুদিন পর বিষয়টি বিরক্তিকর হয়ে যায়। বিশেষ করে নিয়মিত server management, deployment বা development-এর সময় বারবার password টাইপ করতে সময় লাগে। এর সহজ সমাধান হচ্ছে SSH Key Authentication।
একবার SSH key সেটআপ করে VPS-এ public key যোগ করে দিলে পরবর্তীতে নিজ কম্পিউটার থেকে সহজেই পাসওয়ার্ড ছাড়া লগিন করা যাবে। এভাবে:
এই পোস্টে আমরা দেখব কীভাবে Windows এবং macOS থেকে SSH key তৈরি করে VPS-এ passwordless SSH login সেটআপ করা যায়।
SSH Key Authentication কী?
SSH authentication-এর সাধারণ পদ্ধতিতে আমরা ব্যবহার করি:
Username + Password
যেমন:
তারপর VPS password চাইবে।
কিন্তু SSH key authentication-এ password-এর পরিবর্তে একটি key pair ব্যবহার করা হয়।
এই key pair-এর দুটি অংশ থাকে:
Private Key
Public Key
উদাহরণ:
Private Key → আপনার computer-এ থাকবে
Public Key → VPS/server-এ থাকবে
সবচেয়ে গুরুত্বপূর্ণ বিষয়
Private key কখনো VPS, GitHub, অন্য computer বা অন্য কারও সঙ্গে share করা যাবে না।
Public key share করা যায়। Private key গোপন রাখতে হবে।
Part 1 — macOS থেকে Passwordless SSH
macOS-এ SSH client এবং প্রয়োজনীয় tools সাধারণত আগে থেকেই থাকে। তাই setup করা বেশ সহজ।
Step 1: SSH key আছে কিনা দেখুন
Terminal খুলে লিখুন:
ls ~/.ssh
এখানে এমন কিছু file দেখতে পারেন:
id_ed25519
id_ed25519.pub
অথবা পুরোনো configuration হলে:
id_rsa
id_rsa.pub
যদি id_ed25519 এবং id_ed25519.pub থাকে, তাহলে নতুন key তৈরি করার প্রয়োজন নেই।
Step 2: নতুন SSH key তৈরি করুন
যদি SSH key না থাকে, তাহলে আমরা Ed25519 key তৈরি করতে পারি:
ssh-keygen -t ed25519
আপনি এমন output দেখতে পারেন:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/yourname/.ssh/id_ed25519):
এখানে সাধারণত Enter চাপলেই হবে।
এরপর আসবে:
Enter passphrase (empty for no passphrase):
এখানে দুটি option আছে।
Option 1 — Empty passphrase
শুধু Enter চাপুন।
তাহলে SSH key ব্যবহার করার সময় passphrase-ও চাইবে না।
Option 2 — Passphrase ব্যবহার
একটি passphrase দিতে পারেন।
এটি নিরাপত্তার জন্য ভালো, কারণ private key কেউ পেয়ে গেলেও সরাসরি ব্যবহার করতে পারবে না।
তবে তখন SSH agent ব্যবহার করে passphrase manage করা ভালো।
Beginner হিসেবে আপনি প্রথমে empty passphrase দিয়েও setup করতে পারেন, বিশেষ করে নিজের নিরাপদ computer-এ।
Step 3: Public key দেখুন
Public key দেখতে:
cat ~/.ssh/id_ed25519.pub
এটি দেখতে প্রায় এমন হবে:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI............... yourname@Mac
পুরো line-টি public key।
এটি copy করবেন।
Step 4: VPS-এ Public Key যোগ করুন
ধরা যাক VPS-এর IP:
192.168.106.88
Username:
root
macOS-এ ssh-copy-id available থাকলে ব্যবহার করতে পারেন:
ssh-copy-id [email protected]
এবার VPS-এর password চাইবে।
Password দিন।
এটি public key VPS-এর নিচের file-এ যোগ করবে:
/root/.ssh/authorized_keys
যদি macOS-এ ssh-copy-id না থাকে
কিছু macOS setup-এ ssh-copy-id default হিসেবে থাকে না।
সেক্ষেত্রে এই command ব্যবহার করতে পারেন:
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
এখানেও VPS password একবার দিতে হবে।
Command-টি যা করছে:
- আপনার public key পড়ছে
- SSH দিয়ে VPS-এ যাচ্ছে
.sshdirectory তৈরি করছেauthorized_keysfile-এ public key যোগ করছে- প্রয়োজনীয় permissions সেট করছে
Step 5: Password ছাড়াই Login Test করুন
এখন:
যদি সবকিছু ঠিক থাকে, VPS-এ সরাসরি login হয়ে যাবে।
আর password চাইবে না।
Part 2 — Windows থেকে Passwordless SSH
আধুনিক Windows 10/11-এ OpenSSH Client ব্যবহার করা যায়।
আমরা PowerShell ব্যবহার করব।
PowerShell খুলতে:
Start → PowerShell
অথবা Windows Terminal ব্যবহার করতে পারেন।
Step 1: SSH আছে কিনা পরীক্ষা করুন
PowerShell-এ:
ssh -V
উদাহরণ:
OpenSSH_for_Windows_9.xp1
এমন version দেখালে SSH client কাজ করছে।
Step 2: Windows-এ SSH Key তৈরি করুন
PowerShell-এ:
ssh-keygen -t ed25519
এরপর এমন প্রশ্ন আসতে পারে:
Enter file in which to save the key
(C:\Users\YourName/.ssh/id_ed25519):
Enter চাপুন। এরপর:
Enter passphrase (empty for no passphrase):
এখানে চাইলে passphrase দিতে পারেন।
Step 3: Public Key দেখুন
Windows-এ public key সাধারণত থাকবে:
C:\Users\YourName\.ssh\id_ed25519.pub
PowerShell থেকে দেখতে:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
অথবা:
type $env:USERPROFILE\.ssh\id_ed25519.pub
আপনি এমন output পাবেন:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI............... YourName@Computer
পুরো line-টি copy করুন।
Step 4: Public Key VPS-এ যোগ করুন
Windows-এ যদি ssh-copy-id থাকে, তাহলে:
ssh-copy-id [email protected]
তবে Windows-এর অনেক setup-এ ssh-copy-id থাকে না।
সেক্ষেত্রে আমরা অন্যভাবে key copy করতে পারি।
Method 1 — PowerShell দিয়ে Public Key Copy
প্রথমে public key একটি variable-এ রাখুন:
$pubkey = Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
তারপর:
ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$pubkey' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
VPS password চাইলে password দিন।
এটি public key VPS-এর:
/root/.ssh/authorized_keys
file-এ যোগ করবে।
Method 2 — Manual Copy/Paste
এটি beginner-এর জন্য খুব সহজ।
প্রথমে Windows-এ:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
Output-এর পুরো line copy করুন।
তারপর password দিয়ে VPS-এ login করুন:
VPS-এ গিয়ে:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
এখন Windows থেকে copy করা public key paste করুন।
File save করুন।
তারপর:
chmod 600 ~/.ssh/authorized_keys
এখন exit দিয়ে VPS থেকে বের হয়ে আসুন।
Step 5: Passwordless Login Test করুন
Windows PowerShell-এ:
যদি setup ঠিক থাকে, password ছাড়াই login হবে।
SSH Key কোথায় থাকে?
macOS
সাধারণত ~/.ssh/ ফোল্ডারের মধ্যেঃ
id_ed25519
id_ed25519.pub
এখানে id_ed25519 হলো Private Key। আর id_ed25519.pub হলো Public Key।
Windows
উইন্ডোজে সাধারণত C:\Users\YourName.ssh\ এর মধ্যে থাকেঃ
id_ed25519
id_ed25519.pub
একই নিয়ম:
id_ed25519 → Private Key
id_ed25519.pub → Public Key
VPS-এ Public Key কোথায় থাকে?
Linux VPS-এ user-এর home directory-র মধ্যে:
~/.ssh/authorized_keys
Root user হলে সাধারণত:
/root/.ssh/authorized_keys
এখানে একাধিক public key থাকতে পারে।
উদাহরণ:
ssh-ed25519 AAAA... computer1
ssh-ed25519 AAAA... computer2
ssh-ed25519 AAAA... laptop
তাই একই VPS-এ একাধিক computer থেকে SSH login করা সম্ভব।
SSH Config ব্যবহার করে আরও সহজ করুন
IP address বারবার লেখারও প্রয়োজন নেই।
ধরুন আপনি প্রতিদিন ব্যবহার করেন:
এটিকে আরও ছোট করা যায়:
ssh myvps
macOS SSH Config
ফাইল তৈরি করুন:
nano ~/.ssh/config
এর মধ্যে নিচের মত করে সেভ করুন।
Host myvps
HostName 192.168.106.88
User root
IdentityFile ~/.ssh/id_ed25519
এভার ssh myvps লিখেই লগিন করতে পারবেন।
Windows SSH Config
Windows-এ config file সাধারণত:
C:\Users\YourName\.ssh\config
PowerShell থেকে config ফাইল নিচের কমান্ড ব্যবহার করে খুলতে পারেন:
notepad $env:USERPROFILE\.ssh\config
তারপর লিখুন:
Host myvps
HostName 192.168.106.88
User root
IdentityFile ~/.ssh/id_ed25519
এরপর Save করুন।
এখন PowerShell-এ গিয়ে ssh myvps লিখলেই VPS-এ login হবে।
SSH Config কেন ব্যবহার করব?
ধরুন আপনার তিনটি server আছে:
Production
Development
Testing
তাহলে config:
Host production
HostName 192.168.106.88
User root
IdentityFile ~/.ssh/id_ed25519
Host development
HostName 192.168.106.89
User root
IdentityFile ~/.ssh/id_ed25519
Host testing
HostName 192.168.106.90
User root
IdentityFile ~/.ssh/id_ed25519
এখন:
ssh production
অথবা:
ssh development
অথবা:
ssh testing
ব্যবহার করা যাবে।
SSH Key কাজ করছে কিনা Debug করবেন কীভাবে?
যদি passwordless login কাজ না করে:
ssh -v [email protected]
আরও detailed output চাইলে:
ssh -vvv [email protected]
এতে SSH কোন key ব্যবহার করার চেষ্টা করছে এবং authentication কোথায় fail করছে তা বোঝা যায়।
সবচেয়ে সাধারণ সমস্যা
1. VPS-এ authorized_keys ভুল জায়গায়
Root user হলে /root/.ssh/authorized_keys হচ্ছে সঠিক জায়গা।
2. File permission ভুল
VPS-এ:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
দিয়ে দিন।
3. Private key ভুল
যদি একাধিক key থাকে, নির্দিষ্ট key দিয়ে চেষ্টা করতে পারেন:
ssh -i ~/.ssh/id_ed25519 [email protected]
Windows-এ:
ssh -i $env:USERPROFILE\.ssh\id_ed25519 [email protected]
4. Public key পুরোপুরি copy হয়নি
Public key সাধারণত একটি সম্পূর্ণ line।
এটি ভেঙে গিয়ে একাধিক line হলে authentication fail করতে পারে।
Password পুরোপুরি Disable করা কি উচিত?
SSH key authentication কাজ করছে নিশ্চিত হওয়ার আগে password authentication বন্ধ করবেন না।
প্রথমে test করুন:
Password ছাড়া login হচ্ছে কিনা নিশ্চিত করুন।
তারপর চাইলে VPS-এর SSH configuration-এ password authentication disable করা যায়।
তবে remote VPS হলে এটি করার আগে নিশ্চিত হতে হবে যে:
- SSH key কাজ করছে
- সঠিক private key আপনার কাছে আছে
- অন্য কোনো working access method আছে
নাহলে ভুল configuration-এর কারণে VPS-এ lockout হওয়ার ঝুঁকি আছে।