在bash脚本中获取SSH登录名

时间:2012-06-15 13:58:16

标签: bash ssh username

我在服务器 A 上有一个Bash脚本,它通过logname命令找到登录的SSH用户,即使它以root sudo运行。如果我从桌面SSH服务器 A 并运行脚本,它可以正常工作。

但是,我已经在SVN服务器 S 上设置了一个提交后挂钩,其中SSH进入 A 并在那里运行脚本,导致logname失败,错误“logname:no login name”。

如果我从我的桌面SSH进入 S ,然后从那里通过SSH进入 A ,它可以正常工作,所以错误必须是SVN最终挂钩的事实不从虚拟终端运行。

我可以在这里使用logname的替代方案吗?

3 个答案:

答案 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。没有愚蠢的分叉和切割来获得用户名。