git ssh Permission denied (publickey)

背景

今天臨下班前忽然想到最近須要重構一個很是重要的項目,新項目使用的技術棧是 Vue。因爲需求可能會不少和很雜,爲了方便項目的迭代和維護,咱們合計着引入一個文檔系統,針對每一個需求和每次的改動編寫對應的文檔以便進行需求的梳理與項目的維護。vue

晚上就回家搗鼓了一下 vuepress ,這個是基於 Vue + Vue Router + Webpack 的技術棧形式進行實現的,和咱們主項目的技術架構同樣的,並且 vuepress 支持很完善的配置和高可定製化處理,因而就用來搭建了一個我的的博客系統,並實現了命令式一鍵部署!git

就是這個一鍵式部署功能引出了本篇文檔!github

問題

先把自動部署 github 的 shell 腳本拋出來吧!shell

#!/usr/bin/env sh
 # 確保腳本拋出遇到的錯誤
set -e
 # 生成靜態文件
npm run docs:build
 # 進入最終生成靜態的目錄
cd docs/.vuepress/dist

// 在最終生成的靜態目錄初始化 git 配置
git init
git add -A
git commit -m 'deploy'
 # 推到你倉庫的的 gh-page 分支
# 將 <USERNAME>/<REPO> 替換爲你的信息
git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pages

cd -
複製代碼

自動部署 github 的腳本很簡單,基本的流程就是:執行 npm run docs:build 生成最終的網站靜態資源,因爲生成的靜態資源存放在 docs/.vuepress/dist 目錄下,而後將當前目錄轉到最終靜態的目錄,再初始化 git 配置,提交全部的變動,最後將全部的變動 push 到遠程的 github 倉庫對應的分支。npm

這個自動化部署的過程是沒什麼問題的。可是就是在執行自動化部署時,在最後一步 —— push 代碼的時候報錯了瀏覽器

WX20190223-002347@2x.png

這個報錯信息向咱們展現了:當 shell 經過 ssh 方式向 github 倉庫推送代碼的時候,沒有權限(publickey)。安全

靜下心來想一想,發現這個報錯是情理之中的:由於 github 是一個公共的代碼管理平臺,只要是公共的管理平臺,就確定會有安全問題,針對這些安全問題,平臺開發者確定會實施一些措施進行規避,好比瀏覽器實現了同源策略。關於 github 這樣的平臺確定是實現了公鑰、私鑰的處理。bash

既然問題都已經清除了,且問題的緣由也找到一二了,那就動手解決問題吧!架構

解決

經過 git@github.com: Permission denied (publickey) 關鍵字在網上搜索了一通,發現關於這類問題的條目還蠻多的,內容都是大同小異:ssh

  • 一、運行 ssh-keygen 命令生成 ssh 密鑰文件**(這裏建議回到 ~ 目錄)**
  • 二、生成 ssh 密鑰時,會提示你輸入文件的 key 和 passphrase,我建議這裏一直按回車過掉

WX20190223-004314@2x.png

隨後就會 User/<userName>/.ssh 下生成這三個文件。

  • 三、在 github setting 主頁添加 ssh 相關值

WX20190223-004823@2x.png

將上圖中經過命令生成的 SSH 密鑰文件 id_rsa.pub 裏面的內容複製到 SSH key,而後 title 設置 id_rsa,最後點擊 Add SSH key 保存 SSH 密鑰值便可。

  • 四、回到終端執行 ssh -T git@github.com 檢查 SSH 密鑰是否生效

WX20190223-005220@2x.png

若是出現上圖顯示的內容就證實 SSH 配置完成。

  • 五、從新執行部署命令就發現 push 代碼已經 OK 了!

總結

這個問題是關於 git ssh 的問題。問題看上去有點可怕,由於跟權限掛鉤了,可是這類問題網上就不少參考的文檔,因此也就沒什麼好怕的了。這裏主要介紹了 Mac 的解決方案,關於 Windows 的解決方案,我這裏就不方便出了,由於手上也沒有 Windows 電腦。若是你們遇到問題,仍是去網上搜搜吧!

相關文章
相關標籤/搜索