回答(19)
2 years ago
检查是否有一个名为的环境变量:
$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
2 years ago
您可以使用以下命令:
server:~# pinky
会给你这样的东西:
Login Name TTY Idle When Where
root root pts/0 2009-06-15 13:41 192.168.1.133
2 years ago
请尝试以下方法获取IP地址:
who am i|awk '{ print $5}'
2 years ago
只需在Linux机器上键入以下命令:
who
2 years ago
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.
2 years ago
改进先前的答案 . 提供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
2 years ago
netstat -tapen | grep ssh | awk '{ print $4}'
2 years ago
netstat -tapen | grep ssh | awk '{ print $10}'
输出:
在我的实验中有两个#
netstat -tapen | grep ssh | awk '{ print $4}'
给出IP地址 .
输出:
127.0.0.1:22 # in my experiment
但结果与其他用户和东西混在一起 . 它需要更多的工作 .
2 years ago
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;
}
2 years ago
who | cut -d"(" -f2 |cut -d")" -f1
2 years ago
netstat将工作(在这样的顶部)tcp 0 0 10.x.xx.xx:ssh someipaddress.or.domainame:9379 ESTABLISHED
2 years ago
Linux:我是谁? awk'{print $ 5}'| sed's / [()] // g'
AIX:我是谁? awk'{print $ 6}'| sed's / [()] // g'
2 years ago
搜索“myusername”帐户的SSH连接;
取第一个结果字符串;
取第5列;
按“:”拆分并返回第一部分(不需要端口号,我们只需要IP):
netstat -tapen | grep“sshd:myusername”|头-n1 | awk'{split($ 5,a,“:”);打印[1]}'
其他方式:
我是谁? awk'{l =长度($ 5) - 2; print substr($ 5,2,1)}'
2 years ago
通常在/ var / log / messages(或类似的,取决于您的操作系统)中有一个日志条目,您可以使用用户名grep .
2 years ago
假设他打开一个交互式会话(即,分配pseudo terminal)并且您可以访问stdin,您可以call an ioctl on that device获取设备编号(/ dev / pts / 4711)并尝试在/var/run/utmp中查找该编号(其中也会有是连接源自的用户名和IP地址) .
2 years ago
一个较老的帖子,有很多答案,但没有一个是我想要的,所以我贡献我的:
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'并离开循环 .
2 years ago
最简单的命令,让最后10个用户登录到该机器是最后的 . 要让所有用户只使用最后一个命令
2 years ago
一个拇指为@Nikhil Katre的回答:
最简单的命令,让最后10个用户登录到该机器是最后的 . 要让所有用户只使用最后一个命令
使用 who 或 pinky 的人做了基本上要求的 . 但是但是他们没有提供历史 Session 信息 .
如果你想知道在你开始检查时已经登录并注销的人,这也可能会很有趣 .
如果它是一个多用户系统 . 我建议添加您要查找的用户帐户:
last | grep $USER | head
编辑:
就我而言,$ SSH_CLIENT和$ SSH_CONNECTION都不存在 .
2 years ago
尝试以下方法通过SSH获取IP地址:
Command: ifconfig
例:
stalinrajindian@ubuntuserver:~$ ifconfig
enp0s3: flags=4163 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
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 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
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