linux ssh pinky,在SSH会话中查找客户端的IP地址

回答(19)

e15298c6a3b4591803e154ab0c3b3e2e.png

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以使用以下命令:

server:~# pinky

会给你这样的东西:

Login Name TTY Idle When Where

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

请尝试以下方法获取IP地址:

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只需在Linux机器上键入以下命令:

who

e15298c6a3b4591803e154ab0c3b3e2e.png

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.

e15298c6a3b4591803e154ab0c3b3e2e.png

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

e15298c6a3b4591803e154ab0c3b3e2e.png

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

但结果与其他用户和东西混在一起 . 它需要更多的工作 .

e15298c6a3b4591803e154ab0c3b3e2e.png

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;

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

who | cut -d"(" -f2 |cut -d")" -f1

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

netstat将工作(在这样的顶部)tcp 0 0 10.x.xx.xx:ssh someipaddress.or.domainame:9379 ESTABLISHED

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

Linux:我是谁? awk'{print $ 5}'| sed's / [()] // g'

AIX:我是谁? awk'{print $ 6}'| sed's / [()] // g'

e15298c6a3b4591803e154ab0c3b3e2e.png

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)}'

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

通常在/ var / log / messages(或类似的,取决于您的操作系统)中有一个日志条目,您可以使用用户名grep .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

假设他打开一个交互式会话(即,分配pseudo terminal)并且您可以访问stdin,您可以call an ioctl on that device获取设备编号(/ dev / pts / 4711)并尝试在/var/run/utmp中查找该编号(其中也会有是连接源自的用户名和IP地址) .

e15298c6a3b4591803e154ab0c3b3e2e.png

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'并离开循环 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

最简单的命令,让最后10个用户登录到该机器是最后的 . 要让所有用户只使用最后一个命令

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

一个拇指为@Nikhil Katre的回答:

最简单的命令,让最后10个用户登录到该机器是最后的 . 要让所有用户只使用最后一个命令

使用 who 或 pinky 的人做了基本上要求的 . 但是但是他们没有提供历史 Session 信息 .

如果你想知道在你开始检查时已经登录并注销的人,这也可能会很有趣 .

如果它是一个多用户系统 . 我建议添加您要查找的用户帐户:

last | grep $USER | head

编辑:

就我而言,$ SSH_CLIENT和$ SSH_CONNECTION都不存在 .

e15298c6a3b4591803e154ab0c3b3e2e.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值