Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check ssh with Github.com before running a script

Tags:

git

github

ssh

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?

like image 245
Alexander Mills Avatar asked Jul 20 '26 15:07

Alexander Mills


2 Answers

There are only 2 return values that I expect when running ssh -T [email protected]:

  1. 1: user is authenticated, but cannot open a shell with GitHub
  2. 255: user is not authenticated

You 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
like image 94
Ari Sweedler Avatar answered Jul 23 '26 06:07

Ari Sweedler


"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
like image 24
VonC Avatar answered Jul 23 '26 07:07

VonC