Проверьте ssh на Github.com перед запуском скрипта - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть это:

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 голосов
/ 24 ноября 2018

При запуске ssh -T git@github.com:

  1. 1 ожидается только 2 возвращаемых значения: пользователь аутентифицирован, но не может открыть оболочку с помощью GitHub
  2. 255: пользователь не аутентифицирован

Вы никогда не получите код возврата 0 по той же причине, что и описанная @VonC.Это означает, что вы не можете использовать забавные сокращения bash для проверки кодов возврата, как, например, проверки логики короткого замыкания - вы должны быть явно записаны и проверены $?.


Вот сценарий оболочки, который я использую дляпроверьте, авторизован ли я на GitHub:

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
0 голосов
/ 15 сентября 2018

сообщение «успешно аутентифицировано» и выход из него может сбить с толку 1.
Но GitHub возвращает статус выхода 1, потому что он отказывается делать то, о чем просила ваша команда ssh: открыть интерактивную оболочку.Следовательно, '1'

Как упомянуто на справочной странице ssh

ssh выходит со статусом выхода удаленной команды или с 255, если произошла ошибка.

См. " Как создать сценарий bash для проверки SSH-соединения? " для получения дополнительной информации.

В вашем случае:

if ssh -q git@github.com; [ $? -eq 255 ]; then
   echo "fail"
else
   # successfully authenticated
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...