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
linux ssh ip地址命令,关于Linux:在ssh会话中查找客户机的IP地址相关推荐
- 如何在Node.js中获取本机本地IP地址
最近在做Cloud related的项目时,遇到一个问题,就是如何在Node.js中获取本机的IP地址.Node.js提供的API中,只能获取本机的hostname. os = require('os ...
- 域环境下用组策略禁止客户机更改IP
转自:http://caixu687.blog.51cto.com/301253/172302 在企业网络里,我们有时会用到通过IP地址来控制员工上网这种方法,有些用户是不是经常通过修改自己的IP地址 ...
- linux 获取ip地址命令行,linux获取ip_shell命令获取linux下eth0的IP地址
摘要 腾兴网为您分享:shell命令获取linux下eth0的IP地址,我画你猜,万豪金业,调音器,时光机器等软件知识,以及usb2.0webcamera,蚂蚁,粤菜菜谱,怪物闹钟,帮我吧,英文小说, ...
- linux设置mac地址命令,[转载]Linux下修改MAC地址
转自http://blogold.chinaunix.net/u3/94284/showart_2430693.html Linux下修改MAC地址 方法一: 1.关闭网卡设备 ifconfig et ...
- linux系统进入管理员命令行,Linux的15个命令行别名,帮系统管理员提升工作效率!...
Linux命令行别名非常适合帮助你提高工作效率.默认情况下,你安装的Linux发行版中包含一些别名. 以下是Fedora 27中命令行别名的一个示例: 命令alias显示现有别名的列表.设置别名其实很 ...
- linux下的网络管理命令,常用linux网络管理命令(下)
常用linux网络管理命令(下) ip:更改或显示路由.IP.协议等信息 ip link:接口管理 show [DEVICE]:显示网卡接口信息 set [DEVICE] [up | down]:开启 ...
- linux服务器性能查看命令,查看Linux服务器性能的日常命令和工具大全
通过使用以下命令和工具,可以在1分钟内对系统资源使用情况有个大致的了解uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz ...
- linux启用网卡的命令是,Linux网络配置命令
Linux 系统中最常用的网络配置命令包括ifconfig. route ,其中ifconfig 用来查看和配置网络接口(通常是网卡)信息,包括网络接口设备的IP 地址.掩码等:route 用来管理L ...
- linux结束所有任务命令行,Linux基础命令(15)定时任务
释放双眼,带上耳机,听听看~! crontad Linux定时任务Crontab命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计 ...
最新文章
- 2022-2028年中国超声波探伤仪行业市场现状调研及发展前景分析报告
- 欧几里得距离网络_使用Tensorflow对象检测模型和OpenCV的社交距离和遮罩检测器...
- md5模式 签名_MD的完整形式是什么?
- 代码扫描工具测试覆盖率工具
- 关于java static 关键字
- 关于PHP的错误机制总结
- MFC dialog 间 交互[2]
- 最新出炉|也许你该看看这份的模型数据
- 【Java】导入项目时,出现The project cannot be built until build path errors are resolved错误解决方法
- Oracle 连接查询一
- python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
- 计算机毕业设计Java小小银动漫网站(源码+系统+mysql数据库+Lw文档)
- 使用Javascript动态添加和删除元素
- C语言中字符‘0‘和‘\0‘,及整数0的区别
- 朋友,我真诚的劝你别网贷
- python 绘制多分类变量折线图
- 关于头条上需要总结的文章
- 红绿灯检测之模板匹配呸呸呸呸
- Linux-查看进程
- 谷歌验证码reCAPTCHA的运用