如何找出发起SSH连接的用户的用户名?
假设我从userA @ machine1到userB @ machine2的ssh。 现在我在machine2上,我怎么finduserA的用户名呢? 我可以访问(但不总是root访问)到这两台机器。 理想情况下,这不需要machine1上的任何特殊设置,但如果这是不可能的,那么我打开任何解决scheme。
假设在双方的Linux:
在machine2上运行netstat -nt并从machine1中查找连接。 它看起来像这样:
tcp 0 48 10.243.18.22:22 10.48.209.120:54875 ESTABLISHED
第一个ip:port是本地机器(即machine2)上的地址和端口,第二个是远程机器(本例中为machine1)的地址和端口。
login到machine1。 运行(以root身份) netstat -tpn | grep 54875 netstat -tpn | grep 54875 (其中54875是您在上一步中find的端口)。 这将显示原始ssh进程的PID,从中可以使用ps命令平凡地确定用户。
如果你在原始系统上运行一个ident守护进程,你可以避免很多这样的工作,但是(a)没有多less人这样做,因为它暴露了关于你的用户的信息,(b)很高兴知道该怎么做它。
你需要知道还是想知道? 我的意思是,从技术层面来说,因为没有远程机器上的root访问权限(你的设置中的“machine1”),所以没有办法权威地知道。 但是,你也许可以做出合理的猜测。 这有助于提供信息,但对安全性不利。
ident守护进程是老式的运行方式,但是由于在当前的世界中只是将用户信息免费提供给不可信站点是没有意义的,所以现代身份实现通常会给出一个encryption的结果。 这可以使用系统本身保存的秘密来解密。 但更经常的是,人们根本不运行ident守护进程。
如果你在machine1上有root权限,你可以用encryption运行identd并使用machine2上的密钥来find你的答案。 或者你可以做netstat东西, 但是,如果你没有根,你可以看看进程不作为根,并根据时间进行有根据的猜测。
或者,你可以从不同的angular度来处理这个问题。 如果身份保证是您所关心的问题,那么某种types的基于时间或计数器的encryptionOTP解决scheme可能会使您确信连接的远程用户是他们应该是的,无论他们连接到什么。
这由auth端口上运行的ident守护进程处理(authd,oidentd,pidentd等)。
难道你不能简单地在machine2上运行ps -aux吗?
我从Machine1 SSH到Machine2,这里是输出。 我甚至做了一个su根,我可以看到我连接的原始UID。
根31519 0.1 0.1 6512 1940? Ss 10:56 0:00 sshd:eric [priv]
eric 31521 0.0 0.1 6512 1224? S 10:56 0:00 sshd:eric @ pts / 0