在SSH会话中查找客户端的IP地址

fly*_*ire 151 linux ssh networking ip-address

我有一个脚本由一个用SSH登录服务器的人运行.

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

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

小智 243

检查是否有一个名为的环境变量:

$SSH_CLIENT 
Run Code Online (Sandbox Code Playgroud)

要么

$SSH_CONNECTION
Run Code Online (Sandbox Code Playgroud)

(或任何其他环境变量)在用户登录时设置.然后使用用户登录脚本处理它.

提取IP:

$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
Run Code Online (Sandbox Code Playgroud)

  • 仅适用于非sudoed用户.例如,如果您有一个ssh用户,然后升级到root,则会创建一个新的shell并且这些变量会丢失,除非您可以追溯到树中找到原始的ssh pid并从/ proc/$ PID/environ获取变量 (4认同)
  • 多亏了/sf/ask/29967661/,这个答案可以改进为简单的`$ {SSH_CLIENT %% *}`。 (4认同)
  • 这对我来说是REMOTEHOST. (2认同)
  • @Andrej 看看 `sudo -E` (2认同)

vnc*_*ado 101

您可以使用以下命令:

server:~# pinky
Run Code Online (Sandbox Code Playgroud)

会给你这样的东西:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133
Run Code Online (Sandbox Code Playgroud)

  • 那太棒了:-)书呆子幽默再一次.根据`pinky --help`:`一个轻量级的'手指'程序; 打印用户信息.utmp文件将是/ var/run/utmp (13认同)

小智 29

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

who am i|awk '{ print $5}'
Run Code Online (Sandbox Code Playgroud)

  • 至少在我的Linux上是谁?我``=`whoami`.还有第五件事,它是客户端的主机名. (15认同)
  • 对于其他任何想知道"我是谁"的人:"who"的联机帮助页:`如果ARG1 ARG2给出,-m推测:'我是'或'妈妈喜欢'是通常的.所以任何有两个单词的东西都有用,也喜欢"谁喜欢冰淇淋". (4认同)
  • 在这个答案的基础上,我把它减少到`who -m --ips | awk'{print $ 5}'`这样我只有IP而且没有反向dns答案.感谢"我是谁"的帮助! (3认同)
  • tmux 失败: `who am i|awk '{ print $5}'` `(tmux(2445).%3)` (2认同)

小智 19

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

who
Run Code Online (Sandbox Code Playgroud)


小智 11

 who | cut -d"(" -f2 |cut -d")" -f1
Run Code Online (Sandbox Code Playgroud)


小智 5

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
Run Code Online (Sandbox Code Playgroud)

我通过ssh登录时使用它来确定会话的DISPLAY变量,并且需要显示远程X.


小智 5

改进先前的答案。提供 IP 地址而不是主机名。--ips 在 OS X 上不可用。

who am i --ips|awk '{print $5}' #ubuntu 14
Run Code Online (Sandbox Code Playgroud)

更通用,将 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
Run Code Online (Sandbox Code Playgroud)


Nik*_*tre 5

获取最近登录计算机的用户列表的简单命令是last。这是最近的第一个排序,因此last | head -n 1将显示最后一次登录。但这可能不是当前登录的用户。

示例输出:

root     pts/0        192.168.243.99   Mon Jun  7 15:07   still logged in   
admin    pts/0        192.168.243.17   Mon Jun  7 15:06 - 15:07  (00:00)    
root     pts/0        192.168.243.99   Mon Jun  7 15:02 - 15:06  (00:03)    
root     pts/0        192.168.243.99   Mon Jun  7 15:01 - 15:02  (00:00)    
root     pts/0        192.168.243.99   Mon Jun  7 13:45 - 14:12  (00:27)    
root     pts/0        192.168.243.99   Mon May 31 11:20 - 12:35  (01:15)    
...
Run Code Online (Sandbox Code Playgroud)