2017-09-18 1 views
1

나는 ssh 키를 생성하고 bash를 사용하여 github에 넣는 스크립트를 작성하고 있습니다. 이 함수를 실행할 때이 오류가 발생합니다. ssh 키를 생성하여 스크립트에서 터미널로부터 github에 넣는 방법이 필요합니다.오류 ssh 키를 bash 스크립트에서 github로 푸시하려고 시도하면

sudo ssh-keygen -t rsa 
KEY=$(sudo cat ~/.ssh/id_rsa.pub) 
echo "Here is your KEY var: ${KEY}" 
read -p "GitHub Username: " USERNAME 
read -p "Please enter a title for you ssh key: " TITLE 
curl --user "\"${USERNAME}"\" -X POST --data '{ "\"title"\": "\"$TITLE"\", "\"key"\": "\"$KEY"\" }' https://api.github.com/user/keys 

오류 : { "메시지": "잘못된 자격 증명", "documentation_url": "https://developer.github.com/v3" }

+1

왜 루트로'ssh를-keygen'를 실행? – chepner

+0

그건 정말 좋은 질문이다. –

+0

나 한테 반복해라.'sudo'는 "make all work"명령의 마법이 아닙니다. sudo를 사용하여 작성할 수있는 모든 명령에 대해서는 sudo가없는 경우 더 나은 방법이 있습니다. – o11c

답변

2

는 명령에 너무 많은 따옴표를 가하고 있습니다. (첫 번째 근사치에 대한) 정확한 코드 중 하나 TITLE 또는 KEY는 JSON에 포함 이스케이프 할 필요가있는 문자가 포함 된 경우

curl --user "${USERNAME}" -X POST \ 
    --data "{ \"title\": \"$TITLE\", \"key\": \"$KEY\" }" \ 
    https://api.github.com/user/keys 

그러나이 실패하는 경향이있을 것이다. 이를 수행하는 올바른 방법은 필요한 이스케이프를 처리하는 jq과 같은 도구로 JSON을 생성하는 것입니다.

curl --user "${USERNAME}" -X POST \ 
    --data "$(jq -n --arg t "$TITLE" --arg k "$KEY" \ 
        '{title: $t, key: $k}')" \ 
    https://api.github.com/user/keys 

또는

jq -n --arg t "$TITLE" --arg k "$KEY" '{title: $t, key: $k}' | 
    curl --user "$USERNAME" -X POST --data @- https://api.github.com/user/keys 
+0

그게 효과가! 고마워요! –

관련 문제