Calm Hill My Random Thoughts

SSH Config

ကိုယ့်အလုပ်မှာ အပေါများဆုံးနဲ့ အထိမ်းသိမ်း အလုပ်ရဆုံးက Server တွေပါပဲ အခုနောက်ပိုင်းက Manual အနေနဲ့ ဝင်ပြီးတော့ Maintenance လုပ်ရတာ နည်းနည်းလာပေမယ့် Login ဝင်စရာလိုတဲ့ Server အရေအတွက်က ဆယ်ဂဏန်း အနည်းငယ်တော့ ရှိနေသေးတယ်။ Login ဝင်ဖို့လိုရင် Address တွေ ရေးထားတဲ့ စာရင်းကြီးမှာ ဘယ် Address နဲ့ Private Key ဆိုတာ သွားရှာကြည့်ရတယ်။ အရင်က Script တွေရေးထားတယ် ဘယ် Server ဆိုရင် ဘယ် Script ဆိုပြီး နာမည်မှတ်ထားတယ်။ နောက်ပိုင်းတော့ SSH Config တွေထဲမှာ Configure လုပ်ပြီး သုံးတာပိုလွယ်လို့ သုံးဖြစ်တယ်။

SSH Config တွေက အလွယ်ရှင်းရရင် အမြဲတမ်းသုံးနေတဲ့ SSH Command line options တွေကို SSH Command တခါသုံးတိုင်း Manually ထည့်ပြီးတော့ မရေးရအောင်လို့ အလုပ်ရှုပ်သက်သာ အချိန်ကုန်သက်သာ အမှားနည်းအောင်လို့ Productive ဖြစ်အောင်လို့ သုံးတယ်ပဲပြောရမှာပါ။ User တယောက်ချင်းအတွက် SSH Config က ~/.ssh/config မှာရှိသလို Users တိုင်းအတွက် သက်ဆိုင်ချင်ရင်တော့ /etc/ssh/ssh_config မှာ ရေးပေးဖို့ လိုလိမ့်မယ်။

အသုံးအတည့်ဆုံး SSH Config က Host နဲ့ သက်ဆိုင်တာ အများဆုံးဖြစ်ပါလိမ့်မယ်။ ဥပမာအားဖြင့် Server တခုကို Private Key နဲ့ Login ဝင်မယ်ဆိုရင် အောက်မှာပြထားတဲ့ Command အရှည်ကြီးကို ရေးဖို့လိုလိမ့်မယ်။

ssh -i /key_location/my_key.pem [email protected]

အပေါ်မှာပြထားတဲ့ SSH Command အတွက်ဆိုရင် အောက်မှပြတဲ့ Host Config မျိုးက အသုံးတည့်ပါလိမ့်မယ်

Host ServerA
  HostName 192.168.0.1
  Port 22
  User user1
  IdentityFile /key_location/my_key.pem
  IdentitiesOnly no

Config ထဲမှာ အဲလိုထည့်ပြီးပြီဆိုရင် သုံးနေကျ SSH Command အရှည်ကြီးကို အမြဲတမ်းရိုက်စရာ မလိုအပ်တော့ဘူး Key File တွေဘယ်နားမှာလဲ Username က ဘာလဲတွေ မေ့ထားလိုက်ပြီး ssh ServerA ဆိုတာနဲ့ အဆင်ပြေပါပြီ။ ကိုယ်သုံးတဲ့ Server တွေရဲ့ မှတ်မိနိုင်မယ့် နာမည်တိုလေးတွေပဲ Host မှာပေးထားလိုက်တော့ အရင်လိုစာရင်းတွေ ဝင်ကြည့်စရာ မလိုတော့ပါဘူး။

IdentitiesOnly ကတော့ တယောက်နဲ့တယောက် သုံးတာတူချင်မှတူမယ် ကိုယ်ကတော့ SSH Agent သုံးတော့ no ပေးထားလေ့ရှိတယ် IdentityFile မှာပေးလိုက်တဲ့ Private Key File ကိုပဲ သုံးစေချင်ရင်တော့ yes ပေးရင်ရလိမ့်မယ်။ Private Key မသုံးဘူးဆိုရင်လည်း PubkeyAuthentication ကို no လို့ ထည့်ပေးရင် ရပါလိမ့်မယ်။

ssh -L 8484:127.0.0.1:27017 -i /key_location/my_key.pem [email protected]

အပေါ်မှာပြထားသလို Local Port Forward အတွက်သုံးထားတဲ့ SSH Command အတွက်ဆိုရင် အောက်မှာပြထားသလို Config မှာ LocalForward ထပ်ထည့်ပေးတာမျိုးနဲ့ အသုံးချလို့ရလိမ့်မယ်။

Host ServerA
  HostName 192.168.0.1
  Port 22
  User user1
  IdentityFile /key_location/my_key.pem
  IdentitiesOnly no
  LocalForward 8484 127.0.0.1:27017

Github တို့ Bitbucket တို့မှာ Personal Account နဲ့ Office Account ဆိုပြီး ၂ ခုခွဲထားပြီး စက်တလုံးထဲမှာ သုံးမယ်ဆိုရင် SSH က Key တခုထဲကို Account ၂ ခုမှာ Configure လုပ်လို့မရတဲ့အတွက် နည်းနည်းပြဿနာရှိတယ်။ အဲဒီအတွက်ဆိုလည်း SSH Config နဲ့ ကြံလို့ဖန်လို့ ရပါသေးတယ်။ အောက်မှာ နမူနာအဖြစ် Bitbucket ရဲ့ Config ကိုပြထားပါတယ်။

# Personal Account
Host bitbucket.org-p
  HostName bitbucket.org
  User git
  IdentityFile /key_location/persoanl_key.pem
  IdentitiesOnly no

# Office Account
Host bitbucket.org-o
  Hostname bitbucket.org
  User git
  IdentityFile /key_location/office_key.pem
  IdentitiesOnly no

Host မှာ Personal အတွက်ဆိုရင် bitbucket.org-p လို့ပေးထားပြီး bitbucket.org-o လို့ပေးထားပြီး git clone လုပ်တဲ့အခါ Bucket URL ရဲ့ Hostname မှာ Personal အတွက်ဆိုရင် bitbucket.org-p လို့ပြောင်းပြီး Clone လုပ်လိုက်ရုံပါပဲ။ ရေးရတာပိုပြီး တိုအောင်လို့ Host ကို ဥပမာအနေနဲ့ bp တို့ bo တို့ ပေးလို့ရပေမယ့် Clone လုပ်တဲ့အခါ URL ကို ရိုက်ထည့်တာထက် Copy/Paste လုပ်တာများလို့ Hostname တခုလုံးကို ပြန်ဖျက်တာထက် နောက်ဆုံးစကားလုံးလေး နည်းနည်းပြောင်းတာက ပိုသက်သာလို့ လုပ်ထားတာပါ။

SSH Config ထဲမှာ ထည့်သုံးလို့ရတာတွေ စဉ်းစားလို့ ရသလောက်ဆိုရင် X11 နဲ့ သက်ဆိုင်တာတွေတို့ Tunnel တို့ ရှိသေးတယ် လူတယောက်နဲ့တယောက် အသုံးပြုပုံချင်းမတူတော့ Documentation မှာ ဝင်ဖတ်ကြည့်ပါ အသုံးတည့်တာတွေလည်း ရှိနိုင်ပါသေးတယ်။

References

  1. SSH - https://www.ssh.com/ssh/config/