আমার সবেমাত্র লিনাক্সে একই সমস্যা ছিল, ব্যাশ ব্যবহার করে। আমি প্রথমে এনভায়রনমেন্ট ভেরিয়েবল SSH_CONNECTION ব্যবহার করেছি, কিন্তু তারপরে বুঝতে পেরেছি যে এটি সেট না থাকলে আপনি করুন su -।
উপরের লাস্টলগ সমাধান পরে suবা পরে কাজ করে নি su -।
অবশেষে, আমি ব্যবহার করছি who am i, এটি কোনও এসএসএইচ সংযোগ থাকলে শেষ পর্যন্ত দূরবর্তী আইপি (বা হোস্টনাম) দেখায়। এটি su এর পরেও কাজ করে।
বাশ নিয়মিত এক্সপ্রেশন ব্যবহার করে, এটি কাজ করে:
if [[ $(who am i) =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then echo SSH; else echo no; fi
যদি zsh নিয়মিত এক্সপ্রেশন সমর্থন করে না, গ্রাপ, কাটা, সেড বা যেকোনো কিছু দিয়ে একই বিভিন্ন উপায়ে অর্জন করা যায়।
কৌতূহলের জন্য, নীচেরটি আমি এটির জন্য মূলের .bashrc এ ব্যবহার করছি:
# We don't allow root login over ssh.
# To enable root X forwarding if we are logged in over SSH,
# use the .Xauthority file of the user who did su
w=$(who am i)
if [[ $w =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then
olduser=${w/ .*/}
oldhome=$(getent passwd $olduser | cut -d: -f 6)
[ -f "$oldhome/.Xauthority" ] \
&& export XAUTHORITY=$oldhome/.Xauthority
fi
একটি বিকল্প যা এর সাথে কাজ করে suতা হ'ল sshdপিতামাতার প্রক্রিয়াগুলির মাধ্যমে পুনরাবৃত্তভাবে অনুসন্ধান করা :
#!/bin/bash
function is_ssh() {
p=${1:-$PPID}
read pid name x ppid y < <( cat /proc/$p/stat )
# or: read pid name ppid < <(ps -o pid= -o comm= -o ppid= -p $p)
[[ "$name" =~ sshd ]] && { echo "Is SSH : $pid $name"; return 0; }
[ "$ppid" -le 1 ] && { echo "Adam is $pid $name"; return 1; }
is_ssh $ppid
}
is_ssh $PPID
exit $?
যদি ফাংশনটি .bashrc এ যুক্ত হয় তবে এটি হিসাবে ব্যবহার করা যেতে পারে if is_ssh; then ...