Получить имя пользователя Windows из оболочки Bash Unix?

#bash #unix

#bash #unix

Вопрос:

Есть ли способ получить имя пользователя Windows пользователя, который подключается к определенной среде Unix, используя всегда одни и те же учетные данные сервера, непосредственно в Bash?

Некоторая предыстория

Существует совокупность из N пользователей, которые могут подключаться к M различным средам Unix, всегда используя одни и те же учетные данные в Unix: someusername, без пароля. В основном,

  • У пользователя Windows «Matteo» открыт сеанс Windows на компьютере « PMatteo.fr.company.com «.
  • Этот пользователь открывает SSH сеанс на компьютере с Linux linuxMachine , используя Putty.
  • Вход в систему всегда выполняется с использованием одних и тех же «поддельных» учетных данных: 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) всегда с одним и тем же именем пользователя, никто не знает, кто на самом деле выполняет команду. Было бы неплохо иметь возможность связаться с ними по электронной почте на случай, если кто-то еще захочет попросить прекратить то, что они делают.

Комментарии:

1. echo $(who am i) … вы имели в виду whoami или просто who ?

2. В моей системе Windows 10 whoami в оболочке Ubuntu Bash указывается мое имя для входа в Windows 10. Это та самая оболочка bash, о которой ты говоришь? Это не совсем ясно.

3. @lurker Я думаю, что whoami печать вашего имени пользователя Windows — это просто совпадение. Внутри WSL может быть несколько пользователей, и у них могут быть разные имена, чем у пользователя Windows.

4. @Socowi я имею в виду who am i , с пробелами. Он печатает что-то вроде этого : unix_user pts/3 Apr 17 09:46 (IP address) . Может быть, это внутренний псевдоним, и я подумал, что это встроенный в unix?

5. @lurker да, я думаю, что это совпадение, для меня это не так (вместо этого я получаю имя пользователя unix).

Ответ №1:

Простой ответ — нет.

Вы не передаете эту информацию на свой сервер Unix / Linux, потому что вы всегда входите в систему с учетными someuser данными .

Поскольку вы можете получить имя пользователя из имени хоста вашего компьютера, вы можете получить имя пользователя Windows, но это имеет ряд недостатков:

  • кто-то другой, кто (ab) использует компьютер, сопоставляется с владельцем этого компьютера, даже если он входит в систему со своей собственной учетной записью.
  • если кто-то подключает к сети чужой компьютер, имя пользователя может не быть производным от его имени хоста. ‘

Что вы можете попробовать, так это получить доступ к клиенту Windows из окна Linux. Но для этого требуется, чтобы все клиенты были доступны из Linux (rdp, telnet, powers hell, ssh-сервер или что-то в этом роде, и, конечно, авторизация в Windows). Затем вы можете посмотреть, кто вошел в систему в это время (и надеюсь, что это только один пользователь).

Комментарии:

1. Спасибо за ваш ответ, я понимаю вашу точку зрения, я думаю, мне придется фактически признать, что нет никакого способа: (

Ответ №2:

В Putty перейдите в раздел Подключение-> SSH-> Удаленная команда и добавьте это,

env WINUSER=yourname bash

затем подключитесь. Это должно установить переменную среды WINUSER в среде удаленной оболочки.

Это предполагает надежную среду, поскольку любой может подделать настройку при входе в систему.

(Это может быть перенесено на https://superuser.com )

Комментарии:

1. Большое спасибо, однако для этого потребуется перенастроить каждый клиент Putty, а это что-то невыполнимое на моем уровне для стольких людей 🙂 В любом случае спасибо за ссылку!

2. Все еще думая о вашей проблеме, echo $SSH_CONNECTION | cut -d" " -f1 следует последовательно возвращать IP-адрес клиента (иногда не возвращая имя). Вам все равно придется вручную настроить сопоставление ip: name. Для этого я бы, наверное, написал скрипт на Python.