SSH Key Authentication
မိမိ၏ Server သို့ SSH ဖြင့်ချိတ်ဆက်တဲ့အခါ Password ကိုအသုံးပြုလေ့ရှိကြပါတယ်။ ဒါပေမယ့် ဒီနေ့ခေတ်အခါမှာတော့ Password ကို အသုံးပြုခြင်းဟာ အောက်ပါ အားနည်းချက်တို့ရှိလာခဲ့ပါတယ်။
- မိမိထားရှိသော Password ကို ခန့်မှန်းရန် ဖြစ်နိုင်ခြင်း
- Password Guessing/Password Brute Force ကိုအသုံးပြုပြီး Server ကို ချိုးဖေါက်ဝင်ရောက်ခြင်း
- မိမိ အသုံးပြုသော Network အတွင်း ဝင်ရောက်နှောက်ယှက်မှုပြုလုပ်ပြီး Password ကို ရယူနိုင်ခြင်း
- မိမိ အသုံးပြုသော Laptop ကို အခြားသူတစ်ဦးဦးမှ တစ်နည်းနည်းဖြင့် ထိန်းချုပ်နိုင်ခြင်း
- Social Engineering အသုံးပြုကာ မိမိ Server ၏ Password ကို ရယူသွားနိုင်ခြင်း
- မိမိ အသုံးပြုသော Laptop/PC မှမဟုတ်ပဲ အခြား Laptop/PC မှ မိမိ Server သို့ Login ဝင်ရောက်သည့်အခါ Software/Hardware Keylogger များဖြင့် မိမိ Password ကို ခိုးယူနိုင်ခြင်း
စသည်ဖြင့် Server သို့ SSH ဖြင့် ဝင်ရောက်ခြင်းကို Password အသုံးပြုပါက အားနည်းချက်တွေ များစွာ ဖြစ်ပေါ်လာပါတယ်။ ဒါကြောင့် နောက်ပိုင်းတွင်တော့ SSH Key Pair Authentication (ခေါ်) Public Key Authentication ကိုအသုံးပြုလာကြပါတယ်။ SSH key pair authentication ကို အသုံးပြုခြင်းကြောင့် ပိုမိုလုံခြုံမှုရှိလာခြင်း၊ ပိုမိုမြန်ဆန်လာခြင်းများ စသည့် ကောင်းကျိုးများစွာရှိပါတယ်။
SSH Key Pair Authentication ၏ အခြေခံ အလုပ်လုပ်ပုံ
ပုံမှာပြထားသလိုပါပဲ SSH Key Pair (Public & Private Key) ကို မိမိ စက်တွင် Generate ထုတ်ယူပါ။ Public Key ကို Server သို့ Upload တင်ပြီးရင်တော့ မိမိစက်ထဲက Private Key ကိုအသုံးပြုကာ Password မလိုပဲ Login ဝင်နိုင်ပါပြီ။ ပုံမှာမပါပဲ ဆက်လက်လုပ်ဆောင်ရမှာကတော့ Server ဘက်ခြမ်းကနေ Password Authentication ကို ပိတ်ထားပြီး Public Key Authentication ကို ဖွင့်ထားဖို့ပါပဲ။
အခြေခံ Concept ကတော့ သော့တံနဲ့ သော့ခလောက်ပါပဲ။ Private Key ဆိုတာကတော့ သော့တံနဲ့တူပြီး Public Key ကတော့ သော့ခလောက်နဲ့တူပါတယ်။ Server ကို လုံခြံုစေချင်တဲ့အခါ သော့ခလောက်နဲ့ ခတ်ရပါမယ် (ဆိုလိုတာက Public Key ကို Server ပေါ်သို့တင်ထားရပါမယ်)။ Server အတွင်းသို့ SSH ဖြင့် ဝင်ချင်တဲ့အခါ သော့တံ ( Private Key ) ကိုအသုံးပြုပြီး ခတ်ထားတဲ့ သော့ခလောက် (Public Key) ကိုဖြည်ကာ ဝင်နိုင်ပါလိမ့်မယ်။ သတိပြုဖို့ကတော့ သော့တံ (Private Key) ကို မိမိတစ်ဦးတည်းသာ သိမ်းထားရမှာပဲဖြစ်ပါတယ်။ ထို့အပြင် Private Key ရဲ့ Permission ဟာ 600 အမြဲဖြစ်နေရပါမယ်။ Private Key ရဲ့ Permission ဟာ 600 မဖြစ်ပါက အသုံးပြုလို့ရမှာမဟုတ်ဘူးဆိုတာ ကြိုတင် သတိပြုထားရမှာပါ။
SSH Key Pair ကို Generate ထုတ်ယူပုံ
ပုံမှာဖေါ်ပြထားတဲ့ စာတွေကတော့ -t နဲ့ Key Type ရွေးနိုင်ပါတယ်။ rsa, dsa, ecdsa, ed25519 တို့ကတော့ SSH Protocol version 2 အတွက်ဖြစ်ပြီး rsa1 ကတော့ SSH Protocol version 1 အတွက်ဖြစ်ပါတယ်။ RSA ကိုတော့ အသုံးများကြပါတယ်။ နောက်ပြီး -b ကတော့ Key File ထဲမှာ ရှိမယ့် bit အရေအတွက်ကိုဖေါ်ပြတာပါ။ RSA အတွက်တော့ 1024 bit အနည်းဆုံးရှိရမှာဖြစ်ပြီး 2048 bit ကတော့ ပုံမှန် (Default) ရှိရမယ့် bit အရေအတွက်ပါ။ DSA ကတော့ 1024 bit ကွက်တိရှိပြီး ECDSA ကတော့ 256 bit, 384 bit, 521 bit အသီးသီးဖြစ်နိုင်ပြီး အဲ့ဒီ bit တွေမှမဟုတ်ရင် အလုပ်လုပ်မှာမဟုတ်ပါဘူး။ ED25519 ရဲ့ bit အရေအတွက်ကတော့ 1024 bit ပုံသေပဲဖြစ်ပါတယ်။ -f ရဲ့နောက်က လိုက်တာကတော့ key file ထွက်လာရမယ့် path လမ်းကြောင်းဖြစ်ပါတယ်။ RSA Algorithm ကိုအသုံးပြုပြီး SSH Key Pair ထုတ်ယူဖို့ကတော့ အောက်က Command အတိုင်းပဲဖြစ်ပါတယ်။
ssh-keygen -t rsa -b 2048 -f ~/mysshkeys/key1
အထက်ပါ Command ရေးဖို့အတွက် ကိုယ့် user ရဲ့ Home Directory ထဲမှာ mysshkeys ဆိုတဲ့ folder လေးရှိနေရမှာဖြစ်ပါတယ်။ မရှိရင်တော့ mkdir ~/mysshkeys ဆိုတဲ့ command နဲ့ တည်ဆောက်နိုင်ပါတယ်။
ထို့နောက်မှာတော့ အောက်ပါပုံထဲကအတိုင်း Passphrase ကို မေးပါလိမ့်မယ်။ Passphrase ကတော့ အဲ့ဒီ ကိုယ်ထုတ်မယ့် Key ကိုအသုံးပြုတဲ့အခါတိုင်း ရိုက်ထည့်ရမယ့် Key ဖြစ်ပါတယ်။ အကယ်၍များ မိမိရဲ့ Private Key ကို ခိုးယူခံရတဲ့အခါ Private Key ကိုအသုံးပြုပြီး Server Login ဝင်ဖို့ကြိုးစားတဲ့အခါ ၄င်း Private Key ကိုအသုံးပြုဖို့အတွက် Password နဲ့တစ်ဆင့် ပိုပြီး ကာကွယ်ထားတဲ့သဘောပါပဲ။ Passphrase ကိုမိမိစိတ်ကြိုက် ထည့်ပြီးတဲ့အခါ (သို့) Passphrase မထားပဲ အလွတ်ထားလိုက်တဲ့အခါမှာတော့ SSH Key Pair လေးတစ်စုံကို ရရှိမှာပါ။
- key1 ဆိုတာလေးကတော့ Private Key ဖြစ်ပါတယ်။
- key1.pub ဆိုတာလေးကတော့ Public Key ဖြစ်ပါတယ်။ File name ရဲ့နောက်မှာ .pub ပါတာက Public Key လို့ မှတ်ယူထားနိုင်ပါတယ်။
SSH Key Pair ထဲမှာ ဘယ်လိုတွေရှိလဲ
Private Key ထဲမှာ ဘာတွေရေးထားလဲ စပ်စုချင်ရင်တော့ cat နဲ့ထုတ်ကြည့်ရင် အောက်ပါပုံအတိုင်းမြင်ရမှာပါ။ RSA Private Key ရဲ့ အစမှာတော့ —–BEGIN RSA PRIVATE KEY—– ဆိုတဲ့စာလုံးတွေမြင်တွေ့ရမှာဖြစ်ပြီး အဆုံးမှာတော့ —–END RSA PRIVATE KEY—– ဆိုတဲ့စာလုံးတွေမြင်တွေ့ရမှာပါ။
Public Key ထဲမှာတော့ အောက်ကအတိုင်းမြင်ရနိုင်ပါတယ်။ ssh-rsa ဆိုတဲ့စာလုံးနဲ့ စပြီး hostname တစ်ခုနဲ့ ဆုံးပါလိမ့်မယ်။
SSH Public Key ကို Server ပေါ်သို့ Upload တင်ပုံ
ဥပမာအားဖြင့် ကျွန်တော်တို့ Server ရဲ့ IP Address သည် 192.168.1.22 ဖြစ်တယ်ဆိုပါစို့။ အောက်ပါ Command ကိုအသုံးပြုပြီး ကိုယ့်စက်ထဲမှ Public Key ကို Server သို့ Upload တင်နိုင်ပါတယ်။
ssh-copy-id -i ~/mysshkeys/key1.pub [email protected]
ssh-copy-id ကတော့ အဓိက command ဖြစ်ပြီး -i ကတော့ ကိုယ်တင်မယ့် Public Key ရဲ့ Path လမ်းကြောင်းကို ညွှန်းပေးရမှာပါ။ [email protected] ကတော့ 192.168.1.22 IP Address ရှိတဲ့ Server ရဲ့ root user ၏ authentication ကို ရယူကာ upload တင်ပေးခြင်းပဲဖြစ်ပါတယ်။
ယခု Command သည် 192.168.1.22 IP Address ရှိတဲ့ Server ရဲ့ root user ကို ချိတ်ဆက်ပါက အသုံးပြုရမယ့် Private Key အတွက် ၄င်းနဲ့အဆင်ပြေမယ့် Public Key ကိုတင်ခြင်းဖြစ်ပါတယ်။ ဆိုလိုတာက root user အတွက်သာ Public Key ကိုတင်ခြင်းဖြစ်ပြီး အခြား User အတွက် (ဥပမာ yannaing ဆိုတဲ့ User အတွက်) ဆိုရင်တော့ ” [email protected] ” လို့ရေးသားရမှာဖြစ်ပါတယ်။
Terminal မှာတော့ အောက်ပါအတိုင်းမြင်ရမှာပါ။
ထိုသို့ “Number of key(s) added: 1” ဆိုတာလေးပေါ်လာရင်တော့ root user ကို Password မလိုပဲ Login လုပ်နိုင်ပြီဖြစ်ပါတယ်။
SSH Private Key အသုံးပြုကာ Login ဝင်ခြင်း
အောက်ပါ Command ကိုအသုံးပြုပြီး Password မလိုပဲ Login ဝင်နိုင်ပါပြီ။
ssh -i ~/mysshkeys/key1 [email protected]
-i ကတော့ Private Key ရဲ့ Path လမ်းကြောင်းကို ညွှန်းတာပဲဖြစ်ပါတယ်။ Passphrase ကို မထည့်ပဲ Enter ချည်းနှိပ်ခဲ့ရင်တော့ အောက်ပါပုံအတိုင်း Server မှာ ရှိတဲ့ root user ရဲ့ Password လုံးဝ မတောင်းပဲ Login ဝင်သွားရမှာပဲဖြစ်ပါတယ်။ Passphrase ကို တစ်ခုခု ထည့်ခဲ့ရင်တော့ Passphrase ကို ပြန်တောင်းပါလိမ့်မယ်။ Passphrase သည် Server ရှိ root user ၏ Password မဟုတ်ပဲ Private Key ကိုအသုံးပြုဖို့ Key အတွက်တောင်းတဲ့ Password ဖြစ်ကြောင်း သတိထားပြုသင့်ပါတယ်။
Server ဘက်မှ Configuration
ခုလို Private Key ကိုအသုံးပြုပြီး Login ဝင်နိုင်ပြီ ဆိုရင်တော့ SSH Server ဘက်ခြမ်းမှာ SSH Key Pair ကိုသာအသုံးပြုပြီး Login ဝင်ဖို့ခွင့်ပြုပေးပြီး Password ကိုအသုံးပြုကာ Login ဝင်ဖို့ကို ပိတ်ပင်ရန်အတွက် Configuration သွားပြင်ရမှာပဲဖြစ်ပါတယ်။ /etc/ssh/sshd_config ဆိုတဲ့ File ကို မိမိ နှစ်သက်ရာ Text Editor ဖြင့် ပြင်နိုင်ပါတယ် (ဥပမာ vi သို့မဟုတ် nano)။
၄င်း Config File ထဲတွင် “PasswordAuthentication yes” ဆိုတာကိုတွေ့ရင် အောက်ပါ ပုံထဲကအတိုင်းဖြစ်အောင် “PasswordAuthentication no” လို့ပြောင်းပါ။
ထို့နောက် “#PubkeyAuthentication yes” ဆိုတာကိုတွေ့ရင်တော့ အောက်ပါပုံထဲကအတိုင်းဖြစ်အောင် ရှေ့ဆုံးမှာရှိတဲ့ “#” လေးကို ဖျက်လိုက်ပါ။
ထို့နောက် အောက်ပါ Command ကိုအသုံးပြုပြီး SSH Server ကို Restart ပြုလုပ်ပါ။ (Restart မပြုလုပ်ပါက ပြောင်းလဲလိုက်သော Configuration များ အလုပ်လုပ်မှာမဟုတ်ပါ)
systemctl restart sshd
SSH Server ကို restart ပြုလုပ်ပြီးရင်တော့ ၄င်း Server ရှိ root user ကို ပုံမှန်အတိုင်း Password ဖြင့် Login လုပ်လို့ရမှာမဟုတ်တော့ပဲ Permission denied error ပြပါလိမ့်မယ်။ SSH Private Key ကိုသုံးမှသာ Login ပြုလုပ်လို့ရပါလိမ့်မယ်။ အောက်ပါ ပုံထဲကအတိုင်း ပေါ်ပါလိမ့်မယ်။
ဤ နည်းဖြင့် မိမိ Server ရဲ့ SSH Login ကို Private Key ဖြင့်သာ Login ပြုလုပ်နိုင်အောင် ထိန်းချုပ်ပြီး Server ရဲ့ လုံခြံုရေးကို တိုးမြှင့်နိုင်ပါလိမ့်မည် ဖြစ်ကြောင်း ဝေမျှလိုက်ပါတယ်။