我有这个:
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?
答案 0 :(得分:2)
“成功通过身份验证”消息,然后退出1可能会造成混淆。
但是GitHub返回退出状态为1,因为它拒绝执行您的ssh命令要求的操作:打开一个交互式shell。因此为“ 1”
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
:用户已通过身份验证,但无法使用GitHub打开Shell 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