আমার সাথে

Personal Blog of Zonayed
ওয়েব টেকনোলোজি টিপস এন্ড ট্রিক্স বাংলা

এক পলকে সিকিউর শেল Secure Shell (SSH) — পর্ব ১/২

আগস্ট 6, 2018
SSH! এটার কথা অবশ্যই অনেকবার শুনেছেন। কিন্তু এই SSH টা আসলে কি? হ্যা SSH হচ্ছে Secure Shell. এটা একটা প্রটোকল।

প্রটোকল? এটা আবার কি? প্রটোকল কি আমরা অনেকে না জানলেও প্রতিনিয়ত ঠিকই ব্যবহার করতেছি। যেমন http, https, ftp এগুলো সবই প্রটোকল। প্রটোকল হচ্ছে অন্য একটা কম্পিউটার, আরো ক্লিয়ার করে বললে অন্য একটা ম্যাশিনের সাথে কানেক্ট হওয়ার উপায়। একটা ম্যাশিনের সাথে আরেকটা ম্যাশিন কোন ল্যাঙ্গুয়েজে কথা বলবে সেটাই হচ্ছে প্রটোকল। আমি বাংলা জানি তো আমার সাথে বাংলা বললেই আমি বুঝতে পারবো, চাইনিজ বললে কিচ্ছুই বুঝবো না। ঠিক ম্যাশিনকেও একটা ম্যাশিনের সাথে আরেকটার এমনভাবে কথা বলতে হবে যাতে একে অপরের টা বুঝতে পারে। এটাই প্রটোকল। এখানে উল্লেখিত প্রটোকল একেকটা একেক কাজেরঃ

  • HTTP: এর সাহায্যে একটা কম্পিউটার ব্রাউজারের সাহায্যে আরেকটা কম্পিউটার বা সার্ভারের সাথে কথা বলতে পারে।
  • FTP: এর সাহায্যে আমরা অন্য আরেকটা কম্পিউটার বা সার্ভারে ফাইল আপ্লোড করতে পারি।
  • HTTPS: সেইম HTTP এর মতোই, কিন্তু সিকিউরলি কথা বলার জন্যে ইউজ করা হয়। ডাটা ইন্টারনেটে পাঠানোর আগে সেটাকে ইনক্রিপ্ট করে পাঠানো হয় এবং সার্ভারে আবার সেটা ডিক্রিপ্ট করে আসল ডাটা বের করা হয়। যাতে মাঝখানে কেউ যদি আপনার ডাটা চুরিও করে কোনোভাবে, তাহলে সে আপনার গুরুত্বপূর্ণ তথ্য(passowrd, credit card number) দেখতে পারবে না। বরং ইনক্রিপ্টেড ডাটা দেখবে।

তো এতোক্ষন আমাদের নিত্যদিনের ইউজ করা প্রটোকলগুলো নিয়ে কথা বললাম। আমি জাস্ট এখানে ধারণা দিলাম, আরো বিস্তারিত জানতে গুগুল করে দেখতে পারেন। কিন্তু এগুলো নিয়ে বলার কারন একটাই, সেটা হচ্ছে আমরা SSH কেও চিনতে চাই। কারন এটাও একটা প্রটোকল।

SSH ও সেইমভাবেই বাইরের একটা কম্পিউটার, সার্ভার বা অন্য যেকোনো ম্যাশিনের সাথে কানেক্ট করার জন্যে প্রটোকল হিসাবে ইউজ হয়। কিন্তু এটা অনেক কড়াকড়িভাবে সিকিউরড।

এখন বাস্তব জীবনে আমরা একজন আরেকজনের সাথে কথা বলতেই পারি, কিন্তু ভার্চুয়াল লাইফে আরেকজন আবার আমার সার্ভারের সাথে কোনো ধরনের পরিচয় না দিয়েই কথা বলতে পারলে কিন্তু সমস্যা। কে জানে হয়তো সে অন্য উদ্দেশ্যেও ঢুকতে পারে। আমার সার্ভারে চলমান কোনো ওয়েবসাইট ডিলেট করে দিতে পারে। তাই আমাদের সিকিউরিটি দরকার। কিন্তু আবার এমন সিকিউরিটি হলে সমস্যা যেখানে আমার নিজেরই ঢুকতে সমস্যা হয়ে যাবে। আর সেজন্যেই এই SSH. অনেক সিকিউরড, কিন্তু আমার নিজের জন্যে অ্যাক্সেস করা সহজ।

এটা আর HTTPS এর মধ্যে পার্থক্য হলো আমরা HTTPS শুধুমাত্র ব্রাউজারেই ইউজ করার মধ্যে সীমাবদ্ধ। কিন্তু SSH আপনি চাইলে যেকোনো জায়গায় ইউজ করতে পারেন। এটাই সুবিধা, আর তাই এটা বেশ জনপ্রিয়ও। SSH ইউজ করে রিমোট কোনো কম্পিউটার, সার্ভার বা ম্যাশিনে ফাইল আপলোড করা থেকে শুরু করে, কন্ট্রোল করা, মডিফাই করা, সবই করা যায়।

SSH ইউজ করাঃ

আমি এখানে কিভাবে SSH ইউজ করতে হবে সেটা দেখাবো। এবং একই সাথে আপনার গিটহাবের সাথে কিভাবে SSH Key সেটাপ করবেন সেটারও একটা প্র্যাক্টিক্যাল উদাহরণ দিবো। আমি উইন্ডোজ১০ এবং গিট ব্যাশ ইউজ করবো। আমার কাছ থেকেও এটা রিকোমেন্ড থাকবে। গিট ব্যাশ চাইলে আপনাকে এখান থেকে গিট ইন্সটল করতে হবে গিট ব্যাশসহ। আর আপনি লিনাক্স চালালে সহজেই সব কাজ করবে। কিন্তু অন্যকোনো ভার্শনের উইন্ডোজ বা অন্য কমান্ড লাইন ইউজ করলে একটু গুগুল করে নিবেন কোনো এরর আসলে। আশা করি সমস্যা হবে না।

SSH সাধারণত বেশী ব্যবহার করা হয়ঃ

  • গিটহাব বা এরকম কোড শেয়ারিং কোনো সাইটের ক্ষেত্রে
  • নিজের ওয়েব সার্ভারের সাথে কানেক্ট হওয়ার জন্যে
  • রিমোট প্লেস থেকে নিজের কোনো সার্ভার, কম্পিউটার বা ম্যাশিনের কন্ট্রোল নেওয়ার জন্যে

আপনি যদি গিটহাবে কোনো রিপোতে যান ক্লোন করার অপশনে ক্লিক করলে এইরকম দুইটা অপশন পাবেনঃ

Clone with HTTPS এবং ডান পাশে উপরে Use SSH ও পাবেন। তো এখানে আপনি আপনার প্রোজেক্টের ক্ষেত্রে HTTPS ইউজ করলে গিটহাবে বারবার পুশ পুল করতে গিয়ে দেখবেন বারবার ইউজারনেম পাসওয়ার্ড দেওয়া লাগতেছে। কিন্তু SSH সেটাপ করে Use SSH এ গিয়ে SSH এর লিঙ্ক ইউজ করলে আপনার আর বারবার ইউজারনেম পাসওয়ার্ড দেওয়া লাগবে না। আপনি তারপর যখন ইচ্ছা তখনি পুল পুশ করতে পারবেন কোন চিন্তা ছাড়াই। কারন SSH কমপ্লিটলি ইনক্রিপ্টেড।

এখন SSH এ আপনার ম্যাশিনে কিছু কী থাকবে। তারমধ্যে একটা পাবলিক কী(Public Key) ও থাকে। সেটা আপনি যে সার্ভার সাথে কানেক্ট হবেন তাকে দিবেন। সে সেটা নিয়ে স্টোর করে রাখবে। তারপর আপনি যদি অ্যাক্সেস চান, তাহলে সেই সার্ভার কিছু কাজ করে সেটা যে আপনিই সেটা যাচাই করে আপনাকে অ্যাক্সেস দিয়ে দিবে। এবং পুরো ব্যাপারটা খুব সিকিউরড। আমি পরের পর্বে আসলে SSH কিভাবে কাজ করে সেটাও বলবো। কিন্তু আসুন তার আগে আমরা আমাদের গিটহাবের সাথে SSH কানেক্ট করে নিই।

প্রথমে আপনার গিট ব্যাস এর কমান্ড লাইন ওপেন করুন এবং এভাবে আপনার রুট ইউজার ডিরেক্টরিতে চলে যান। যেমন আমার কম্পিউটারের নাম Zonayed Ahmed আর আমার অপারেটিং সিস্টেম ইন্সটল করা আছে C ড্রাইভে। আর তাই আমার রুট ইউজার ডিরেক্টরি হচ্ছে C:\Users\Zonayed Ahmed এখন এটার ভিতরে আপনার গিট ব্যাস ওপেন করুনঃ

এখন এখানে একটা হিডেন ডিরেক্টরি/ফোল্ডার থাকবে .ssh নামে। দেখার জন্যে নিচের কমান্ডটা দিনঃ

ls -a

আর যদি এরকম কোনো ডিরেক্টরি না থাকে আপনার, তাহলে একটা ক্রিয়েট করে নিনঃ

mkdir .ssh

ব্যাস এবার এই ডিরেক্টরির ভিতরে যানঃ

cd .ssh

এখন আগে কোনো কী ইউজ করে না থাকলে বা মাত্র নতুন ক্রিয়েট করে থাকলে এখানে আপনার কিছু থাকবে না। আপনাকে এখন এটার ভিতর SSH কী জেনারেট করতে হবে। এখন SSH এর দুইটা কী থাকেঃ

১। পাবলিক কী (Public Key)

২। প্রাইভেট কী (Private Key)

দুইটা কী পুরো ব্যাপারটাকে সিকিউরড করার জন্যে। কিন্তু আপনি মনে রাখবেন আপনাকে কোথায় SSH কী দিতে বললে সবসময় পাবলিক কী টাই দিবেন, প্রাইভেট কী শেয়ার করা যাবে না। যদি কোথাও প্রাইভেট কী দেওয়ার জন্যে বলেও সেটা খালি রাখবেন।

পাবলিক কী শেয়ার করতে পারবেন সবার সাথে, কিন্তু প্রাইভেট কী শেয়ারের ক্ষেত্রে সতর্ক থাকবেন…।

এখন আমাদের এই কীগুলো জেনারেট করা লাগবে। নিচের এই কমান্ড দিয়ে কী জেনারেট করতে পারবেনঃ

ssh-keygen -C "youremail@domain.com"

তারপর আপনাকে কিছু প্রশ্ন জিজ্ঞাসা করা হবে এগুলো পূরন করে দিবেনঃ

এখানে আপনি কোনোকিছু পূরন না করলেও হবে। কিন্তু আমি গিটহাবের জন্যে আলাদা কী চাচ্ছি, তাই আলাদা করে কী এর নাম গিটহাব(id_rsa_github) দিয়েছি।আর পরে পাসওয়ার্ড চাচ্ছে কীতে আরো এক্সট্রা কিছু সিকিউরিটি লাগানোর জন্যে। আমি খালি রেখেছি, কিন্তু আপনি চাইলে দিতে পারেন। তবে যেখানে পাবলিক কী দিবেন সেখানে আপনাকে এই পাসওয়ার্ডটাও দিতে হবে। যাই হউক এবার এখানে যদি দেখি কি তৈরী হয়েছে তাইলে আমরা দুইটা নতুন ফাইল পাবোঃ

ls

এর মধ্যে .pub আছে যেটাতে সেটা হচ্ছে পাবলিক কী। যেটা সবার সাথে শেয়ার করতে পারবেন। কিন্তু প্রাইভেট কী শেয়ার করা যাবে না। এখন সবার শেষে আমাদের ম্যাশিনে আপাতত শেষ কাজ হচ্ছে আমরা যে এই SSH কী ইউজ করতে চাচ্ছি সেটা আমাদের সিস্টেমকে বলে দিতে হবে। এটার জন্যে একটা SSH Agent আছে সেটা ইউজ করে বলতে হবে। তাই প্রথমে আমরা এজেন্ট স্টার্ট করবোঃ

eval $(ssh-agent -s)

এটা কি করে আপাতত জানার দরকার নাই, কিন্তু আমাদের এজেন্ট স্টার্ট হবে এরকম কিছু একটা দেখিয়েঃ

এখন আমরা আমাদের সিস্টেমকে বলবো আমাদের নতুন জেনারেট করা SSH কীওগুলো ইউজ করতেঃ

ssh-add id_rsa_github

তারপর আইডেন্টিটি অ্যাড হয়েছে বলে একটা ম্যাসেজ পাবেনঃ

ব্যাস! এখন আপনার ম্যাশিনে SSH কী সফলভাবে সেটাপ হয়ে গেছে। এখন আপনার কোড এডিটর দিয়ে আপনার জেনারেট করা কীগুলোর মধ্যে পাবলিক কী টা(.pub দিয়ে যেটা শেষ হইছে) ওপেন করুন। তারপর ভিতরের কন্টেন্টগুলো কপি করুন পুরোটা। এরকম কিছু পাবেনঃ

এটা কপি অবস্থায় রেখে এবার পরের স্টেপে চলুন।

এখন আপনি এই SSH যে সার্ভারে ইউজ করবেন সেখানে SSH কী অ্যাড করার অপশন পাবেন। বা আমরা গিটহাবে ইউজ করবো। গিটহাবেও SSH অ্যাড করার অপশন আছে। গিটহাবে লগইন করুন। তারপর ডান পাশে উপরে আপনার প্রোফাইল পিকচারের উপরে ক্লিক করে সেটিংস এ যানঃ

এখানে গেলে এবার বাম দিকে অনেকগুলো অপশনের মধ্যে SSH and GPG keys নামেও একটা অপশন পাবেনঃ

এখানে ক্লিক করে ভিতরে যান। গেলে আপনি New SSH key নামে একটা বাটন পাবেন। এটা ক্লিক করলে আপনি ভিতরে এবার Key নামে একটা বক্স পাবেন যেখানে আপনি আপনার কপি করা পাবলিক SSH কীটা রাখবেন। তারপর Title এ চাইলে আপনি এই কী টা আপনার কোন ম্যাশিনের সাথে কানেক্ট করার জন্যে সেটার জন্যে কিছু লেখা লিখতে পারেনঃ

সবশেষে Add SSH Key বাটনে ক্লিক করুন। করলে তারপর আপনার গিটহাবের পাসওয়ার্ড চাইবে, পাসওয়ার্ড দিতে হবে। দিয়ে তারপর সাবমিট করলে এরকম কিছু একটা দেখতে পাবেনঃ

এখানে লক্ষ্য করুন চাবির ছবিটা কালো এবং নিচে লেখা Never used। কারন হচ্ছে আমরা এই SSH কী সেটাপ করে এখন পর্যন্ত এটা দিয়ে কোনো কাজ করি নাই। এখন আমরা আমাদেরই রিপো একটা ক্লোন করার চেষ্টা করি। কিন্তু এবার SSH ইউজ করে করবোঃ

git clone <your ssh github clone url>

আমার ক্ষেত্রেঃ

git clone git@github.com:zonayedpca/js.zonayed.me.git

এখানে কিন্তু HTTPS দিয়া ক্লোন করবেন না । SSH ইউজ করতে চাইলে SSH ইউজ করা লিঙ্কটাই দিতে হবে এখানে। এখন আপনি আপনার গিটহাব রিপো যেখানে ক্লোন করতে চান সেখানে যান। আমি ডেক্সটপে গেলাম। আপনার গিট ব্যাসে ক্লোনের কমান্ড দিলে দেখবেন প্রথমবার SSH কানেক্ট করার জন্যে কিছু প্রশ্ন জিজ্ঞাসা করবেঃ

এখানে yes লিখে এন্টার দিবেন। ব্যাস আপনার হোস্ট অ্যাড হয়ে যাবে পার্মানেন্টলি। এখন দেখবেন আপনার প্রোজেক্ট ক্লোন হয়ে গেছেঃ

এতটুকু আসতে পারলে আপনার গিটহাবের সাথে SSH সেটাপ কমপ্লিট। এখন এই প্রোজেক্ট এ আপনি কাজ করে পুল পুশ নিশ্চিন্তে করতে পারবেন। আর পাসওয়ার্ড দেওয়া লাগবে, এবং সিকিউরড তো অবশ্যই। আর গিটহাবেও SSH কীর অপশনে গেলে দেখবেন আপনার কী সবুজ হয়ে গেছে, সেই সাথে শেষ কবে ইউজ করা হয়েছে সেটাও দেখাচ্ছেঃ

এবার আসুন অন্য কোনো সার্ভারে কিভাবে SSH সেটাপ করবো সেটা জানি। আমাদের যে কীগুলো জেনারেট করলাম, তারমধ্যে পাবলিক কীটাই অন্য সার্ভারের সাথে শেয়ার করে SSH সেটাপ করে ফেলতে পারবেন অনেকটা সেইমভাবেই। SSH সাপোর্ট করে এমন সার্ভারগুলো SSH সেটাপ করার জন্যে ইউজার ইন্টারফেজ থাকে বেশীরভাগ সময়েই। আপনি জাস্ট শুধু আপনার পাবলিক কীটা কপি করবেন। বা নতুন কী ইউজ করতে চাইলে নতুন একটা কী জেনারেট করবেন। তারপর আপনার সিস্টেমকে বলবেন সেটা ইউজ করার জন্যে। তারপর সেটার পাবলিক কীটা কপি করে আপনার কাঙ্খিত সার্ভারে গিয়ে SSH কী এর অপশনে পেস্ট করে দিবেন। ব্যাস কাজ শেষ!

কিন্তু আমি এখানে দেখাবো কিভাবে ইউজার ইন্টারফেজ ছাড়াও SSH সেটাপ করা যায়। আপনি আপনার সার্ভারে যাবেন। সেখানেও রুট ডিরেক্টরি আছে। বেশীরভাগ সময়েই রুট ডিরেক্টরি একদম উপরেই পাবেন। সেখানেও দেখবেন .ssh নামে একটা ডিরেক্টরি/ফোল্ডার আছেঃ

না থাকলে সেইমভাবে অ্যাড করে নিবেন একটা। তবে আপনার সার্ভারে SSH সাপোর্ট করে থাকলে অবশ্যই থাকার কথা। তারপর এই ডিরেক্টরিতে ঢুকে দেখবেন ভিতরে একটা বা কয়েকটা ফাইল আছে। তবে authorized_keys নামে ফাইলটা ওপেন করবেন। বা এরকম কোনো ফাইল না থাকলে ক্রিয়েট করে নিবেন। ওপেন করলে ভিতরে খালিই পাবেন আগে SSH কী সেটাপ করে না থাকলেঃ

এখানে আপনার SSH এর জন্যে জেনারেট করা কীগুলোর মধ্যে পাবলিক কী টা সেইম আগের মতোই কপি করে পেস্ট করে দিবেন। পেস্ট করে সেইভ করবেন। তারপর? তারপর কী???

তারপর আপনার এই সার্ভারে সাথে ইউজারনেম আর হোস্ট ইউজ করে কমান্ড লাইন থেকে SSH এর সাহায্যে খুব সহজেই কানেক্ট করতে পারবেন এভাবেঃ

ssh user@ipaddress

বাই ডিফল্ট SSH এর জন্যে পোর্ট নাম্বার 22 ই বরাদ্দ থাকে, উপরে কমান্ড দিলেও এই পোর্টেই যাবে। কিন্তু যদি পোর্ট নাম্বার ভিন্ন হয় তাহলে আপনাকে পোর্ট নাম্বারও বলে দিতে হবে এভাবেঃ

ssh -p 2222 user@ipaddress

আমার একটা সার্ভার আছে। সেটার ইউজার zonayedpca এবং আইপি অ্যাড্রেস হচ্ছে 24.124.35.164 (নিরাপত্তাগত কারনে ফেইক ইউজার আইপি ইউজ করতেছি)। যাই হউক এখন এটার সাথে কানেক্ট করতে চাইলে এভাবে কমান্ড দিতে হবেঃ

ssh zonayedpca@24.124.35.164

সার্ভারের সাথে SSH কী সেটাপ থাকলে এবার আপনি প্রথমবার কানেকশন তৈরী করার জন্যে একটা এক্সট্রা স্টেপ পার করতে হবেঃ

এখানে yes লিখে দিবেন(শুধুমাত্র প্রথমবারেই লাগবে, পরে আর এটা চাইবে না), ব্যাস এখন আপনি আপনার সার্ভারের ভিতরেঃ

ব্যাস এখানে আপনি এখন আপনার সার্ভার কমান্ড লাইন দিয়েই অ্যাক্সেস করতে পারবেন। কোনো কিছু ইন্সটল দেওয়া থেকে শুরু করে ডিলেট করা, ফাইল অ্যাড করা, সব করতে পারবেন ঠিক আপনার নিজের লোকাল ম্যাশিনের মতোই।

অনলাইনে সার্চ দিলে বিভিন্ন অপারেশন যেমন লোকাল ম্যাশিন থেকে সার্ভারে ফাইল আপলোড দেওয়ার কমান্ড খুঁজে পাবেন। আশা করি এগুলো করতে আর অসুবিধা হবে না।

বিঃ দ্রঃ SSH কী জেনারেট করার সময় ডিফল্ট নাম ইউজ না করে কাস্টম নাম দিলে, যেটা আমি এই লেখায় করেছি, সেক্ষেত্রে সেটা বারবার SSH এজেন্ট ইউজ করে ssh-add করতে হয়। এটা একটু বিরক্তিকর। কিন্তু এটা সহজেই সমাধান করতে পারবেন, বা আপনার কীগুলো পার্মানেন্ট অ্যাড করতে পারবেন। সেজন্যে আপনার রুট ডিরেক্টরিতে গিয়ে .ssh ফোল্ডারে গিয়ে config নামে একটা ফাইল তৈরী করবেন। তারপর নিচের মতো করে এই লাইন টা লিখে সেইভ করবেনঃ

IdentityFile ~/.ssh/your_key_name

এখানে your_key_name এ আপনার কী এর নাম হবে। আর আপনার যতটা কাস্টম কী থাকবে সবগুলোর জন্যে একটা একটা করে নতুন লাইন নিয়ে সেইমভাবে বলে দিতে হবে আপনি এই এই কীওগুলো ইউজ করতে চানঃ

আশা করি আর কোনো সমস্যা হবে না। SSH দিয়ে সুখে-শান্তিতে কাজ করতে পারবেন।

*** স্পেশাল ধন্যবাদ সাকিব ভাইকে আমাকে SSH সার্ভার দিয়ে সহায়তা করার জন্যে। উনার জন্যেই রিয়েল সার্ভারের সাথে কানেক্ট করিয়ে লেখাটা কমপ্লিট করা সম্ভব হয়েছে।


আমার নতুন ব্লগ পোস্ট গুলোর আপডেট পেতে আপনি আপনার ইমেইল দিয়ে আমার ব্লগ পোস্টগুলো সাবস্ক্রাইব করে রাখতে পারেন, নতুন পোস্টগুলো সপ্তাহে একদিন আপনার ইনবক্সে চলে যাবে

Comments

comments