সাধারণভাবে বাশ
স্টার্টআপ ফাইলগুলির বিষয়ে বাশের নকশা বরং অদ্ভুত। .bashrc
দুটি সম্পর্কহীন পরিস্থিতিতে বাশ বোঝা :
সাধারণভাবে এসএসএইচে
আপনি যখন এসএসএইচ প্রোটোকলের মাধ্যমে একটি কমান্ড কার্যকর করেন, কমান্ডটি স্ট্রিং হিসাবে তারের উপর দিয়ে যায়। স্ট্রিংটি রিমোট শেল দ্বারা কার্যকর করা হয়। আপনি যখন চালান ssh example.com somecommand
, দূরবর্তী ব্যবহারকারীর লগইন শেলটি থাকলে /bin/bash
, এসএসএইচ সার্ভারটি চালিত হয় /bin/bash -c somecommand
। লগইন শেলটি বাইপাস করার কোনও উপায় নেই। এটি সীমিত লগইন শেলগুলিকে অনুমতি দেয়, উদাহরণস্বরূপ কেবল ফাইল অনুলিপি করার অনুমতি দেয় এবং সাধারণ কমান্ড প্রয়োগের জন্য নয়।
একটি ব্যতিক্রম আছে: এসএসএইচ প্রোটোকল ক্লায়েন্টকে একটি নির্দিষ্ট সাবসিস্টেমের জন্য অনুরোধ করার অনুমতি দেয়। যদি ক্লায়েন্ট sftp
সাবসিস্টেমটির জন্য অনুরোধ করে , তবে ডিফল্টরূপে ওপেনএসএসএইচ সার্ভারটি /usr/lib/openssh/sftp-server
ব্যবহারকারীর লগইন শেলের মাধ্যমে প্রোগ্রামটি (অবস্থানটি পরিবর্তিত হতে পারে) শুরু করে। তবে লাইনের মাধ্যমে একটি অভ্যন্তরীণ এসএফটিপি সার্ভার চালনার জন্য এটিও কনফিগার করা যেতে পারে
Subsystem sftp internal-sftp
sshd_config
ফাইলের মধ্যে অভ্যন্তরীণ এসএফটিপি সার্ভারের ক্ষেত্রে এবং শুধুমাত্র এই ক্ষেত্রে ব্যবহারকারীর লগইন শেলটি বাইপাস করা হয়।
এই চ্যালেঞ্জের জন্য
ওভারডায়ার ব্যান্ডিট 18 এর ক্ষেত্রে .bashrc
রয়েছে
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
সুতরাং আপনি এই স্তরটি এমন কোনও কিছু করে সমাধান করতে পারেন যার ফলে ব্যাশ ইন্টারেক্টিভ না হয় causes
যেমন আপনি আবিষ্কার করেছেন, এসএফটিপি কাজ করে।
কিন্তু ssh bandit18@bandit.labs.overthewire.org cat readme
কাজ করবে।
যেমন হবে echo 'cat readme' | ssh bandit18@bandit.labs.overthewire.org
।
এবং ইন্টারেক্টিভ লগইন চলাকালীন সময়ে সঠিক সময়ে Ctrl + C টিপতেও কাজ করবে: এটি বাশকে বাধা দেয়, সুতরাং এটি .bashrc
সম্পূর্ণরূপে কার্যকর হবে না। বাশ শুরু করার জন্য ম্যাক্রোস্কোপিক সময় নেয়, সুতরাং এটি নির্ভরযোগ্যভাবে কাজ করে না, এটি অনুশীলনে করা যায়।