Answers:
检查是否有一个环境变量称为:
$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
这样会给您带来一些麻烦:
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
至少在我的Linux上是!= 。还有第五件事,它是客户端的主机名。
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而没有反向DNS答案。感谢您的帮助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地址而不是主机名。--ips在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.or.domainame:9379已建立
一个较旧的线程,有很多答案,但是没有一个是我一直在寻找的东西,所以我为我做贡献:
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,受过激励的用户和屏幕会话兼容。它会一直跟踪到进程树,直到找到带有SSH_CLIENT变量的pid,然后将其IP记录为$ sshClientIP。如果距离树太远,它将IP记录为“ localhost”并离开循环。
搜索“ myusername”帐户的SSH连接;
取第一个结果字符串;
取第五列;
用“:”分隔并返回第一部分(不需要端口号,我们只需要IP):
netstat -tapen | grep“ sshd:myusername” | 头-n1 | awk'{split($ 5,a,“:”); 打印一个[1]}'
其他方式:
我是谁| awk'{l = length($ 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
假设他打开了一个交互式会话(即分配了一个伪终端)并且您可以访问stdin,则可以在该设备上调用一个ioctl来获取设备编号(/ dev / pts / 4711)并尝试在其中找到一个/ var / run / utmp(其中还将包含连接源的用户名和IP地址)。
获取最近10位登录到计算机的用户的最简单命令是last|head
。要获得所有用户,只需使用last
命令
我从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}'
资源: