1. 程式人生 > 其它 >使用git bash在windows上搭建 git 伺服器

使用git bash在windows上搭建 git 伺服器

技術標籤:gitLinuxlinuxgit

在 windows 上安裝 git,都會附帶 git bash.

git bash 相關路徑

git bash 是基於 msys2 的,在 windows 上工作管理員裡可以看到:
msys2

git bash 的根目錄

msys2 本身用來在 windows 上模擬 Linux 類環境。git bash 的根目錄的實際物理目錄是 git 的安裝目錄,在我的 windows 上,是

`D:\Program Files\Git`

可以在 git bash 裡切換到根目錄 cd /,然後在當前目錄建立個檔案來確證。

git bash 的使用者目錄

git bash 的使用者目錄和 windows 的使用者目錄保持一致,在系統盤 User 下。在我的 windows 上,使用者目錄是這個cd ~

/c/Users/Administrator

同時看到,git bash 裡訪問 windows 的磁碟 X 下的檔案的方式為 /X/file

ssh 服務

ssh 服務需要 sshd 伺服器,ssh 客戶端來共同完成。一般安裝 ssh 服務都會同時安裝這兩個程式,在 windows 上,分別是ssh.exe 和 sshd.exe.

嘗試在 git bash 下啟動 ssh 服務。

直接啟動 sshd,報錯:

sshd re-exec requires execution with an absolute path

提示需要使用絕對路徑。使用 which sshd 獲取絕對路徑,使用最對路徑啟動,報錯

sshd: no hostkeys available – exiting.

提示沒有 key 檔案,需要使用 key檔案來對外標識自己的身份。

ssh-keygen -A

使用上邊命令生成多個加密方式的 key 檔案,提示

ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519

此命令會在 /etc/ssh 目錄下,生成 8 個檔案。
sshkey

之後便能正常啟動 sshd。多次啟動 sshd,還會生成 /etc/ssh/sshd.pid 檔案,確保只有一個 sshd 程序例項。

密碼登陸

ssh 服務有 ~/.ssh/config/etc/ssh/ssh_config

/etc/sshsshd_config 兩個配置檔案,前兩個是客戶端配置,最後一個是伺服器的配置。

修改伺服器 sshd_config 配置,允許密碼登陸。

PasswordAuthentication yes

重啟 sshd 服務。

由於沒有 Linux 上的 service 命令來管理 sshd 服務,不過 git bash 一樣可以通過 ps 來檢視啟動的程序,同樣適用 kill 來停止。

正常情況下,便可以使用 ssh 登陸 windows。注意登陸的使用者名稱。預設 gitbash 的使用者應該可 windows 的使用者一致,如果使用 windows 上是用管理員登陸的,那麼用 administrator 登陸即可。

在 gitbash 裡使用 id 可檢視當前的使用者。

uid=197108(Administrator) gid=197121 groups=197121

在另外一臺 Linux 伺服器上,可以通過 ssh 客戶端登入 windows。

ssh登入

git 伺服器

將 A 機器上 windows 本地的 git 倉庫作為 B 機器上某個倉庫的遠端倉庫,進行拉取和推送。

在 A 機器上啟動 sshd 伺服器,預設使用 22 號埠。

A 機器如果在內網,如果想辦法從外網能夠訪問。我這裡使用 ssh 埠轉發來做。關於 ssh 埠轉發,見之前我的一片部落格.

將 B 機器本地的 6666 埠轉發到 A 機器的 22 號埠上

在 B 機器上為本地的 git 倉庫新增遠端倉庫。

git remote add origin ssh://[email protected]:6666/D/project/code_project

ssh 指定 git 使用的協議。git 一共支援 LOCAL 本地檔案系統協議、HTTP 協議、SSH 協議、GIT 協議這 4 種協議。

administrator 指定使用者名稱。

127.0.0.1:6666 指定了通訊地址。

/D/project/code_project 指定了遠端倉庫所在的位置 (即倉庫在 A 機器上的位置,這裡需要使用 git bash 裡識別的位置)。

同 Linux 上的一樣,密碼可以通過 passwd 來指定和修改。

正常情況下,就能正常的進行 pull 和 push 操作了。
pull操作
push操作

使用密碼登陸,這樣每次 push 和 pull 時,還需要輸入密碼,可以更換為 ssh key,省掉密碼。

git 倉庫免密

使用 ssh-key 製作沒有密碼的 key(key 可以本身是可以帶有密碼的,ssh-keygen -A 一路 enter 就沒有密碼)。

跟在 Linux 上一樣,在 A 機器上的使用者目錄下建立 ~/.ssh/authorized_keys 檔案,裡邊複製進去公鑰的內容。

完畢之後,重啟 A 上的 sshd 服務。

B 機器上我有多個 key,在 git 操作的時候沒有可以指定 key 引數的選項(也許有我不知道的方法?),所以需要在客戶端使用的 config 檔案,指定特定的伺服器使用特定的 key 檔案。

在使用者目錄下的 config 檔案 ~/.ssh/config 新增一下內容,指定 ssh 伺服器地址 127.0.0.1:6666 使用的 key 檔案,同時定義一個別名。

Host workrep
HostName 127.0.0.1
User administrator
Port 6666
IdentityFile “D:\project\code_project\keys\king_nopass”

在 B 機器上修改遠端倉庫的地址,使用上邊定義的別名

git remote add origin ssh://workrep/D/project/code_project

在 B 機器上,往 A 上推送。
免密碼推送