SSH Config: Spaghetti থেকে Sanity

অনেকদিন পর্যন্ত আমার "Workflow" ছিল Series of Ctrl+R Searches Shell History-এ, আশা করে সেই Specific IP Address বা Long-forgotten Identity File Flag খুঁজে পাবো। এটা ছিল "SSH Spaghetti।" কাজ করতো, কিন্তু Friction-heavy ছিল।

যে মুহূর্তে Realize করলাম SSH config দিয়ে প্রোডাক্টিভিটি বাড়ানো দরকার তা হলো যখন Team-টা একটা Bastion Host (Jump Box)-এর পিছনে Move করলো। হঠাৎ, প্রতিবার Log Check করতে বা Internal DB-তে Quick Query Run করতে গেলে Bastion-এ SSH করতে হতো, আবার Authenticate করতে হতো, তারপর Internal Server-এ SSH করতে হতো। Exhausting ছিল। Flow Break হতো।

SSH config দিয়ে প্রোডাক্টিভিটি বাড়ানো: ProxyJump-এর যাদু

ProxyJump Discover করার পর Magic মনে হয়েছিল। একবার Bastion আর Internal Servers Define করলে, Suddenly Single Command-এ ফিরে এলাম: ssh internal-db। SSH Behind the scenes Tunneling আর Identity Forwarding Handle করে।

Host bastion
  HostName 1.2.3.4
  User admin
  IdentityFile ~/.ssh/id_ed25519

Host internal-db
  HostName 10.0.1.50
  User postgres
  ProxyJump bastion

Multiplexing দিয়ে Instant Connections

দ্বিতীয় Major Shift ছিল Multiplexing (ControlMaster Via) Discover করা। একই Server-এ তিনটা Terminal Window Open থাকতো প্রায়ই — একটা htop-এর জন্য, একটা Logs-এর জন্য, একটা Shell-এর জন্য। নতুন Tab Open করার সময় 2-3 Second SSH Handshake Delay-এর জন্য Used ছিলেন।

Connection Reuse Setup করলে সব Change হয়ে গেলো। First Connection যথারীতি Time নিলো, কিন্তু Second আর Third Instant ছিল। Remote Server-কে Locally Run করার মতো Feel দিলো।

Orphaned Socket Headache

...তারপর Realize করলাম Master Connection Hang করে বা Server Reboot হয় আর Multiple Tabs Open থাকলে, ControlPath Socket Orphaned হয়ে যায়। SSH করতে গেলে Some Cryptic Error পাওয়া যায় Socket Already In Use সম্পর্কে, বা Worse, Indefinitely Hang করে। শেষ পর্যন্ত একটা Tiny Shell Alias লিখতে হলো শুধু rm -rf ~/.ssh/sockets/* চালানোর জন্য যখন Things Get Weird। এটা Trade-off আমি Accept করতে Willing, কিন্তু "Fire and Forget" Solution মানুষ যেটা Claim করে সেটা নয়।

IdentityFile Trap

একবার এক ঘন্টা Debug করেছিলাম কেন একটা New Staging Box-এ SSH করতে পারছি না। Turns out, ssh-agent-এ অনেক Keys থাকায়, Server "Too many authentication failures" বলে Reject করছিল Right Key-এর আগেই।

Fix হলো IdentitiesOnly yes। এটা SSH-কে বলে শুধু সেই Host-এর জন্য Specified Key Use করতে, Agent-এর Every Key Try করতে নয় Brute-force Attacker-এর মতো। এটা এমন একটা জিনিস যেটা সবাই Host * Default-এ রাখা উচিত বলে মনে করি, কিন্তু Hardware Tokens-এর কিছু Edge Cases Break করে কিনা 100% Sure নই।

Keep-Alives (একটা Guess)

ServerAliveInterval 60 আর ServerAliveCountMax 3 Use করি, কিন্তু সত্যি কথা বলতে, এই Numbers Total Guess Home Office-এর Flaky Wi-Fi-এর উপর Based যেটা কাজ করলো মনে হলো। Annoying "Broken Pipe" Disconnects থামে Morning Coffee Breaks-এ, কিন্তু "Zombie" Connection Alive রাখতেও দেখেছি 10 Minutes Laptop Lid Close করার পরও।

একটা কথা না বললেই নয়, SSH keep-alives মাঝে মাঝে এমনভাবে জম্বি কানেকশন বাঁচিয়ে রাখে যে ম্যানুয়ালি কিল করা ছাড়া উপায় থাকে না। ল্যাপটপ স্লিপে যাওয়ার পরও কানেকশন ঝুলে থাকে, যা বিরক্তির কারণ।

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
  IdentitiesOnly yes
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h:%p
  ControlPersist 10m

Meta Description: SSH config দিয়ে প্রোডাক্টিভিটি বাড়ানো সম্ভব। শিখুন ProxyJump, Multiplexing এবং IdentityFile এর সঠিক ব্যবহার যা আপনার সার্ভার কানেকশনকে করবে আরও দ্রুত ও সহজ।

Asaduzzaman Pavel

About the Author

Asaduzzaman Pavel is a Software Engineer who actually enjoys the friction of a well-architected system. He has over 15 years of experience building high-performance backends and infrastructure that can actually handle the real-world chaos of scale.

Currently looking for new opportunities to build something amazing.