I have this:
ssh -T [email protected] || {
echo "Could not ssh to/with Github, check your auth";
exit 1;
}
I get:
Hi ORESoftware! You've successfully authenticated, but GitHub does not provide shell access. Could not ssh to/with Github, check your auth
Since the exit code is not zero, do I really need to parse the output to see if auth can be established?
There are only 2 return values that I expect when running ssh -T [email protected]:
1: user is authenticated, but cannot open a shell with GitHub255: user is not authenticatedYou will never get a return code of 0 for exactly the reason @VonC described. That means you can't use fun bash shorthands for checking return codes, like short-circuiting logic checks - you must be explicit in recording and checking $?.
Here's a shell script I use to check if I'm auth'd to GitHub:
function github-authenticated() {
# Attempt to ssh to GitHub
ssh -T [email protected] &>/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 [email protected]"
fi
return 2
}
You can use it casually from the command line like so:
github-authenticated && echo good
or more formally in a script like:
if github-authenticated; then
echo "good"
else
echo "bad"
fi
"successfully authenticated" message and then exits 1 can be confusing.
But GitHub returns an exit status of 1 because it refuses to do what your ssh command was asking: opening an interactive shell. Hence '1'
As mentioned in the ssh man page
ssh exits with the exit status of the remote command or with 255 if an error occurred.
See "How to create a bash script to check the SSH connection?" for more option.
In your case:
if ssh -q [email protected]; [ $? -eq 255 ]; then
echo "fail"
else
# successfully authenticated
fi
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With