【问题标题】:Get Windows username from Bash Unix shell?从 Bash Unix shell 获取 Windows 用户名?
【发布时间】:2019-04-17 10:36:48
【问题描述】:

有没有办法直接在 Bash 中获取连接到特定 Unix 环境的用户的 Windows 用户名,始终使用相同的服务器凭据?

一些背景

有 N 个用户,他们可以连接到 M 个不同的 Unix 环境,在 Unix 上总是使用相同的凭据:someusername,没有密码。 基本上,

  • Windows 用户“Matteo”在计算机“PMatteo.fr.company.com”上打开了一个 Windows 会话。
  • 此用户使用 Putty 在 Linux 机器 linuxMachine 上打开一个 SSH 会话。
  • 登录始终使用相同的“假”凭据:someusername,无密码,用户已登录。

在 Unix 环境中,因此使用 bash 命令,我想检索 Windows 用户名“Matteo”。

到目前为止我的研究

以下命令:

echo $(who am i) | cut -d "(" -f2 | cut -d ")" -f1

显示两种输出,具体取决于我连接到的机器:

  • 有时会直接显示机器名PMatteo.fr.company.com
  • 其他时候,它只显示 IP 地址(例如 45.32.4.19),但这很好,因为我可以使用命令 nslookup 45.32.4.19 找到机器名称。

我的问题

有什么方法可以使用 Bash 脚本直接访问 Windows 用户名?我可以(非常)轻松地找到机器名称,所以我相信 Windows 用户名可能存储在某个地方,我只是不知道如何并且在网络上的任何地方都找不到它。 有没有人有任何提示?我的 bash 版本是 4.1.2(1)。

目的

从 windows 用户名,我总是可以重建用户的邮件地址。有时用户启动可能会影响其他用户的命令,但由于他们总是使用相同的用户名连接(讲 Unix 的),所以没有人知道实际执行该命令的是谁。 如果其他人想要求停止他们正在做的事情,能够通过电子邮件与他们联系会很好。

【问题讨论】:

  • echo $(who am i)...你的意思是whoami还是who
  • 在我的 Windows 10 系统上,Ubuntu Bash shell 中的whoami 提供了我的 Windows 10 登录名。那是你在谈论的bash shell吗?还不是很清楚。
  • @lurker 我认为whoami 打印您的Windows 用户名只是巧合。您可以在 WSL 中拥有多个用户,并且他们的名称可以与 windows 用户不同。
  • @Socowi 我的意思是who am i,带有空格。它打印出如下内容:unix_user pts/3 Apr 17 09:46 (IP address)。也许它是一个内部别名,我认为它是一个 unix 内置的?
  • @lurker 是的,我认为这是巧合,对我来说并非如此(我得到的是 unix 的用户名)。

标签: bash unix


【解决方案1】:

简单的答案是否定的。

您不会将此信息传输到您的 Unix/Linux 服务器,因为您始终使用 someuser 的凭据登录。

因为您可以从 PC 的主机名派生用户名,所以您也许可以派生 windows 用户名,但这有许多缺陷:

  • (ab)使用 PC 的其他人被映射到该 PC 的所有者,即使他们使用自己的帐户登录。
  • 如果有人将恶意 PC 连接到网络,则用户名可能不是来自其主机名。'

您可以尝试从 Linux 机器访问 Windows 客户端。但这要求所有客户端都可以从 Linux 访问(rdp、telnet、powers hell、ssh 服务器或类似的东西,当然还有 Windows 上的授权)。然后您可能会查看当时谁登录(并希望它只是一个用户)。

【讨论】:

  • 谢谢你的回答,我明白你的意思,我想我实际上不得不接受没有办法:(
【解决方案2】:

在 Putty 中,转到 Connection->SSH->Remote command 并添加这个,

env WINUSER=yourname bash

然后连接。那应该在远程shell环境中设置环境变量WINUSER

这假设了一个受信任的环境,因为任何人都可以在登录时伪造设置。

(这可能会碰到https://superuser.com

【讨论】:

  • 非常感谢,但是这需要重新配置每个 Putty 客户端,而且对于这么多人来说,这在我的水平上是不可行的 :) 无论如何感谢您的参考!
  • 仍在考虑您的问题,echo $SSH_CONNECTION | cut -d" " -f1 应该始终如一地返回客户端的 IP 地址(有时不返回名称)。您仍然需要手动设置 ip:name 的映射。为此,我可能会编写一个 Python 脚本。
猜你喜欢
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多