আমার সবেমাত্র লিনাক্সে একই সমস্যা ছিল, ব্যাশ ব্যবহার করে। আমি প্রথমে এনভায়রনমেন্ট ভেরিয়েবল 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 ...