답변:
다음과 같은 환경 변수가 있는지 확인하십시오.
$SSH_CLIENT
또는
$SSH_CONNECTION
(또는 다른 환경 변수) 사용자가 로그인 할 때 설정됩니다. 그런 다음 사용자 로그인 스크립트를 사용하여 처리하십시오.
IP를 추출하십시오.
$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
${SSH_CLIENT%% *}
sudo -E
다음 명령을 사용할 수 있습니다.
server:~# pinky
그것은 당신에게 다음과 같은 somehting을 줄 것입니다 :
Login Name TTY Idle When Where
root root pts/0 2009-06-15 13:41 192.168.1.133
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
IP 주소 만 얻으려면 다음을 시도하십시오.
who am i|awk '{ print $5}'
who am i
! = whoami
적어도 내 리눅스에서는. 다섯 번째는 클라이언트의 호스트 이름입니다.
who am i
점이 있으시면 다음 페이지를 참조 who
하십시오 If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. 따라서 실제로 두 단어가있는 모든 것이 작동합니다 who likes icecream
.
who -m --ips|awk '{print $5}'
IP 만 있고 리버스 DN 응답이 없도록 줄였습니다 . 도움을 주셔서 감사합니다 who am i
!
who am i|awk '{ print $5}'
(tmux(2445).%3)
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
이것을 사용하여 ssh를 통해 로그인 할 때 세션의 DISPLAY 변수를 결정하고 원격 X를 표시해야합니다.
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
. 마지막 부분은 점을 피합니다.
사전 답변 개선. 호스트 이름 대신 IP 주소를 제공합니다. --ip는 OS X에서 사용할 수 없습니다.
who am i --ips|awk '{print $5}' #ubuntu 14
보다 보편적 인 OS X 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
netstat -tapen | grep ssh | awk '{ print $4}'
(No info could be read for "-p": geteuid()=507 but you should be root.)
sudo ss -tapen | grep ssh | awk '{ print $4}'|grep -v ':22$'
작동합니까?
SSH 라이브러리를 통해 프로그래밍 방식으로 얻을 수 있습니다 ( 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;
}
netstat는 (이와 같은 최상위에서) 작동합니다 tcp 0 0 10.x.xx.xx : ssh someipaddress. 또는
netstat -tapen | grep ssh | awk '{ print $10}'
산출:
내 실험에서 두 #
netstat -tapen | grep ssh | awk '{ print $4}'
IP 주소를 제공합니다.
산출:
127.0.0.1:22 # in my experiment
그러나 결과는 다른 사용자 및 물건과 혼합되어 있습니다. 더 많은 작업이 필요합니다.
많은 답변을 가진 오래된 스레드이지만 아무도 내가 찾고있는 것이 아니므로 내 공헌하고 있습니다.
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 사용자 및 스크린 세션과 호환됩니다. SSH_CLIENT 변수로 pid를 찾을 때까지 프로세스 트리를 추적 한 다음 IP를 $ sshClientIP로 기록합니다. 트리에서 너무 멀어지면 IP를 'localhost'로 기록하고 루프를 떠납니다.
"myusername"계정에 대한 SSH 연결을 검색하십시오.
첫 번째 결과 문자열을 가져옵니다.
다섯 번째 열을 가져 가라.
":"으로 나누고 첫 번째 부분을 반환합니다 (포트 번호는 필요하지 않으며 IP 만 원함).
netstat -tapen | grep "sshd : myusername"| 헤드 -n1 | awk '{split ($ 5, a, ":"); 인쇄 [1]} '
또 다른 방법:
나는 누구인가 | awk '{l = 길이 ($ 5)-2; 인쇄 substr ($ 5, 2, l)} '
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
라고 내 ssh 클라이언트는 출신 2a02
과 "또 다른 방법 :"말한다tmux(2445).%3
@Nikhil Katre의 답변에 대한 하나의 엄지 손가락 :
마지막 10 명의 사용자가 컴퓨터에 로그인하도록하는 가장 간단한 명령은
last|head
입니다.모든 사용자가 단순히
last
명령을 사용하게하려면
기본적으로 요구되는 것을 사용 who
하거나 pinky
수행 한 사람 . 그러나 그러나 그들은 역사적인 세션 정보를 제공하지 않습니다.
이 검사를 시작할 때 방금 로그인하고 로그 아웃 한 사람을 알고 싶은 경우에도 흥미로울 수 있습니다.
다중 사용자 시스템 인 경우 찾고있는 사용자 계정을 추가하십시오.
last | grep $USER | head
편집하다:
필자의 경우 $ SSH_CLIENT와 $ SSH_CONNECTION이 모두 존재하지 않습니다.
who -m --ips
데비안 10 에서 다음과 같은 결과가 나타납니다 .
루트 pts / 0 12 월 4 일 06:45 123.123.123.123
새 열이 추가 된 것 같습니다. {print $5}
" 5 번째 열을 가져옵니다 "시도가 더 이상 작동하지 않습니다.
이 시도:
who -m --ips | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
출처: