我有一个脚本,由使用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

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

  1. 如何在Node.js中获取本机本地IP地址

    最近在做Cloud related的项目时,遇到一个问题,就是如何在Node.js中获取本机的IP地址.Node.js提供的API中,只能获取本机的hostname. os = require('os ...

  2. 域环境下用组策略禁止客户机更改IP

    转自:http://caixu687.blog.51cto.com/301253/172302 在企业网络里,我们有时会用到通过IP地址来控制员工上网这种方法,有些用户是不是经常通过修改自己的IP地址 ...

  3. linux 获取ip地址命令行,linux获取ip_shell命令获取linux下eth0的IP地址

    摘要 腾兴网为您分享:shell命令获取linux下eth0的IP地址,我画你猜,万豪金业,调音器,时光机器等软件知识,以及usb2.0webcamera,蚂蚁,粤菜菜谱,怪物闹钟,帮我吧,英文小说, ...

  4. linux设置mac地址命令,[转载]Linux下修改MAC地址

    转自http://blogold.chinaunix.net/u3/94284/showart_2430693.html Linux下修改MAC地址 方法一: 1.关闭网卡设备 ifconfig et ...

  5. linux系统进入管理员命令行,Linux的15个命令行别名,帮系统管理员提升工作效率!...

    Linux命令行别名非常适合帮助你提高工作效率.默认情况下,你安装的Linux发行版中包含一些别名. 以下是Fedora 27中命令行别名的一个示例: 命令alias显示现有别名的列表.设置别名其实很 ...

  6. linux下的网络管理命令,常用linux网络管理命令(下)

    常用linux网络管理命令(下) ip:更改或显示路由.IP.协议等信息 ip link:接口管理 show [DEVICE]:显示网卡接口信息 set [DEVICE] [up | down]:开启 ...

  7. linux服务器性能查看命令,查看Linux服务器性能的日常命令和工具大全

    通过使用以下命令和工具,可以在1分钟内对系统资源使用情况有个大致的了解uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz ...

  8. linux启用网卡的命令是,Linux网络配置命令

    Linux 系统中最常用的网络配置命令包括ifconfig. route ,其中ifconfig 用来查看和配置网络接口(通常是网卡)信息,包括网络接口设备的IP 地址.掩码等:route 用来管理L ...

  9. linux结束所有任务命令行,Linux基础命令(15)定时任务

    释放双眼,带上耳机,听听看~! crontad Linux定时任务Crontab命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计 ...

最新文章

  1. 2022-2028年中国超声波探伤仪行业市场现状调研及发展前景分析报告
  2. 欧几里得距离网络_使用Tensorflow对象检测模型和OpenCV的社交距离和遮罩检测器...
  3. md5模式 签名_MD的完整形式是什么?
  4. 代码扫描工具测试覆盖率工具
  5. 关于java static 关键字
  6. 关于PHP的错误机制总结
  7. MFC dialog 间 交互[2]
  8. 最新出炉|也许你该看看这份的模型数据
  9. 【Java】导入项目时,出现The project cannot be built until build path errors are resolved错误解决方法
  10. Oracle 连接查询一
  11. python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
  12. 计算机毕业设计Java小小银动漫网站(源码+系统+mysql数据库+Lw文档)
  13. 使用Javascript动态添加和删除元素
  14. C语言中字符‘0‘和‘\0‘,及整数0的区别
  15. 朋友,我真诚的劝你别网贷
  16. python 绘制多分类变量折线图
  17. 关于头条上需要总结的文章
  18. 红绿灯检测之模板匹配呸呸呸呸
  19. Linux-查看进程
  20. 谷歌验证码reCAPTCHA的运用

热门文章

  1. 【已解决】显示屏没有问题,主机电源键按不开机怎么办?
  2. 【日期类问题】例2.2 Day of week
  3. python中的struct模块
  4. css小技巧 ----- 使用border制作一个小三角形图标
  5. 内存读写函数实现进程间通信
  6. DirectX11 With Windows SDK--07 添加光照与常用几何模型、光栅化状态
  7. USB 协议分析之 HID 设备(转)
  8. [转]程序员应打破牢笼,展望更高层次的世界
  9. HashMap学习之transient
  10. CentOS6.5安装tomcat7