在运行脚本之前使用Github.com检查ssh

时间:2018-09-14 22:56:41

标签: git github ssh

我有这个:

ssh -T git@github.com || {
  echo "Could not ssh to/with Github, check your auth";
  exit 1;
}

我得到:

Hi ORESoftware! You've successfully authenticated, but GitHub does not provide shell access.
Could not ssh to/with Github, check your auth

由于退出代码不为零,我是否真的需要解析输出以查看是否可以建立auth?

2 个答案:

答案 0 :(得分:2)

“成功通过身份验证”消息,然后退出1可能会造成混淆。
但是GitHub返回退出状态为1,因为它拒绝执行您的ssh命令要求的操作:打开一个交互式shell。因此为“ 1”

ssh man page

中所述
  

ssh以远程命令的退出状态退出,如果发生错误则以255退出。

有关更多选项,请参见“ How to create a bash script to check the SSH connection?”。

在您的情况下:

if ssh -q git@github.com; [ $? -eq 255 ]; then
   echo "fail"
else
   # successfully authenticated
fi

答案 1 :(得分:2)

运行ssh -T git@github.com时,我期望只有2个返回值:

  1. 1:用户已通过身份验证,但无法使用GitHub打开Shell
  2. 255:用户未通过身份验证

由于@VonC描述的原因,您将永远不会得到返回码0。这意味着您不能使用有趣的bash速记来检查返回码,例如短路逻辑检查-您必须明确记录和检查$?


这是我用来检查我是否已授权到GitHub的shell脚本:

function github-authenticated() {
  # Attempt to ssh to GitHub
  ssh -T git@github.com &>/dev/null
  RET=$?
  if [ $RET == 1 ]; then
    # user is authenticated, but fails to open a shell with GitHub 
    return 0
  elif [ $RET == 255 ]; then
    # user is not authenticated
    return 1
  else
    echo "unknown exit code in attempt to ssh into git@github.com"
  fi
  return 2
}

您可以从命令行随意使用它,如下所示:

github-authenticated && echo good

或更正式地用以下脚本表示:

if github-authenticated; then
    echo "good"
else
    echo "bad"
fi