এসএসএইচ সেশনে ক্লায়েন্টের আইপি ঠিকানাটি সন্ধান করুন


166

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা এসএসএইচ দিয়ে সার্ভারে লগ ইন করে এমন কোনও ব্যক্তি দ্বারা চালিত হতে পারে

ব্যবহারকারী কোন আইপি ঠিকানাটি সংযোগ করছে তা স্বয়ংক্রিয়ভাবে খুঁজে পাওয়ার কোনও উপায় আছে?

অবশ্যই, আমি ব্যবহারকারীকে জিজ্ঞাসা করতে পারি (এটি প্রোগ্রামারদের জন্য একটি সরঞ্জাম, সুতরাং এতে কোনও সমস্যা নেই), তবে আমি যদি এটি সন্ধান করি তবে এটি শীতল হবে।


5
সার্ভারফল্টে চলে যাওয়ার প্রস্তাব দিন, এখনও দুর্দান্ত প্রশ্ন
বোজোওজ

উত্তর:


267

পরিবেশে পরিবর্তনশীল বলে কিনা তা পরীক্ষা করুন:

$SSH_CLIENT 

অথবা

$SSH_CONNECTION

(বা অন্য কোনও পরিবেশের ভেরিয়েবল) যা ব্যবহারকারী লগ ইন করার সময় সেট হয়ে যায় Then তারপরে ব্যবহারকারী লগইন স্ক্রিপ্টটি ব্যবহার করে এটি প্রক্রিয়া করুন।

আইপি বের করুন:

$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4

@cwd আমি এই কমান্ডে আইপিকে প্রতিস্থাপন করতে চাই "iptables -A INPUT -s 93.203.118.251 -p tcp --destination-Port 443 -j DROP" কি সম্ভব?
wutzebaer

2
এটি আমার জন্য দূরবর্তী স্থান ছিল।
চটজলদি

5
কেবলমাত্র স্যুডযুক্ত ব্যবহারকারীদের সাথেই কাজ করে। উদাহরণস্বরূপ, যদি আপনার কোনও ssh ব্যবহারকারী থাকে এবং তারপরে রুটের দিকে এগিয়ে যায় তবে একটি নতুন শেল তৈরি হয় এবং এই ভেরিয়েবলগুলি নষ্ট হয়, আপনি যদি না মূল গাছের পিঠে সন্ধান করতে পারেন তবে মূল এসএসডি পিডটি খুঁজে পেতে এবং / proc / $ পিআইডি / এনভায়রনমেন্টের থেকে ভেরিয়েবলগুলি পাওয়া যায় না
আন্দ্রেজ

5
stackoverflow.com/questions/428109/extract-substring-in-bash ধন্যবাদ এই উত্তরটি সহজভাবে উন্নত করা যেতে পারে${SSH_CLIENT%% *}
জেফ

@ আন্ড্রেজ সন্ধান করুনsudo -E
জেফ

105

আপনি কমান্ডটি ব্যবহার করতে পারেন:

server:~# pinky

এটি আপনাকে এইরকম কিছু দেবে:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133

13
এটা দুর্দান্ত :-) আরও একবার নীড হিউমার t অনুসারে pinky --help:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
ক্রিস উডস

আমার আউটপুটে কেন এটি আমার 'কোথায়' কেবল মেশিনের নাম এবং আইপি ঠিকানাটি দেখায় না?
ইসাগানিস্টেরন

সম্ভবত আপনি নিজের মেশিনে নেমসারভারটি কনফিগার করেছেন।
vncprado

গোলাপী কেবল
আন্দ্রেজ

33

কেবলমাত্র আইপি ঠিকানা পেতে নিম্নলিখিত চেষ্টা করুন:

who am i|awk '{ print $5}'

নিশ্চিত আপনি যদি হোমি লিখেন এবং আপনি লগ ইন করা ব্যবহারকারীর নাম পাবেন। দুঃখিত মুদ্রণের জন্য কোন পঞ্চম জিনিস বা আইপি নেই। তবে হোয়ামি হ'ল একটি দরকারী আদেশ
গেরার্ড

15
who am i! = whoamiকমপক্ষে আমার লিনাক্সে। একটি পঞ্চম জিনিস আছে, এবং এটি ক্লায়েন্টের হোস্ট নাম।
kulgrien

5
অন্য কেউ সম্পর্কে হতাশ জন্য who am i: র manpage জন্য whoবলেছেন: If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.। দুটি শব্দ কাজ সঙ্গে তাই সত্যিই কিছু, এছাড়াও কিছু পছন্দ who likes icecream
jmiserez

3
এই উত্তরের উপর ভিত্তি করে, আমি এটিকে কমিয়ে who -m --ips|awk '{print $5}'দিয়েছি যাতে আমার কাছে কেবল আইপি ছিল এবং কোনও বিপরীত ডিএনএস উত্তর নেই। সহায়তার জন্য ধন্যবাদ who am i!
ইভান

1
Tmux এর সাথে ব্যর্থ: who am i|awk '{ print $5}' (tmux(2445).%3)
অ্যালেক্সেক্স রোচে

19

আপনার লিনাক্স মেশিনে কেবল নিম্নলিখিত কমান্ডটি টাইপ করুন:

who


5
who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'


export DISPLAY=`who am i | awk '{print $5}' | sed 's/[()]//g' | cut -f1 -d "." | sed 's/-/./g'`:0.0

আমি এসএসএসের মাধ্যমে লগ ইন করার সময় সেশনের জন্য আমার ডিসপ্লে ভেরিয়েবলটি নির্ধারণ করতে এটি ব্যবহার করি এবং দূরবর্তী এক্স প্রদর্শন করা দরকার I


.Htaccess ফাইলগুলিতে আমার আইপি যুক্ত করতে একটি লাইনার কার্যকর। ধন্যবাদ. আমি ফ্রিবিএসডি-র জন্য একটি পরিবর্তন করেছি: who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g' শেষ অংশটি বিন্দুগুলি থেকে মুক্তি পেয়েছে।
অলিভিয়ার - ইন্টারফ্যাসিস

5

পূর্বের উত্তরে উন্নতি করা। হোস্টনামের পরিবর্তে আইপি ঠিকানা দেয়। --ips ওএস এক্স এ উপলব্ধ নেই not

who am i --ips|awk '{print $5}' #ubuntu 14

আরও সার্বজনীন, ওএস এক্স 10.11 এর জন্য $ 5 থেকে $ 6 পরিবর্তন করুন:

WORKSTATION=`who -m|awk '{print $5}'|sed 's/[()]//g'`
WORKSTATION_IP=`dig +short $WORKSTATION`
if [[ -z "$WORKSTATION_IP" ]]; then WORKSTATION_IP="$WORKSTATION"; fi
echo $WORKSTATION_IP


2

আপনি এটি একটি এসএসএইচ লাইব্রেরির মাধ্যমে প্রোগ্রামগত উপায়ে পেতে পারেন ( https://code.google.com/p/sshxcute )

public static String getIpAddress() throws TaskExecFailException{
    ConnBean cb = new ConnBean(host, username, password);
    SSHExec ssh = SSHExec.getInstance(cb);
    ssh.connect();
    CustomTask sampleTask = new ExecCommand("echo \"${SSH_CLIENT%% *}\"");
    String Result = ssh.exec(sampleTask).sysout;
    ssh.disconnect();   
    return Result;
}

1

নেটস্যাট কাজ করবে (শীর্ষে কিছু এ জাতীয়) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLISHED


এই উত্তরের জন্য আপনাকে অনেক ধন্যবাদ, আমি 'নেটস্ট্যাট' শেষ করেছি grep ssh '।
রস একেন

সুরক্ষার কারণে এটি খারাপ কারণ যে কেউ আপনাকেই নয়, সেই বন্দরের সাথে সংযুক্ত থাকতে পারে।
ক্রেজিস্টাস্টা

1
netstat -tapen | grep ssh | awk '{ print $10}'

আউটপুট:

আমার পরীক্ষায় দুই #

netstat -tapen | grep ssh | awk '{ print $4}' 

আইপি ঠিকানা দেয়।

আউটপুট:

127.0.0.1:22 # in my experiment

তবে ফলাফলগুলি অন্য ব্যবহারকারী এবং স্টাফের সাথে মিশ্রিত হয়। এটি আরও কাজ প্রয়োজন।


আমার নেটস্ট্যাটটি কেবলমাত্র আইভিভি 6 এর জন্য একটি ছাঁটাই ঠিকানা দেয় এবং "127.0.0.1:22" ক্লায়েন্টের পরিবর্তে সার্ভার, (যা প্রশ্নটিতে নির্দিষ্ট করা হয়েছিল
অ্যালেক্সেক্স রোচে

1

অনেক উত্তর সহ একটি পুরানো থ্রেড, তবে আমি যা সন্ধান করছিলাম তা পুরোপুরি কোনওটি নয়, তাই আমি আমার অবদান রাখছি:

sshpid=$$
sshloop=0
while [ "$sshloop" = "0" ]; do
        if [ "$(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT)" ];
then
                read sshClientIP sshClientSport sshClientDport <<< $(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT | cut -d= -f2)
                sshloop=1
        else
                sshpid=$(cat /proc/${sshpid}/status | grep PPid | awk '{print $2}')
                [ "$sshpid" = "0" ] && sshClientIP="localhost" && sshloop=1
        fi
done

এই পদ্ধতিটি সরাসরি ssh, sudoed ব্যবহারকারী এবং স্ক্রিন সেশনগুলির সাথে সামঞ্জস্যপূর্ণ। এটি এসএসএইচ_সিএলআইএনটি ভেরিয়েবলের সাথে একটি পিড না পাওয়া পর্যন্ত প্রক্রিয়া ট্রিটি অনুসরণ করবে এবং তার আইপিটিকে sh sshClientIP হিসাবে রেকর্ড করবে। যদি গাছটি খুব বেশি উপরে উঠে যায় তবে এটি আইপিটিকে 'লোকালহোস্ট' হিসাবে রেকর্ড করবে এবং লুপটি ছেড়ে যাবে।


0

সাধারণত / var / লগ / বার্তাগুলিতে (বা অনুরূপ, আপনার ওএসের উপর নির্ভর করে) একটি লগ এন্ট্রি থাকে যা আপনি ব্যবহারকারীর নাম দিয়ে গ্রেপ করতে পারেন।


0

লিনাক্স: কে আমি | awk '{মুদ্রণ $ 5}' | সেড / এস ([)) // জি '

এআইএক্স: কে আমি | awk '{মুদ্রণ $ 6}' | সেড / এস ([)) // জি '


0

"মাইউজারনেম" অ্যাকাউন্টের জন্য এসএসএইচ সংযোগগুলি অনুসন্ধান করুন;

প্রথম ফলাফলের স্ট্রিং নিন;

5 ম কলাম নিন;

":" দ্বারা বিভক্ত করুন এবং প্রথম অংশটি ফিরে করুন (পোর্ট নম্বরটির প্রয়োজন নেই, আমরা কেবল আইপি চাই):

netstat -tapen | grep "sshd: myusername" | মাথা -n1 | awk '{স্প্লিট ($ 5, a, ":"); একটি [1] print 'মুদ্রণ করুন


অন্য উপায়:

আমি কে | awk '{l = দৈর্ঘ্য ($ 5) - 2; মুদ্রণ সাবস্ট্রার ($ 5, 2, l)} '


sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'আমার ssh ক্লায়েন্টটি 2a02tmux(2445).%3
এসেছেন

0

ধরে নিই যে তিনি একটি ইন্টারেক্টিভ সেশনটি খুলছেন (এটি একটি সিডো টার্মিনাল বরাদ্দ করেছে ) এবং আপনার স্টিডিনের অ্যাক্সেস রয়েছে, আপনি ডিভাইস নম্বর (/ dev / pts / 4711) পেতে সেই ডিভাইসে একটি আইওএসটিএল কল করতে পারেন এবং এটিতে একটি সন্ধানের চেষ্টা করতে পারেন / var / run / utmp (যেখানে সেখানে ব্যবহারকারীর নাম এবং আইপি ঠিকানাটি সংযোগের উদ্ভব হয়েছিল)।


0

@ নিখিল ক্যাটর এর উত্তরের জন্য একটি থাম্ব:

সর্বশেষতম 10 টি ব্যবহারকারী মেশিনে লগ ইন করার জন্য সহজ কমান্ড last|head

সমস্ত ব্যবহারকারী পেতে কেবল lastকমান্ড ব্যবহার করুন

যেটি মূলত জিজ্ঞাসা করা হচ্ছে সেটি ব্যবহার করছে whoবা pinkyকরেছে। তবে তবে তারা historicalতিহাসিক সেশনগুলির তথ্য দেয় না।

আপনি এই চেকিং শুরু করার সাথে সাথে ইতিমধ্যে লগ ইন এবং লগ আউট হওয়া কাউকে জানতে চাইলে এটিও আকর্ষণীয় হতে পারে।

যদি এটি একটি মাল্টিউজার সিস্টেম হয়। আপনি যে ব্যবহারকারী অ্যাকাউন্টটি সন্ধান করছেন তা আমি পুনঃসামন্ডিত করি

last | grep $USER | head

সম্পাদনা করুন:

আমার ক্ষেত্রে, $ SSH_CLIENT এবং $ SSH_CONNECTION উভয়ই বিদ্যমান নেই।


0

সর্বশেষতম 10 টি ব্যবহারকারী মেশিনে লগ ইন করার জন্য সহজ কমান্ড last|head। সমস্ত ব্যবহারকারী পেতে, কেবল lastকমান্ড ব্যবহার করুন


0

আমি who -m --ipsদেবিয়ান 10 থেকে নিম্নলিখিত আউটপুটটি পাচ্ছি :

মূল pts / 0 ডিসেম্বর 4 06:45 123.123.123.123

দেখে মনে হচ্ছে একটি নতুন কলাম যুক্ত হয়েছিল, সুতরাং {print $5}" 5 ম কলাম নিন " প্রচেষ্টা আর কাজ করে না।

এটা চেষ্টা কর:

who -m --ips | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'

উৎস:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.