我首先要说我似乎无法复制您的问题。
$ ssh -T pc "sudo su - ghoti2 -c 'whoami'"
ghoti2
$ ssh -T pc "sudo su - ghoti2 -c 'logname'"
ghoti
-T 选项应该禁用 tty 的分配,但 logname 仍然有效。这在我们正在运行的操作系统中可能存在细微差别。我使用 FreeBSD。你还没有提到你正在使用什么。
也就是说,如果问题是您的登录使用被sudo 隐藏,您可能需要查看广告调整您的sudo 配置和使用情况。
例如,以下 sudo 配置使登录用户对正在运行的命令可见:
Defaults>root !set_logname
来自man sudoers 的该选项的文档指出:
set_logname Normally, sudo will set the LOGNAME, USER and USERNAME
environment variables to the name of the target user
(usually root unless the -u option is given). However,
since some programs (including the RCS revision control
system) use LOGNAME to determine the real identity of
the user, it may be desirable to change this behavior.
This can be done by negating the set_logname option.
Note that if the env_reset option has not been
disabled, entries in the env_keep list will override
the value of set_logname. This flag is on by default.
请注意,无论是否设置,当您误用 sudo 并使用它启动 su 时,您就否定了它的有用性。即使在我的 sudo 配置中禁用了此选项,我也会得到以下信息:
$ ssh -T pc sudo su - ghoti2 -c env
TERM=su
BLOCKSIZE=K
MAIL=/var/mail/ghoti2
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/ghoti2/bin
SHELL=/bin/tcsh
HOME=/home/ghoti2
USER=ghoti2
HOSTTYPE=FreeBSD
VENDOR=amd
OSTYPE=FreeBSD
MACHTYPE=x86_64
SHLVL=1
PWD=/home/ghoti2
LOGNAME=ghoti2
GROUP=unknown
HOST=pc
在这种情况下,虽然 sudo 可能会保留 LOGNAME、USER 和 USERNAME 变量,但它们会被 su - 覆盖。
但如果我正确使用sudo 选项,我也可以这样做:
$ ssh pc sudo -u ghoti2 env
PATH=/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/ghoti/bin:/usr/X11R6/bin:/usr/games
TERM=su
LC_COLLATE=C
SHELL=/bin/tcsh
LOGNAME=ghoti2
USER=ghoti2
USERNAME=ghoti2
MAIL=/var/mail/ghoti2
HOME=/home/ghoti2
SUDO_COMMAND=/usr/bin/env
SUDO_USER=ghoti
SUDO_UID=1001
SUDO_GID=1001
注意$SUDO_USER 变量。它作为环境的一部分提供给sudo 运行的任何东西。当然,在你的使用中,它是不可用的,因为你通过运行su -消除了这部分环境。 (您应该man su 了解详情。)
或者,如果不能改进您的 sudo 使用,那么将登录用户作为参数提供给通过 sudo 运行的任何内容怎么样?
$ ssh node1 "sudo su - idm -c '/path/to/script $USER'"
这将包括由连接的客户端扩展的$USER 变量。或者,通过颠倒引号:
$ ssh node1 'sudo su - idm -c "/path/to/script $USER"'
您可以确保$USER 在远程端展开。
然后,在 script 中,变量 $1 将是使用 sudo 进行身份验证的用户名。