答案 0 :(得分:230)
检查是否存在名为:
的环境变量$SSH_CLIENT
OR
$SSH_CONNECTION
(或任何其他环境变量)在用户登录时设置。然后使用用户登录脚本处理它。
提取IP:
$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
答案 1 :(得分:96)
您可以使用命令:
server:~# pinky
会给你这样的东西:
Login Name TTY Idle When Where
root root pts/0 2009-06-15 13:41 192.168.1.133
答案 2 :(得分:29)
请尝试以下方法获取IP地址:
who am i|awk '{ print $5}'
答案 3 :(得分:16)
只需在Linux计算机上键入以下命令:
who
答案 4 :(得分: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
我通过ssh登录时使用它来确定会话的DISPLAY变量,并且需要显示远程X.
答案 5 :(得分:3)
who | cut -d"(" -f2 |cut -d")" -f1
答案 6 :(得分:3)
改进先前的答案。提供IP地址而不是主机名。 - OS X上没有 - 。
def rank3(x,y,z, ascending=True):
return tuple(sorted((x,y,z), reverse=not ascending))
更通用,OS X 10.11改为5美元到6美元:
who am i --ips|awk '{print $5}' #ubuntu 14
答案 7 :(得分:2)
您可以通过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;
}
答案 8 :(得分:2)
netstat -tapen | grep ssh | awk '{ print $10}'
输出:
我实验中的两个#
netstat -tapen | grep ssh | awk '{ print $4}'
给出IP地址。
输出:
127.0.0.1:22 # in my experiment
但结果与其他用户和东西混在一起。它需要更多的工作。
答案 9 :(得分:2)
netstat -tapen | grep ssh | awk '{ print $4}'
答案 10 :(得分:1)
搜索" myusername"的SSH连接;帐户;
取第一个结果字符串;
取第5栏;
拆分":"并返回第一部分(端口号不需要,我们只需要IP):
netstat -tapen | grep" sshd:myusername" |头-n1 | awk' {split($ 5,a,":");打印[1]}'
另一种方式:
我是谁? awk' {l =长度($ 5) - 2; print substr($ 5,2,1 l)}'
答案 11 :(得分:1)
Linux:我是谁? awk'{print $ 5}'| sed's / [()] // g'
AIX:我是谁| awk'{print $ 6}'| sed's / [()] // g'
答案 12 :(得分:1)
netstat会起作用(在这样的顶部) tcp 0 0 10.x.xx.xx:ssh someipaddress.or.domainame:9379 ESTABLISHED
答案 13 :(得分:0)
通常在/ var / log / messages中有一个日志条目(或类似的,具体取决于您的操作系统),您可以使用用户名进行grep。
答案 14 :(得分:0)
一个有很多答案的老线程,但没有一个是我想要的,所以我在贡献我的:
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'并离开循环。
答案 15 :(得分:0)
让最后10个用户登录到计算机的最简单命令是
last|head
。要让所有用户只使用
last
命令
答案 16 :(得分:0)
假设他打开一个交互式会话(即分配一个pseudo terminal)并且你有权访问stdin,你可以call an ioctl on that device获取设备号(/ dev / pts / 4711)并尝试在/var/run/utmp中找到一个(其中也会有用户名和连接源自的IP地址)。
答案 17 :(得分:0)
@Nikhil Katre的答案:
获取最近10位登录到计算机的用户的最简单命令是
last|head
。要获取所有用户,只需使用
last
命令
使用who
或pinky
的人做了基本要求的事情。但是,但是他们不提供历史会议信息。
如果您想认识刚登录的人并且 您开始进行此检查时已经注销。
(如果它是多用户系统)。我建议添加您要查找的用户帐户:
last | grep $USER | head
编辑:
就我而言,$ SSH_CLIENT和$ SSH_CONNECTION都不存在。
答案 18 :(得分:0)
我从who -m --ips
的Debian 10上获得以下输出:
root pts / 0 Dec 4 06:45 123.123.123.123
好像添加了新列,因此{print $5}
或“ 排第5列”的尝试不再起作用。
尝试一下:
who -m --ips | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
来源:
答案 19 :(得分:-3)
尝试以下方法通过SSH获取IP地址:
Command: ifconfig
示例:
stalinrajindian@ubuntuserver:~$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.30.3.27 netmask 255.255.255.0 broadcast 172.30.3.255
inet6 fe80::a00:27ff:fe8b:9986 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:8b:99:86 txqueuelen 1000 (Ethernet)
RX packets 4876 bytes 1951791 (1.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 775 bytes 73783 (73.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 78 bytes 5618 (5.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 78 bytes 5618 (5.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0