背景與問題
原本公司的內部系統只架在內部
如果想從外部 git 取得程式碼是不行的
但有時緊急狀況或想在假日寫程式怎麼辦
後來就在內部系統的主機的另外一張網卡設定公司另外一組對外 ip 讓外部 ssh 使用
然後在主機防火牆加入允許家裡的 ip 可以連線與轉 port 等等
不過這不是我們這篇的重點
最近我們架設了 vpn 可以讓特定的使用者從外部連進內部
所以我把主機的對外 ip 關了
在家直接使用 vpn 連進內部
問題來了,我們知道 git 背後是用 ssh 在連線,至少我是這樣設定
之前設定了 ssh 連線是對外 ip 但現在 vpn 進來後是要連協會內部 ip
就當成自己是在協會內部進行作業
所以對外ip 關掉以後,不改設定 ssh 就連不上了
當然 git 也沒辦法使用了
改遠端 ip
所以我們要把 git 的 ssh 連線 ip 改成對內 ip
在專案資料夾下找到 .git 資料夾,使用編輯器開啟檔案 config
找這一段:
[remote "origin"]
url = logo@140.114.34.8:/xxx/yyy
改成對內 ip:
[remote "origin"]
url = logo@192.168.0.77:/xxx/yyy
更新加密 key
存檔後連線會發現還是連不上
想把專案拉回來
$ git pull origin master
ssh: connect to host 192.168.0.77 port 22: Connection timed out
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
如果確定 ip 跟路徑都打正確,那就是 ssh 的加密 key 需要更新
網路上有很多做法,我認為最簡單的就是直接用 ssh 手動連線一次,順便確保帳號、密碼、位置等都是對的
這裡要用的 ssh 命令就在我們安裝 git 到系統裡就已經提供,而且也被加入系統路徑了
事實上他跟 git 命令是在同一個路徑,所以可以在 git bash 下使用 git 就一定能用 ssh
那我們用 ssh 手動連一下內部系統的主機:
$ ssh logo@192.168.0.77
logo@192.168.0.77's password:
輸入密碼登入後看到提示符號輸入 exit 按 enter 離開
這表示 ssh 連線都沒問題了
那這樣這個位置的連線資訊就會被 ssh 記下來,包括驗證 key 等等
接著我們再次拉回專案看看:
$ git pull origin master
logo@192.168.0.77's password: 輸入密碼
remote: Enumerating objects: 167, done.
remote: Counting objects: 100% (167/167), done.
remote: Compressing objects: 100% (147/147), done.
remote: Total 148 (delta 110), reused 1 (delta 1)
Receiving objects: 100% (148/148), 38.78 KiB | 4.31 MiB/s, done.
Resolving deltas: 100% (110/110), completed with 19 local objects.
From 192.168.0.77:/xxx/yyy
* branch master -> FETCH_HEAD
a9259f6..eee507f master -> origin/master
Updating a9259f6..eee507f
Fast-forward
controllers/Controller.php | 6 +-
# 接著就是一堆更改的檔案列表,略過
views/Views.php | 6 +
24 files changed, 1094 insertions(+), 386 deletions(-)
成功了,更新了數十個檔案,一千多行,可見很久沒在家作業了
今天懶得去公司,昨天寫的功能還沒加註解,想在家補上