当前位置:   article > 正文

linux ssh ip地址命令,关于Linux:在ssh会话中查找客户机的IP地址

linux ssh ip地址命令,关于Linux:在ssh会话中查找客户机的IP地址

我有一个脚本,由使用ssh登录到服务器的人运行。

有没有办法自动找出用户连接的IP地址?

当然,我可以问用户(这是一个程序员的工具,所以没问题),但如果我刚刚发现的话,会更酷。

建议转到服务器故障,不过还是个很好的问题

检查是否存在名为:

$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

@cwd我想替换这个命令"iptables-a input-s 93.203.118.251-p tcp--destination port 443-j drop"中的IP,这是可能的吗?

这是我的远程主机。

仅适用于非sudoed用户。例如,如果您有一个ssh用户,然后升级到根目录,那么将创建一个新的shell,并且这些变量将丢失,除非您可以通过树进行跟踪以找到原始ssh pid并从/proc/$pid/environn获取变量。

由于stackoverflow.com/questions/428109/extract-substring-in-bash,这个答案可以简单地改进为${SSH_CLIENT%% *}。

@安德烈调查了埃多克斯1〔1〕。

您可以使用以下命令:

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.

为什么输出中的my'where'只显示机器名而不显示IP地址?

可能您的计算机中配置了名称服务器。

Pinky将显示所有登录用户,而不仅仅是您自己。

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

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

很肯定,如果你写下whoami,你会得到登录用户的名字。没有第五件事或IP要打印抱歉。但是whoami是一个有用的命令

EDOCX1,4!=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的帮助!

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

who

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登录并需要显示远程x时,我使用它来确定会话的显示变量。

有用的一行程序将我的IP添加到.htaccess文件。谢谢您。我对freebsd做了修改:who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g',最后一部分避开了点。

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

改进先前的答案。提供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}'

不适用于CentOS 6.9(net tools 1.60 netstat 1.42)(No info could be read for"-p": geteuid()=507 but you should be root.)。

您可以通过一个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 -tapen | grep ssh | awk '{ print $10}'

输出:

两个在我的实验中

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

给出IP地址。

输出:

127.0.0.1:22 # in my experiment

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

搜索"myusername"帐户的ssh连接;

取第一个结果字符串;

取第5列;

拆分为":"并返回第一部分(不需要端口号,我们只需要IP):

netstat-tapen grep"sshd:myusername"head-n1 awk'split($5,a,":");打印一个[1]"

另一种方式:

我是谁awk'l=长度($5)-2;打印子行($5,2,l)

linux:我是谁awk'打印$5'sed's/[()]//g'

艾克斯:我是谁awk'打印$6'sed's/[()]//g'

netstat可以工作(在顶部,类似这样)TCP 0 0 10.x.x x.x x:ssh someipaddress.or.domainame:9379已建立

非常感谢您的回答,我最后做了"netstat grep ssh"。

出于安全考虑,这很糟糕,因为任何人都可以连接到那个端口,而不仅仅是你。

一个大拇指指向@nikhil katre的答案:

Simplest command to get the last 10 users logged in to the machine is last|head.

To get all the users simply use last command

使用who或pinky的人做了基本要求。但他们不提供历史会议信息。

如果你想认识一个刚刚登录的人,开始检查时已注销。

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

last | grep $USER | head

编辑:

在我的例子中,$ssh_客户机和$ssh_连接都不存在。

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

一个有很多答案的老线索,但没有一个是我正在寻找的,所以我贡献了我的:

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_客户机变量的PID,然后将其IP记录为$ssh client ip。如果它在树上走得太远,它会将IP记录为"localhost",然后离开循环。

Simplest command to get the last 10 users logged in to the machine is

last|head.

To get all the users simply use last command

假设他打开一个交互式会话(即,分配一个伪终端),并且您可以访问stdin,那么您可以在该设备上调用ioctl来获取设备号(/dev/pts/4711),并尝试在/var/run/utmp中找到该设备号(其中还将有用户名和连接来源的IP地址)。

尝试以下操作,仅通过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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/205502
推荐阅读
相关标签
  

闽ICP备14008679号