2017-09-18 26 views
1

我正在創建一個腳本,它創建ssh密鑰並將它們放到github中使用bash。我運行這個函數時遇到了這個錯誤..我想要一種方法來生成SSH密鑰,並將它們放入我的腳本中的終端的github中。錯誤當試圖從bash腳本推送ssh密鑰到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'不是一種神奇的「讓一切工作」的命令。對於每個可以用sudo編寫的命令,沒有它的話會有更好的方法。 – o11c

回答

2

你把太多的引號的命令。正確的代碼(以第一近似值)將是

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

然而,這是容易失敗如果任TITLEKEY包含需要轉義在JSON到包括字符。正確的方法是使用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

工作!謝啦! –