CentOS 9 এ SSH Server কিভাবে সেটআপ ও Hardening করবেন? Key-Based Login সহ ফুল বাংলা গাইড 2026

Blog / CentOS 9 এ SSH Server কিভাবে সেটআপ ও Hardening করবেন? Key-Based Login সহ ফুল বাংলা গাইড 2026

CentOS 9 এ SSH Server কিভাবে সেটআপ ও Hardening করবেন? Key-Based Login সহ ফুল বাংলা গাইড 2026 Detail Page

CentOS 9 এ SSH Server কিভাবে সেটআপ ও Hardening করবেন? Key-Based Login সহ ফুল বাংলা গাইড 2026

CentOS টার্মিনালে SSH Key-Based লগইন এবং sshd_config ফাইলের সিকিউরিটি কনফিগারেশন দেখানো বাংলা টিউটোরিয়ালের ফিচার ইমেজ

ভূমিকা: SSH কেন? Telnet এর চেয়ে কত ভালো?

SSH – Secure Shell হলো রিমোট সার্ভার অ্যাক্সেসের ইন্ডাস্ট্রি স্ট্যান্ডার্ড। পোর্ট 22 ব্যবহার করে। Telnet এর সব ডাটা প্লেইন টেক্সটে গেলেও, SSH সবকিছু এনক্রিপ্ট করে পাঠায়।

SSH এর ৩টি মূল কাজ:

  1. Remote Login: সিকিউরলি সার্ভারে লগইন
  2. Command Execution: রিমোট কমান্ড রান করা
  3. File Transfer: scpsftprsync দিয়ে ফাইল কপি

এই আর্টিকেলে যা শিখবেন:

  1. OpenSSH Server ও Client ইনস্টল ও চালু করা
  2. /etc/ssh/sshd_config ফাইলের গুরুত্বপূর্ণ অপশন
  3. SSH Port চেঞ্জ করে সিকিউরিটি বাড়ানো
  4. Root Login ও Password Login বন্ধ করা
  5. Key-Based Authentication সেটআপ – পাসওয়ার্ড ছাড়া লগইন
  6. Firewalld ও SELinux কনফিগারেশন
  7. একাডেমিক আলোচনা: Asymmetric Cryptography, SSH Handshake

১. পূর্বশর্ত ও প্রয়োজনীয় প্যাকেজ

বিষয়প্রয়োজনক্লারিফিকেশন
OSCentOS Stream 9 / RHEL 9CentOS 7 এও একই, শুধু yum ব্যবহার হবে
প্যাকেজopenssh-serveropenssh-clientsসার্ভার ও ক্লায়েন্ট। ডিফল্টভাবে ইনস্টল থাকে
ইউজারsudo এক্সেস আছে এমন নন-রুট ইউজারroot দিয়ে সরাসরি SSH করা রিস্কি
নেটওয়ার্কসার্ভারের IP জানা থাকতে হবেip a দিয়ে চেক করুন

স্পেশাল ইনস্ট্রাকশন: CentOS Minimal Install এ openssh-server আগে থেকেই ইনস্টল ও চালু থাকে। তবুও ভেরিফাই করে নেব।


২. Step 1: SSH Server ইনস্টল ও স্ট্যাটাস চেক

2.1. প্যাকেজ ইনস্টল/ভেরিফাই করুন

Bash

sudo dnf install openssh-server openssh-clients -y

ক্লারিফিকেশন: openssh-server হলো ডেমন sshdopenssh-clients হলো sshscpsftp কমান্ড।

2.2. সার্ভিস চালু ও এনাবল করুন

Bash

sudo systemctl start sshd
sudo systemctl enable sshd
sudo systemctl status sshd

আউটপুট active (running) দেখাবে:

Code

● sshd.service - OpenSSH server daemon     
           Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)     
           Active: active (running) since...

2.3. পোর্ট লিসেনিং চেক করুন

Bash

sudo ss -tulpn | grep :22

আউটপুট:

Code

tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))

0.0.0.0:22 মানে সব IP থেকে পোর্ট 22 এ কানেকশন নিচ্ছে।


৩. Step 2: ফায়ারওয়াল ও SELinux কনফিগার

3.1. Firewalld দিয়ে পোর্ট 22 ওপেন করুন

Bash

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

ক্লারিফিকেশন: --add-service=ssh অটো পোর্ট 22 ওপেন করে। ম্যানুয়ালি করতে চাইলে: --add-port=22/tcp

3.2. SELinux Context

SSH এর ডিফল্ট পোর্ট 22 এর জন্য SELinux আগে থেকেই কনফিগার করা। পোর্ট চেঞ্জ করলে SELinux আপডেট করতে হবে। সেটা Step 4 এ দেখাব।

Bash

sudo semanage port -l | grep ssh

আউটপুট: ssh_port_t tcp 22


৪. Step 3: SSH Hardening – /etc/ssh/sshd_config এডিট

এটাই সবচেয়ে গুরুত্বপূর্ণ স্টেপ। সার্ভার সিকিউর করার জন্য এই ফাইল এডিট করতে হবে।

গুরুত্বপূর্ণ: কনফিগ চেঞ্জ করার আগে ব্যাকআপ নিন। ভুল হলে সার্ভার লক আউট হয়ে যাবেন।

Bash

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

নিচের লাইনগুলো খুঁজে বের করে চেঞ্জ করুন:

4.1. Port চেঞ্জ করুন – বট অ্যাটাক কমবে

INI

#Port 22
Port 2222

ক্লারিফিকেশন: ডিফল্ট পোর্ট 22 এ সবাই অ্যাটাক করে। 2222 বা 22022 এর মতো নন-স্ট্যান্ডার্ড পোর্ট দিলে ৯০% অটো স্ক্যানার বাদ পড়বে।

পোর্ট চেঞ্জ করলে ২টা কাজ মাস্ট:

Bash

# 1. SELinux কে নতুন পোর্টের কথা জানান
sudo semanage port -a -t ssh_port_t -p tcp 2222

# 2. Firewall এ নতুন পোর্ট ওপেন করুন

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

4.2. Root Login বন্ধ করুন

INI

PermitRootLogin no

ক্লারিফিকেশন: root হলো কমন ইউজারনেম। হ্যাকাররা প্রথমে এটা ট্রাই করে। no করে দিলে শুধু নন-রুট ইউজার দিয়ে লগইন করে পরে sudo ব্যবহার করতে হবে।

4.3. Password Authentication বন্ধ করুন – সবচেয়ে সিকিউর

INI

PasswordAuthentication no
PubkeyAuthentication yes

সতর্কতা: এটা এনাবল করার আগে Step 5 এ Key-Based Login সেটআপ করে টেস্ট করে নিবেন। না হলে সার্ভার থেকে লক আউট হয়ে যাবেন।

4.4. অন্যান্য গুরুত্বপূর্ণ অপশন

INI

MaxAuthTries 3 # ৩ বার ভুল পাসওয়ার্ড দিলে ডিসকানেক্ট
LoginGraceTime 30 # ৩০ সেকেন্ডের মধ্যে লগইন না করলে ডিসকানেক্ট
AllowUsers admin devuser # শুধু এই ইউজাররা SSH করতে পারবে
X11Forwarding no # GUI ফরওয়ার্ডিং বন্ধ, সার্ভারে দরকার নাই

4.5. কনফিগ টেস্ট ও রিস্টার্ট

সিনট্যাক্স ভুল আছে কিনা চেক করুন:

Bash

sudo sshd -t

কোনো আউটপুট না আসলে সব ঠিক আছে। এরর আসলে ঠিক করুন।

এবার রিস্টার্ট করুন:

Bash

sudo systemctl restart sshd

৫. Step 4: Key-Based Authentication সেটআপ – পাসওয়ার্ড ছাড়া লগইন

এটা SSH এর সবচেয়ে সিকিউর মেথড। Private Key আপনার PC তে থাকবে, Public Key সার্ভারে।

5.1. আপনার লোকাল PC/Windows এ Key Pair জেনারেট করুন

Windows PowerShell বা Linux/Mac Terminal এ:

Bash

ssh-keygen -t ed25519 -C "admin@ToLearnTeam"

ক্লারিফিকেশন:

  1. -t ed25519: মডার্ন ও সবচেয়ে সিকিউর অ্যালগরিদম। rsa পুরানো।
  2. -C: কমেন্ট, কার কী সেটা বোঝার জন্য।
  3. ফাইল সেভ লোকেশন: Enter চাপুন = /home/user/.ssh/id_ed25519
  4. Passphrase: একটা স্ট্রং পাসওয়ার্ড দিন। Key চুরি হলেও এটা ছাড়া কাজ করবে না।

২টা ফাইল তৈরি হবে:

  1. id_ed25519: Private Key। এটা কখনো কারো সাথে শেয়ার করবেন না।
  2. id_ed25519.pub: Public Key। এটা সার্ভারে দিবেন।

5.2. Public Key সার্ভারে কপি করুন

সবচেয়ে সহজ উপায় ssh-copy-id কমান্ড:

Bash

ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.1.100 -p 22

ক্লারিফিকেশন: -p 22 হলো পোর্ট। যদি Step 4 এ পোর্ট 2222 করে থাকেন তাহলে -p 2222 দিবেন।

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

ম্যানুয়াল মেথড:

  1. id_ed25519.pub ফাইলের কনটেন্ট কপি করুন: cat ~/.ssh/id_ed25519.pub
  2. সার্ভারে লগইন করুন:

Bash

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
  1. কপি করা Public Key পেস্ট করুন → সেভ করুন
  2. পারমিশন ঠিক করুন:

Bash

chmod 600 ~/.ssh/authorized_keys

5.3. Key দিয়ে লগইন টেস্ট করুন

Bash

ssh -i ~/.ssh/id_ed25519 -p 2222 admin@192.168.1.100

পাসওয়ার্ড চাইবে না, সরাসরি লগইন হবে। কাজ করলে এখন /etc/ssh/sshd_config এ PasswordAuthentication no করে দিতে পারেন।

5.4. ডিরেক্টরি স্ট্রাকচার ও পারমিশন

Bash

/home/admin/
└──.ssh/ # chmod 700
├── authorized_keys # chmod 600 – পাবলিক কী লিস্ট
├── id_ed25519 # chmod 600 – প্রাইভেট কী, ক্লায়েন্টে থাকে
├── id_ed25519.pub # chmod 644 – পাবলিক কী
└── known_hosts # chmod 644 – যেসব সার্ভারে কানেক্ট করেছেন তার ফিঙ্গারপ্রিন্ট

গুরুত্বপূর্ণ: পারমিশন ভুল হলে SSH কাজ করবে না। 700 ও 600 মাস্ট।


৬. Step 5: SSH Client কমান্ড ও উদাহরণ

6.1. বেসিক লগইন

Bash

ssh admin@192.168.1.100
ssh admin@192.168.1.100 -p 2222 # কাস্টম পোর্ট
ssh -i ~/.ssh/mykey.pem admin@server.com # স্পেসিফিক কী দিয়ে

6.2. রিমোট কমান্ড রান করা – লগইন না করেই

Bash

ssh admin@192.168.1.100 'df -h'
ssh admin@192.168.1.100 'sudo systemctl status nginx'

সার্ভারে লগইন না করেই আউটপুট আপনার টার্মিনালে দেখাবে।

6.3. SCP দিয়ে ফাইল কপি

Bash

# লোকাল থেকে সার্ভারে ফাইল পাঠানো
scp -P 2222 /home/user/file.txt admin@192.168.1.100:/home/admin/
# সার্ভার থেকে লোকালে ফাইল আনা
scp -P 2222 admin@192.168.1.100:/var/log/messages./
# ফোল্ডার কপি
scp -P 2222 -r /home/user/website admin@192.168.1.100:/var/www/

ক্লারিফিকেশন: scp তে পোর্টের জন্য বড় হাতের -Pssh এ ছোট হাতের -p


৭. একাডেমিক আলোচনা: SSH কিভাবে কাজ করে?

7.1. Asymmetric Cryptography

SSH, Key-Based Auth এর জন্য Public-Private Key Pair ব্যবহার করে। এটা Asymmetric Cryptography।

  1. Public Key: তালার মতো। সবাইকে দেওয়া যায়। এটা দিয়ে ডাটা এনক্রিপ্ট করা যায়।
  2. Private Key: চাবির মতো। শুধু আপনার কাছে থাকবে। এটা দিয়ে ডাটা ডিক্রিপ্ট করা যায়।

সার্ভারে আপনার Public Key authorized_keys এ থাকে। লগইনের সময় সার্ভার একটা চ্যালেঞ্জ পাঠায়। আপনার PC সেটা Private Key দিয়ে সাইন করে পাঠায়। মিলে গেলে লগইন হয়। পাসওয়ার্ড একবারও নেটওয়ার্কে যায় না।

7.2. SSH Handshake প্রসেস

  1. TCP Connection: ক্লায়েন্ট পোর্ট 22/2222 এ কানেক্ট করে।
  2. Version Exchange: সার্ভার ও ক্লায়েন্ট SSH ভার্সন শেয়ার করে।
  3. Key Exchange: Diffie-Hellman দিয়ে একটা সেশন কী তৈরি হয়। এটা Symmetric Key।
  4. Server Authentication: ক্লায়েন্ট সার্ভারের Host Key ~/.ssh/known_hosts এর সাথে মিলিয়ে দেখে। Man-in-the-Middle অ্যাটাক ধরার জন্য।
  5. User Authentication: পাসওয়ার্ড বা Public Key দিয়ে ইউজার ভেরিফাই হয়।
  6. Encrypted Channel: এরপর সব কমান্ড ও ডাটা সেশন কী দিয়ে এনক্রিপ্ট হয়ে যায়।

7.3. SSH vs Telnet – একাডেমিক তুলনা

প্যারামিটারTelnetSSH
ProtocolApplication LayerApplication Layer
SecurityNone, Plain TextEncryption, Integrity, Auth
Port2322
AuthenticationPlain PasswordPassword, Public Key, Keyboard-Interactive
Data IntegrityNo CheckHMAC-SHA2 দিয়ে ভেরিফাই
OSI Layer77, কিন্তু 6 এ এনক্রিপশন হয়
ব্যবহারDeprecated, LegacyIndustry Standard

সিদ্ধান্ত: CIA Triad – Confidentiality, Integrity, Availability – SSH তিনটাই নিশ্চিত করে, Telnet একটাও না।


৮. বোনাস: Fail2Ban দিয়ে Brute Force অ্যাটাক বন্ধ করুন

SSH এ বারবার ভুল পাসওয়ার্ড দিলে IP ব্লক করার জন্য Fail2Ban ব্যবহার করুন।

Bash

sudo dnf install epel-release -y
sudo dnf install fail2ban -y
sudo systemctl enable fail2ban --now
sudo nano /etc/fail2ban/jail.local

ফাইলে পেস্ট করুন:

INI

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 3600

Bash

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

৩ বার ভুল করলে ১ ঘণ্টার জন্য IP ব্যান হয়ে যাবে।


৯. উপসংহার ও চেকলিস্ট

আপনি এখন একটি প্রোডাকশন-গ্রেড সিকিউর SSH সার্ভার কনফিগার করতে পারেন।

সিকিউরিটি চেকলিস্ট:

  1.  Port 22 চেঞ্জ করে 2222 বা অন্য কিছু করেছেন?
  2.  PermitRootLogin no করা আছে?
  3.  PasswordAuthentication no করে Key-Based Login চালু করেছেন?
  4.  AllowUsers দিয়ে স্পেসিফিক ইউজার এলাও করেছেন?
  5.  Firewalld এ শুধু নতুন SSH পোর্ট ওপেন?
  6.  Fail2Ban ইনস্টল করেছেন?

সিরিজের পরবর্তী পর্ব: CentOS এ LAMP Stack ইনস্টলেশন - Apache, MariaDB, PHP 8.2। আমরা ওয়েব সার্ভার বানানো শিখব।

ToLearnTeam.com এর সাথে থাকুন। কোনো স্টেপে আটকে গেলে কমেন্ট করুন। Happy Securing!


প্রশ্ন: আপনার সার্ভারে ssh -v admin@IP কমান্ড দিলে কোন লাইনে Authenticated দেখাচ্ছে?



Windows থেকে authorized_keys ফাইলে পাবলিক কী কপি না হওয়ার ৩টা কমন কারণ আছে। স্টেপ বাই স্টেপ ফিক্স করি।



সমস্যা: Windows এর Public Key CentOS এর ~/.ssh/authorized_keys এ যাচ্ছে না

সলিউশন ১: ssh-copy-id ব্যবহার করুন – সবচেয়ে সহজ, Windows 10/11 এ কাজ করে

Windows PowerShell বা CMD ওপেন করুন:

powershell

# 1. প্রথমে চেক করুন কী আছে কিনা
type %USERPROFILE%\.ssh\id_ed25519.pub
# যদি "The system cannot find the path" আসে, তাহলে কী বানান:
ssh-keygen -t ed25519 -C "your_email@ToLearnTeam.com"

Enter ৩ বার চাপুন। পাসফ্রেজ না দিলেও হবে, তবে দেওয়া ভালো।

powershell

# 2. সার্ভারে কী কপি করুন - অটোমেটিক সব পারমিশন ঠিক করে দিবে
ssh-copy-id -i %USERPROFILE%\.ssh\id_ed25519.pub admin@192.168.1.100 -p 2222

ক্লারিফিকেশন: admin আপনার CentOS ইউজার, 192.168.1.100 সার্ভারের IP, -p 2222 আপনার SSH পোর্ট। পোর্ট 22 হলে -p 2222 বাদ দিন।

প্রথমবার সার্ভারের পাসওয়ার্ড চাইবে। দিলেই কপি হয়ে যাবে।

টেস্ট করুন:

powershell

ssh -i %USERPROFILE%\.ssh\id_ed25519 admin@192.168.1.100 -p 2222

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


সলিউশন ২: ম্যানুয়াল কপি-পেস্ট – ssh-copy-id না থাকলে

Step 1: Windows এ Public Key কপি করুন

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub | clip

clip কমান্ড পুরো কী ক্লিপবোর্ডে কপি করে দিবে।

Step 2: CentOS সার্ভারে লগইন করে ম্যানুয়াল পেস্ট করুন

Bash

# 1. .ssh ফোল্ডার বানান ও পারমিশন ঠিক করুন
mkdir -p ~/.sshchmod 700 ~/.ssh
# 2. authorized_keys ফাইল খুলুন
nano ~/.ssh/authorized_keys
# 3. Windows থেকে কপি করা কী পেস্ট করুন - Ctrl+V# কী এক লাইনে থাকতে হবে। শুরু হবে ssh-ed25519 দিয়ে, শেষ হবে আপনার ইমেইল দিয়ে
# 4. সেভ করুন: Ctrl+O, Enter, Ctrl+X
# 5. পারমিশন মাস্ট ঠিক করুন, না হলে কাজ করবে না
chmod 600 ~/.ssh/authorized_keys

Step 3: SELinux Context ঠিক করুন – এটা না করলে কাজ করবে না

Bash

restorecon -Rv ~/.ssh

অথবা:

Bash

chcon -R unconfined_u:object_r:ssh_home_t:s0 ~/.ssh

কমন ৪টা ভুল যার কারণে কাজ করে না

ভুললক্ষণসমাধান
1. পারমিশন ভুলPermission denied (publickey)chmod 700 ~/.ssh এবং chmod 600 ~/.ssh/authorized_keys মাস্ট
2. কী ভেঙে গেছেকী ২-৩ লাইনে ভাগ হয়ে গেছেauthorized_keys এ ১টা কী = ১টা লাইন। কোনো Enter/Line Break থাকবে না
3. SELinux ব্লক করছে/var/log/secure এ Authentication refusedrestorecon -Rv ~/.ssh রান করুন
4. ভুল ইউজারের হোমেroot দিয়ে লগইন করে admin এর ফাইলে কী পেস্টযে ইউজার দিয়ে SSH করবেন, তার হোমে ~/.ssh/authorized_keys বানাতে হবে

ডিবাগ কমান্ড CentOS এ রান করুন:

Bash

# 1. ফাইল আছে কিনা ও পারমিশন চেক
ls -ld ~/.sshls -l ~/.ssh/authorized_keys
# আউটপুট: drwx------ এবং -rw------- হতে হবে
# 2. SELinux এরর চেক করুন
sudo ausearch -m avc -ts recent# বা
sudo cat /var/log/secure | grep ssh
# 3. SSH ডেমন ডিবাগ মোডে চেকs
udo sshd -T | grep -i authorizedkeysfile
# আউটপুট: authorizedkeysfile .ssh/authorized_keys দেখাবে

PuTTY ব্যবহার করলে .ppk থেকে কনভার্ট

আপনি PuTTY দিয়ে কী বানালে .ppk ফরম্যাট হয়। সেটা OpenSSH এ কাজ করে না।

কনভার্ট করার নিয়ম:

  1. PuTTYgen ওপেন করুন → Load → আপনার .ppk ফাইল লোড করুন
  2. Conversions → Export OpenSSH key → id_ed25519 নামে সেভ করুন
  3. উপরের বক্স থেকে Public key for pasting পুরোটা কপি করে CentOS এর authorized_keys এ পেস্ট করুন

ফাইনাল চেকলিস্ট – CentOS এ রান করুন

Bash

# 1. ফাইলে কী আছে কিনা দেখুন
cat ~/.ssh/authorized_keys
# ssh-ed25519 AAAAC3... আপনার_ইমেইল দিয়ে শুরু একটা লাইন দেখাবে
# 2. পারমিশন ফিক্স
chmod 700 ~ && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
# 3. Owner চেক - admin ইউজার হলে admin হতে হবে
ls -l ~/.ssh/authorized_keys
# -rw-------. 1 admin admin ... দেখাবে। root root দেখালে ভুল
# 4. ভুল হলে Owner ঠিক করুন
chown -R admin:admin ~/.ssh

এরপর Windows থেকে আবার লগইন করুন:

powershell

ssh -v -i %USERPROFILE%\.ssh\id_ed25519 admin@192.168.1.100 -p 2222

-v দিলে ডিটেইল লগ দেখাবে। Server accepts key দেখালেই সাকসেস।



ssh-copy-id কমান্ড Windows এ ডিফল্টভাবে নাই। এটা Linux/Mac এর টুল। তাই not recognized এরর দিচ্ছে।

Windows এ ssh-copy-id এর ৩টা বিকল্প



মেথড ১: type + ssh দিয়ে ১ লাইনে কপি – সবচেয়ে সহজ

Windows PowerShell বা CMD তে রান করুন:

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub | ssh admin@192.168.1.100 -p 2222 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

ক্লারিফিকেশন:

  1. type %USERPROFILE%\.ssh\id_ed25519.pub = আপনার পাবলিক কী পড়বে
  2. | = পাইপ করে SSH এ পাঠাবে
  3. ssh ... "কমান্ড" = সার্ভারে লগইন করে ~/.ssh বানাবে, পারমিশন ঠিক করবে, কী Append করবে
  4. -p 2222 = আপনার SSH পোর্ট। 22 হলে বাদ দিন

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


মেথড ২: ম্যানুয়াল কপি-পেস্ট – ১০০% কাজ করবে

Step 1: Windows এ Public Key কপি করুন

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub

যা আউটপুট আসবে পুরোটা সিলেক্ট করে Ctrl+C দিন। ssh-ed25519 AAAAC3... আপনার_ইমেইল এই রকম এক লাইন হবে।

কী না থাকলে বানান:

powershell

ssh-keygen -t ed25519 -C "admin@ToLearnTeam.com"

৩ বার Enter চাপুন।

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

powershell

ssh admin@192.168.1.100 -p 2222

Step 3: সার্ভারে এই কমান্ডগুলো রান করুন

Bash

# 1. .ssh ফোল্ডার ও ফাইল বানান
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 2. nano দিয়ে ফাইল ওপেন করুনnano ~/.ssh/authorized_keys

Step 4: Windows থেকে কপি করা কী পেস্ট করুন
nano তে Right Click বা Shift+Insert চাপুন → কী পেস্ট হবে।

গুরুত্বপূর্ণ: কী অবশ্যই এক লাইনে থাকতে হবে। Enter/Line Break থাকলে কাজ করবে না।

Step 5: সেভ করে বের হন
Ctrl+O → Enter → Ctrl+X

Step 6: SELinux ফিক্স – এটা না করলে CentOS এ কাজ করবে না

Bash

restorecon -Rv ~/.ssh

Step 7: লগআউট করে Key দিয়ে টেস্ট করুন

Bash

exit

Windows থেকে:

powershell

ssh -i %USERPROFILE%\.ssh\id_ed25519 admin@192.168.1.100 -p 2222

মেথড ৩: Git Bash বা WSL ইনস্টল করে ssh-copy-id ব্যবহার

আপনি যদি Git ইনস্টল করে থাকেন, তাহলে Git Bash ওপেন করুন। ওখানে ssh-copy-id কাজ করে।

Bash

ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.1.100 -p 2222

WSL থাকলে: Ubuntu টার্মিনাল ওপেন করে একই কমান্ড রান করুন।


কপি হওয়ার পরও কাজ না করলে এই ৪টা চেক করুন

CentOS সার্ভারে রান করুন:

Bash

# 1. পারমিশন চেক - drwx------ ও -rw------- হতে হবে
ls -ld ~/.sshls -l ~/.ssh/authorized_keys
# 2. Owner চেক - admin admin হতে হবে, root root না
ls -l ~/.ssh/authorized_keys
# 3. ভুল হলে ঠিক করুন
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
chown admin:admin ~/.ssh/authorized_keys
# 4. SELinux কনটেক্সট চেক
ls -Z ~/.ssh/authorized_keys
# আউটপুট: unconfined_u:object_r:ssh_home_t:s0 হতে হবে
# 5. sshd_config চেক - PubkeyAuthentication yes আছে কিনা
sudo grep PubkeyAuthentication /etc/ssh/sshd_config

13 lines hidden

ডিবাগ লগ দেখুন:

powershell

ssh -vvv -i %USERPROFILE%\.ssh\id_ed25519 admin@192.168.1.100 -p 2222

Offering public key এবং Server accepts key দেখালে সাকসেস। Permission denied (publickey) আসলে উপরের ৪টা চেক করুন।



Windows থেকে CentOS এ SSH লগইন হচ্ছে না – এটার ৯টা কমন কারণ আছে। একটা একটা করে চেক করি।



Step 1: বেসিক কানেক্টিভিটি টেস্ট করুন

Windows CMD/PowerShell এ রান করুন:

powershell

# 1. সার্ভারে Ping যাচ্ছে কিনা
ping 192.168.1.100
# 2. SSH পোর্ট খোলা আছে কিনা - Telnet Client দিয়ে
telnet 192.168.1.100 22

Could not open connection আসলে ফায়ারওয়াল/নেটওয়ার্ক ইস্যু।
SSH-2.0-OpenSSH_8.x আসলে পোর্ট খোলা আছে।

telnet না থাকলে: Test-NetConnection -ComputerName 192.168.1.100 -Port 22


Step 2: Verbose মোডে এরর দেখুন

এটা সবচেয়ে গুরুত্বপূর্ণ। ঠিক কি এরর হচ্ছে জানতে পারবেন।

powershell

ssh -vvv admin@192.168.1.100 -p 22

আউটপুটের শেষ ১০ লাইন দেখুন। কমন এরর ও ফিক্স:

এরর মেসেজকারণসমাধান
Connection timed outফায়ারওয়াল ব্লকভুল IP/Portsshd বন্ধCentOS এ: sudo firewall-cmd --add-port=22/tcp --permanent && sudo firewall-cmd --reload
sudo systemctl start sshd
Connection refusedsshd চলছে নাCentOS এ: sudo systemctl start sshd && sudo systemctl enable sshd
Permission denied (publickey,password)PasswordAuthentication no করাKey কাজ করছে নাইউজার ভুলCentOS এ: sudo nano /etc/ssh/sshd_config → PasswordAuthentication yes করে টেস্ট করুন
Permission denied (publickey)শুধু Key দিয়ে লগইন এলাও, কিন্তু আপনার কী সেটআপ নাইপাসওয়ার্ড দিয়ে লগইন এনাবল করুন বা কী ঠিকমতো সেট করুন
No such file or directoryভুল কী পাথ-i %USERPROFILE%\.ssh\id_ed25519 ঠিক আছে কিনা চেক করুন

Step 3: CentOS সার্ভারে এই ৭টা জিনিস চেক করুন

সার্ভারে লোকালি লগইন করে বা VMware কনসোল থেকে রান করুন:

3.1. SSH সার্ভিস চলছে কিনা

Bash

sudo systemctl status sshd

active (running) না থাকলে:

Bash

sudo systemctl start sshdsudo systemctl enable sshd

3.2. ফায়ারওয়াল পোর্ট খোলা কিনা

Bash

sudo firewall-cmd --list-ports
sudo firewall-cmd --list-services

পোর্ট 22 বা আপনার কাস্টম পোর্ট না থাকলে:

Bash

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

3.3. sshd_config এ কি সেট করা

Bash

sudo grep -E "Port|PasswordAuthentication|PermitRootLogin|PubkeyAuthentication" /etc/ssh/sshd_config

সেফ ডিফল্ট টেস্টের জন্য:

INI

Port 22
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication yes

চেঞ্জ করার পর: sudo systemctl restart sshd

3.4. ইউজার লক বা শেল নাই কিনা

Bash

sudo cat /etc/passwd | grep admin
sudo passwd -S admin

আউটপুট: admin PS দেখাবে। LK বা NP দেখালে লক। আনলক করুন:

Bash

sudo usermod -U admin
sudo passwd admin

3.5. /var/log/secure লগ দেখুন – আসল এরর এখানে থাকে

Bash

sudo tail -f /var/log/secure

এবার Windows থেকে SSH করুন। এই টার্মিনালে লাইভ এরর দেখাবে।

কমন লগ মেসেজ:

  1. Authentication refused: bad ownership or modes for directory /home/admin → chmod 700 /home/admin && chmod 700 ~/.ssh
  2. Failed password for admin → পাসওয়ার্ড ভুল
  3. User admin not allowed because shell /sbin/nologin → sudo usermod -s /bin/bash admin

3.6. SELinux ব্লক করছে কিনা

Bash

sudo getenforce
sudo ausearch -m avc -ts recent | grep ssh

denied দেখালে:

Bash

sudo restorecon -Rv /home/admin/.ssh
sudo setsebool -P use_nfs_home_dirs 1  # NFS হোম হলে

3.7. /etc/hosts.deny বা /etc/hosts.allow

Bash

cat /etc/hosts.deny

sshd: ALL থাকলে আপনার IP ব্লক। ফাইল খালি করে দিন বা /etc/hosts.allow এ sshd: YOUR_PC_IP অ্যাড করুন।


Step 4: পাসওয়ার্ড দিয়ে লগইন টেস্ট করুন – Key এর ঝামেলা বাদ দিয়ে

আগে নিশ্চিত হন পাসওয়ার্ড দিয়ে কাজ করে কিনা।

CentOS এ:

Bash

sudo nano /etc/ssh/sshd_config

এই ২টা লাইন নিশ্চিত করুন:

INI

PasswordAuthentication yes
PubkeyAuthentication yes

Bash

sudo systemctl restart sshd

Windows থেকে:

powershell

ssh admin@192.168.1.100

পাসওয়ার্ড চাইবে। দিলে লগইন হবে।

যদি পাসওয়ার্ড দিয়েও না হয়: তাহলে নেটওয়ার্ক/ফায়ারওয়াল/sshd সার্ভিস ইস্যু। Step 1-3 আবার করুন।

যদি পাসওয়ার্ড দিয়ে হয় কিন্তু Key দিয়ে না হয়: তাহলে authorized_keys পারমিশন বা SELinux ইস্যু। আগের রিপ্লাই এর মেথড ২ ফলো করুন।


কুইক ফিক্স কমান্ড – CentOS এ রান করুন

এটা রান করলে ৯০% SSH ইস্যু ফিক্স হয়ে যায়:

Bash

sudo systemctl start sshd
sudo systemctl enable sshd
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
sudo restorecon -Rv /home

এরপর Windows থেকে ssh admin@192.168.1.100 ট্রাই করুন।



debug3: fail to open file:C:/Users/HP/.ssh/ssh_config এটা কোনো এরর না। এটা শুধু ইনফো যে ssh_config ফাইল নাই। SSH এটা ছাড়াই কাজ করে।



আসল সমস্যা এই লাইনের পরে আসবে। Permission denied বা Connection timed out এরকম কিছু।

সম্পূর্ণ ssh -vvv আউটপুটের শেষ ২০ লাইন দিন

শুধু ssh_config এর লাইন দেখে সমস্যা বোঝা যাবে না। নিচের কমান্ড রান করে পুরো আউটপুট দিন:

powershell

ssh -vvv admin@192.168.1.100 -p 22

কি দেখতে হবে:

১. যদি Connection timed out দেখায়:

Text

debug1: connect to address 192.168.1.100 port 22: Connection timed out

কারণ: ফায়ারওয়াল ব্লক করছে, বা IP ভুল, বা sshd বন্ধ
ফিক্স CentOS এ:

Bash

sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
ip a  # IP ঠিক আছে কিনা চেক করুন

২. যদি Connection refused দেখায়:

Text

debug1: connect to address 192.168.1.100 port 22: Connection refused

কারণ: sshd চলছে না
ফিক্স CentOS এ:

Bash

sudo systemctl start sshd
sudo ss -tulpn | grep :22  # পোর্ট 22 লিসেন করছে কিনা দেখুন

৩. যদি Permission denied (publickey,password) দেখায়:

Text

debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,passwordd
ebug1: No more authentication methods to try.
admin@192.168.1.100: Permission denied (publickey,password).

কারণ: ১. পাসওয়ার্ড ভুল ২. PasswordAuthentication no করা ৩. ইউজার লক
ফিক্স CentOS এ:

Bash

sudo nano /etc/ssh/sshd_config
# PasswordAuthentication yes করে দিন
sudo systemctl restart sshd
sudo passwd admin  
# পাসওয়ার্ড রিসেট করুন

৪. যদি Permission denied (publickey) দেখায়:

Text

debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
admin@192.168.1.100: Permission denied (publickey).

কারণ: শুধু Key দিয়ে লগইন এলাও, কিন্তু আপনার কী সেটআপ হয়নি বা পারমিশন ভুল
ফিক্স: আগের রিপ্লাই এর মেথড ২: ম্যানুয়াল কপি-পেস্ট ফলো করুন।


Quick Test: পাসওয়ার্ড দিয়ে হয় কিনা চেক করুন

CentOS এ:

Bash

sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_configsudo systemctl restart sshd

Windows থেকে:

powershell

ssh admin@192.168.1.100

পাসওয়ার্ড চাইলে admin ইউজারের পাসওয়ার্ড দিন।

যদি পাসওয়ার্ড দিয়েও না হয়: তাহলে CentOS এর /var/log/secure চেক করুন:

Bash

sudo tail -f /var/log/secure

এরপর Windows থেকে SSH করুন। লাইভ এরর দেখাবে।


Windows এর ssh_config ফাইল বানাতে চাইলে – অপশনাল

এটা না থাকলেও SSH চলে। তবুও বানাতে চাইলে:

powershell

notepad $env:USERPROFILE\.ssh\config

ফাইলে পেস্ট করুন:

Code

Host centos-server    
HostName 192.168.1.100    
Port 22    
User admin    
IdentityFile C:/Users/HP/.ssh/id_ed25519

সেভ করুন। এখন শুধু ssh centos-server লিখলেই কানেক্ট হবে।

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