我在服务器 A 上有一个Bash脚本,它通过logname
命令找到登录的SSH用户,即使它以root
sudo
运行。如果我从桌面SSH服务器 A 并运行脚本,它可以正常工作。
但是,我已经在SVN服务器 S 上设置了一个提交后挂钩,其中SSH进入 A 并在那里运行脚本,导致logname失败,错误“logname:no login name”。
如果我从我的桌面SSH进入 S ,然后从那里通过SSH进入 A ,它可以正常工作,所以错误必须是SVN最终挂钩的事实不从虚拟终端运行。
我可以在这里使用logname
的替代方案吗?
答案 0 :(得分:3)
您可以使用id
命令:
$ ssh 192.168.0.227 logname
logname: no login name
然而
$ ssh 192.168.0.227 id
uid=502(username) gid=100(users) groups=100(users)
在bash脚本中,您可以使用
之类的内容从id输出中删除用户名 $ id | cut -d "(" -f 2 | cut -d ")" -f1
username
要使脚本在sudo环境中运行并且没有终端,您可以始终有条件地执行不同的命令。
if logname &> /dev/null ; then
NAME=$( logname )
else
NAME=$( id | cut -d "(" -f 2 | cut -d ")" -f1 )
fi
echo $NAME
答案 1 :(得分:2)
这就是我最终的目标。
if logname &> /dev/null; then
human_user=$(logname)
else
if [ -n "$SUDO_USER" ]; then
human_user=$SUDO_USER
else
human_user=$(whoami)
fi
fi
答案 2 :(得分:2)
使用id -nu
。没有愚蠢的分叉和切割来获得用户名。