Windows相關架站起步走(5)架設Git server

我們在前一篇中有談到架設Git server,不過使用的是http方式把專案clone回來,這樣會覺得沒有安心,因為沒有通過加密的機制,不過基於這個安全的疑慮,所以我寫了這篇文章,這篇是使用ssh方式架設Git server,其實過程比較容易。

第一步

一樣先去下載Git for windows安裝,如果這一步已經做過可以跳下一步,沒有做過可以參考,上篇文章的第四步。(第四步要全部做完,包含設定GitRepo放所有Git專案的根目錄)

第二步

我們要用SSH的方式做存取git server,就必須要架設一個ssh server,與先前教學文章中架設的FreeSSHd server最大不同是,FreeSSHd server是存取cmd.exe,其他設定都無法做其他的用途。

不過這次我們要架設另外一個ssh server,叫做Bitvise SSH Server ,這個與上述不一樣的地方是,它不只可以存取Windows cmd.exe,可以設定存取bash.exe,還有使用來存取git Repos。

這個ssh server叫做Bitvise SSH Server,它也是一個安裝在Windows上可以運行ssh server,不過它有分個人版與標準版,差別在於,個人版要稍微註冊一些資訊,使用Windows上實體的帳戶數量的限制,不過這個選項我們用不太到,我們只用到虛擬的帳號,而且限制數量到10個,很夠用了,所以我們使用個人版本即可。先到網址下載Download Bitvise SSH Server (WinSSHD)文字連結,點選下去之後等他下載完後開啟BvSshServer-Inst.exe。可以參考圖一的解說,基本上就是打開之後,其他選項不需要動,可以選擇自己要安裝路徑之外,選擇好以後,按下I agree…就可以按下Install按鈕了。接著會跳出選擇版本,選Personal edition,接著會要求填寫名字,就自己隨意填一下吧XD。(參考圖二)

apache圖一

apache圖二

第三步

圖二做完按下OK之後就會開始安裝,最後跑完會跳出一個警示的視窗,裡面內容是說請你把系統server重新開機,要讓驗證的public key可以被驗證以外,也要讓虛擬帳戶可以完整的啟動,所以我們依照指示重新開機。(參考圖三)重新開機之後,可以看到SSH server已經隨著開機自動啟動了。接著打開常駐工作列點兩下圖示把出來出現設定的畫面。按照圖四開啟Open easy settings。

apache圖三

apache圖四

 

第四步

點下去之後,依照圖五方式設定,下面有可能預設式勾選起來的要把勾選選項取消。把port number改成非預設的,上面預設是22,我已經改過所以把它框起來,下面選單記得要改成

Do not change Windows firewall settings,如果內建防火牆有開啟的話,自己去設定輸入防火牆的規則就好。設定的方式可以參考這篇裡面的注意事項。

apache圖五

第五步

切換到 Virtual accounts選項,裡面我們可以設定虛擬帳號來存取ssh,按照圖六方式把新增帳號對話窗打開。

apache圖六

第六步

我們先建立一個可以存取git的bash,按照圖七與圖十的方式把對應的欄位填入。(每個設定都要與圖相同)圖十是把server重新啟動。

git的bash路徑會在這個預設路徑 : C:\Program Files (x86)\Git\bin,如果是x86的話把預設路徑改成 : C:\Program Files\Git\bin

apache圖七apache圖八

 

apache圖九apache圖十

第七步

接著我們可以試著用putty連看看,按照圖十一與十二的方式就可以順利連上去了。

apache圖十一apache圖十二

第八步

按照第七步,我們可以看到成功連上的樣子(圖十三)。這樣一個bash就算完成了,我們可以輸入一些Linux指令得到圖十四的結果。

apache圖十三apache圖十四

第九步

我們新增一個可以存取bash的ssh的虛擬使用者之後,接下來我們要新增一個可以利用ssh存取Git專案的虛擬帳號了。我們從步驟六開始,圖七還是一樣,到圖八不一樣,所以我們從圖八操作開始,可以參考圖十五與圖十六的設定,圖十六注意框起來的地方是否有設定正確。Git binaries directory,指的是這個預設路徑 : C:\Program Files (x86)\Git\libexec\git-core,而Git repositories root directory則是我們在第一步設定的D:\GitRepos根目錄。做完圖十六之後再按下save changes接著就完成了,別忘了要重啟server,與圖十相同

apache圖十五apache圖十六

第十步

環境變數的設定,可以參考前一篇文章[環境變數的設定]的章節。

第十一步

設定完成後,可以把一個專案放上去試試看。這裡我放的是evaluate這個專案,也可以放自己的專案,我現在用這個當作例子。我們切換到client端,打開git-bash,並按照圖十七方式,就可以成功把專案以ssh方式從server上clone回來了。

apache圖十七

[後記]

可能在一開始再使用ssh連線bash的時候,會遇到是否要信任server上這個金鑰,或是在clone專案的時候詢問是否要使用這個金鑰,一律回答是與yes。

Windows相關架站起步走(4)架設Git server

通常我們寫程式,寫一寫想到要改,再改一改,改完之後,再改,一直改下去的結果,就是已經不知道之前再改什麼了,要回頭看已經無從看起,這時候想說可以建立好幾個檔案版本,結果,桌面上越來越多檔案,已經不知道再改什麼了…..越來越亂。

這時候版本控制就是要解決專案再開發時候會遇到版本問題而出現的,以前有Apache SVN,不過SVN是集中式版本控制,無法在client端存下一分自己的版本,Git是後起的版本控制,與SVN最大不同的是,它是分散式版本控制,與server端同步之外,也與client同步。

剩下的Git的用法在這裡就不多做介紹,詳情的用法可以觀看這個投影片,如果想把專案發佈給別人觀看或是專案可以open source,可以使用Github

不過重點來了,專案不想被公開,可是又想用Git版本控制怎麼辦?這個時候有兩條選擇方案,付費使用Github開私人的專案,第二個自架Git server,前者要$,所以比較沒有人會願意選擇,後者可能是大家願意去嘗試的。此篇就是要介紹該如何架設Git server在Windows 上,我相信Linux上架設並不困難,Windows才是重點也是環境所屈ORZ…..

架設Git server,有兩種方法,如果用Github就會知道,一種是使用http/https,這種方式缺點就是,帳號和密碼都是必須要打的,還有前者沒有加密,要使用這方式,最好的建議是使用後者,部過這個教學只會教前者怎麼架設起來ORZ…..後者可能要交給其他人研究了,不過沒有關係,之後還會有一篇利用ssh的方式存取Git server。

第一步

我們要用到http,就跟http web server拖不了關係,所以我們選擇有Apache和IIS,都是可以放靜態網頁的地方,我選用前者的原因是大部分教學是使用這個,IIS似乎是可以搭配別的套件做架設,不過這裡就不多做介紹,還是以Apache為主。我使用的Apache的版本為httpd-2.2.19-win32-x86-openssl-0.9.8r.msi,有安裝的封裝檔可以下載。可以到Apache上的鏡像網站下載。(可參考圖一)

apache圖一

第二步

把Apache安裝檔打開,需要注意的是圖二中的步驟,這個步驟Network domain和Server domain都填localhost,下面的管理郵件信箱,可以填寫自己的其中一個,這些最後都會幫我們寫到httpd.conf裡,之後就是最後一個核取選項,第一個是說要用port 80,第二個是 port 8080,如果這臺server還有跑其他的Apache或是有占用poort 80的話,可以使用第二個,第二個是指監聽port 8080,當然之後也可以去httpd.conf裡去改。整個安裝好之後,Apache會被開啟並被歸類到工作列表中,圖中我會顯示有兩個Apache版本是因為這台本身還有XAMPP server,所以有2.2與2.4,不過這次我們要操作的是2.2,基本上2.4開啟就好。(參考圖二)預設Apache2.2是關閉的,只有2.4會開啟,圖中是我都設定好所以都是開啟的。

apache圖二

第三步

開啟Apache中的httpd.conf,預設安裝路徑為 : C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf,我的作業系統是x86,如果是x64,則在Program Files,把設定檔案開啟之後,找到下面的檔案。

<Directory />
 Options FollowSymLinks
 AllowOverride None
 Order deny,allow
 Deny from all
</Directory>

把它改成

<Directory "D:/GitRepos">
 Options Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>
<Directory "C:/Program Files (x86)/Git/libexec/git-core/">
 Options Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

 

PS:注意上方兩個藍字部分,第一段紅字是要修改步驟6設定的路徑,第二段紅字就稍微注意一下你git是安裝在Program Files (x86)還是Program Files
改完後在最後面插入以下內容
SetEnv GIT_PROJECT_ROOT D:/GitRepos
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
 "(?x)^/git/(.*/(HEAD | \
 info/refs | \
 objects/(info/[^/]+ | \
 [0-9a-f]{2}/[0-9a-f]{38} | \
 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
 git-(upload|receive)-pack))$" \
"C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe/$1"

<Location /git>
AuthType Basic
AuthName "GIT Repository"
AuthUserFile "D:/GitRepos/htpasswd"
Require valid-user
</Location>
藍字部分特別注意,D:/GitRepos是我自己設定要放置git倉儲的地方,要修正為你自己開設的資料夾名稱與路徑
D:/GitRepos/htpasswd的話,則是之後的步驟我們要創立一個驗證檔出來,所以檔名必須叫做 htpasswd(重要!)
第四步
在D槽建立一個叫做GitRepos,當作放Git專案的根目錄,接著去安裝Git client,可以到這個網址找這個版本下載,現在不能去官網下載2.0版本以上的原因是因為,這個版本我在設定的時候設定上有問題,所以上Github網站之後有找到先前的版本,所以還是有這樣的解決方法。這個網址在這裡。去下載這個檔案回來安裝Git-1.9.5-preview20150319.exe。
安裝Git for windows可以去參考下列這個網址,按照裡面安裝Git for windows的步驟安裝。
順便也要設定上面網址中所提到的這個 :
HTTP 存取
由於我要讓用戶端可透過 HTTP 協定來存取版本庫,因此還要把 Git 安裝目錄下的 bin\libiconv-2.dll (或 libiconv2.dll)這兩個檔案複製到 Git 安裝目錄下的 libexec\git-core\ 底下。少了這個動作,將來透過 HTTP 存取版本庫時,就會出現 HTTP 500 Internal Server Error 的訊息。
接著,要做下列步驟原因是,要設定一個目錄為放所有專案的根目錄
在D槽,對著GitRepos的資料夾按右鍵,選擇Git Bash,會出現console視窗,
輸入
 git init –bare project
建立出project資料夾後,再輸入
cd project
進入後再輸入 
git update-server-info
輸入完再輸入
touch daemon-export-ok
第五步
接下來要產生D:/GitRepos/htpasswd這個檔案,所以我們可以用Apache內建的htpasswd指令做產生存取的時候輸入的帳號和密碼,先切換到C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin目錄下,再按右鍵開啟git-bash接著輸入這一行指令 : htpasswd -cmb /D/GitRepos/htpasswd hello 1234,或是先切換到目錄下,需要注意的是,要確定要產生的htpasswd對應專案根目錄,也就是 /D/GitRepos目錄。這個要與先前我們在httpd.conf設定的目錄要一致。我們指令中,hello是帳號 1234是密碼
如果看到D:/GitRepos/目錄下有htpasswd這個檔案代表產生成功了,下一步我們可以新建一個專案在D:/GitRepos/根目錄中測試我們是否成功建立一個Git server。(參考圖三)
整個設定完成後,記得要把Apcahe 2.2開啟或是重新啟動
apache圖三
第六步
我們在D:/GitRepos/下建立一個簡單的Git 專案,我是直接使用我之前開發過的專案當作例子,把它放到D:/GitRepos/目錄中。可以參考這下面圖四到圖六中的步驟去做。
其中圖四與圖五是在server上操作。圖六是在我們的client上做。(圖五與圖六的存取server網址bigsu.no-ip.biz可能要改成自己的網域名稱或是自己的固定IP或是浮動IP。)
apache圖四apache圖五
apache圖六
[參考文章]
Git Server on Windows 安裝手記
windows架git server的安裝流程紀錄
[注意事項]
1. 如果有把Windows防火牆開啟的話需要把8080或是有給Apache使用到的port number開啟,新增輸入的規則,詳情的設定可以參考這篇文章中的注意事項
2. 如果Apache重新啟動之後,出現request operation failed彈跳的視窗,代表在做設定Apache的httpd.conf或是Git for windows沒有移動libiconv2.dll或libiconv-2.dll到上述的目錄下,建議步驟整個重頭到尾檢查一次,如果還有問題,可能就要寄信給我問問題了。信箱 : peter279k@gmail.com
[環境變數的設定]
如果還是不行的話,那記得要加入控制台中Path的環境變數,如下圖七與八。在圖八加入後面加入;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\libexec\git-core預設路徑。
如果安裝在別的路徑就自己去找,作業系統如果是x86預設路徑會變成;C:\Program Files\Git\bin;C:\Program Files\Git\libexec\git-core
要記住每一個環境變數結束後會用一個分號隔開
apache圖七apache圖八

Windows相關架站起步走(3)架設VNC server

因為server的緣故,本來想用最簡單方式,使用固定IP,用遠端桌面存取就好,不過沒有固定IP,所以使用了no-ip 設定的domain name之外,也為了重開機方便性,所以把預設帳戶的密碼給關掉了,這樣遠端重開機就不需要密碼,為啥會這樣,原因就是用非Windows server和Linux架站ORZ …。不過上述原因,所以沒有辦法使用RDP遠端桌面,因為遠端桌面使用是需要密碼的,因此我們也把RDP使用的port number鎖起來了。一直以來遠端都是使用teamviewer,而server管理者忽然想用其他方式存取,我正好想到以前有在Linux上研究過VNC一陣子,因此可以試著研究VNC如何在Windows啟動server,達到遠端連線的效果。首先我們這次使用的是UltraVNC,這是一款免費的工具,而且從Win XP到8都有支援,一個安裝檔內含VNC server跟client,方便使用者下載與安裝。

我們先到UltraVNC官網下載,依照自己作業系統版本下載回來之後,建議是下載msi檔封裝檔,安裝較方便與容易。接著我們可以開啟下載好的安裝檔。我們先按一下一步之後,接著會看到如圖一的樣子,這個是要請使用者勾選server跟viewer是否是全部或擇一安裝,全看使用者決定,因為server的關係,所以我在這裡選的是只裝server端。接著下一步會出現圖二的情況,這是詢問是否要將VNC安裝成服務,意思就是這將可以在控制台中的服務工具,找到可以設定UltraVNC服務的名稱,我建議是可以不用,預設自行手動開啟即可,當然也可以新增成一個服務,好處是比較方便,不需要重開機還要重開UltraVNC。第二個選項是問說此軟體工具是否該允許使用者可以輸入ctrl+alt+del,意思是可以做一個強制呼叫管理員的動作,這個情況可能都會遇到,而第一個就要看使用者自己決定了。

vnc圖一vnc圖二

則是問是否要同意這個License aggrement,通常就是按I agree,下一步就是選擇安裝檔,圖三接著再按一次Next,就會列出安裝的參數是否有誤,都沒有問題的繼續按Next

則開始安裝UltraVNC。

vnc圖三

我們先打開UltraVNC Server,先來設定server,開啟之後會看到圖四這樣的畫面,如果沒有的話,可能歸類到常駐的工作列中,可以按右鍵,選擇Admin properties,叫出跟圖四一樣的畫面。

vnc圖四

全部預設就好,最後一項DMS plugin,可以不用,那是在驗證的時候密碼會更安全,可以把use勾選取消掉,如果server有使用的話,client也要跟著配合,等一下介紹client連線的時候會提到。

server設定完之後,按下ok,就設定好了,我們回到client端,可以試著開始連線,開啟UltraVNC viewer,如圖五。

vnc圖五

VNC server後面的輸入欄位是server端的網域名稱或是浮動或固定IP位址,下面有一個Use DSMPlugin,要勾選使用,要注意用的Plugin要與server一樣,都輸入完之後,就可以按下Connect了,如果沒有使用Plugin但是server上有啟用的話,會出現下面的錯誤(圖六) :

vnc 圖六

這樣就可以成功連線了(圖七)

 

[[注意事項]]

目前已發現有可能有這樣問題存在,如果已經使用teamviewer連線,再用UltraVNC client連線,會產生頓感與連線成功後導致沒有畫面產生,如果有出現這樣類似的問題,需要將teamviewer關閉或是UltraVNC client關閉,估計是這兩者在遠端連時會相衝。(不過有時候卻不會….ORZ)

[後記]

其實使用VNC來連線不見得會比teamviewer品質好,有時候teamviewer連線速度還比較快,不過對於使用者使用較快的網路可能沒有差吧XD(我想。

Windows相關架站起步走(2)架設FreeSSHd server

在Windows底下,我們就只能使用teamviewer或是內建的遠端桌面來存取server,做些相關的事情,因為windows本身並沒有一些Linux可以安裝的服務或是套件,像是SSH就是。不過也有出現解法,我們可以在Windows底下run Cygwin來達到架設SSH server以及git server等服務,這個教學我目前沒有打算教如何使用Cygwin在這篇系列裡,我會分享一個較簡易的方式,能夠快速SSH 服務。FreeSSHd這一套服務是能夠使用SSH存取Windows的cmd.exe,對於Windows指令熟悉的人來說是一大福音,不過對於熟悉Linux的人來說或許不是那麼的友善,關於使用其他的方式架設SSH server,我會留到下一個系列來講解。

首先先到官網下載FreeSSHd工具名稱freeSSHd.exe,如下圖一。

e圖一

接著把下載的freeSSHd.exe打開,一直下一步之後,可以看一下圖二的畫面,確認一下要安裝的路徑位置無誤之後,就可以按下Install按鈕了。

engine圖二

安裝完成之後,開啟之後,會跑在下面工作列中,需要到裡面找到圖示並按右鍵選取settings(圖A),依照圖三會有一個這樣的畫面,接著我們點選SFTP設定home path一開始進入的路徑(圖三),點選Users新增一個使用者,(圖四)使用者新增完成之後,接著可以來設定SSH的設定,如圖五,我們port可以自行設定,如果有開Windows內建的防火牆,也需要開啟port允許輸入的規則。如果部會設定防火牆,可以參可第一篇最後面的[注意事項]。都設定完成之後按下確定,接著我們就可以來測試是否有設定成功了。

3gine圖A2engine圖三

engine圖四

engine圖五

 

假設我們要用Windows來連線,因此我們要去下載putty,下載完成之後開啟,輸入要連線的IP或是domain name網域名稱,以及要連線的port number,輸入完成後按下連線Open。(圖六)

engi圖六

接著可以看到畫面連線,顯示login as: ,接著可以打上使用者名稱以及密碼,enter之後就可以連線了。(圖七到圖九)

engi圖七擷取11圖八

222圖九

[參考資料]

http://www.techrepublic.com/blog/tr-dojo/set-up-a-free-ssh-server-on-windows-7-with-freesshd/

[後記]

在Google的時候發現,FreeSSHd有漏洞XD,不過是舊版的,1.2.6以前的不要用,現在最新版本到1.3.1,圖中教學方式是1.3.1版本,官方網站也有說bug fixed。

可能在一開始再使用ssh連線bash的時候,會遇到是否要信任server上這個金鑰,或是在clone專案的時候詢問是否要使用這個金鑰,一律回答是與yes。

Windows相關架站起步走(1)架設FTPS server

這陣子很久沒發表文章了XD,課業繁忙的緣故,不過今天稍微有點時間,還是來發最近幾天研究出來的心得,為什麼最近會轉成架設非Linux上的一些服務,絕對不是放棄了Linux,是因為我們的小專案server run在Windows,負責server的人也不想改…..所以我只好想了些方法,來架設我們會在Linux常用的一些服務,我們從檔案傳輸的服務架設開始,FTP檔案傳輸協定是非常易見的,不過這有一個缺點是,連線是非加密的,因此容易被別人所監聽,為了解決這個問題,所以開始陸續出現了SFTP以及FTPS等協定,這些都是連線有加密的傳輸。接下來要介紹FileZilla interface server這套工具,來架設FTPS server。

首先到,官網下載這套工具。接著安裝好之後,啟動畫面會是下面這樣子。

file

接著,按下OK我們就進入設定的主畫面(圖A)。我們接著來設定使用者帳號密碼以及要分享的家目錄。依照圖中步驟(圖B)點選紅色圈選的圖示並跳出User設定視窗後,按下Add,輸入使用者名稱。

file圖A    engine圖B

接著再設定密碼(圖C),設定要傳輸檔案的家目錄(圖D),這樣FTPS帳號密碼就設定完成了。

engine圖C    engine圖D

接著再點選Edit,會出現選單,依照圖示點選左邊的FTP over TLS settings的欄位,右邊會出現我們要填憑證的地方,因為FTPS的機制是,連上server之後,server會把憑證做為一個連線加密用的機制,因此要加密的連線我們就必須要設定一個憑證(Cetrificate),圖E是我已經設定好,不然預設是空白的。(這裡設定除了cetrificate路徑之外,其他都是須與圖設定一樣的。)

file圖E

我們需要產生一個憑證,所以我們點選Generate new Cetrificate,點下去之後,會出現產生憑證實我們需要填選的欄位,key size是金鑰的長度通常選2048 bits就足夠。接下來填選兩位數的區域號碼,這蘭可以隨意填,再來是描述憑證提供者,這一欄可以填寫一個名稱,比如說自己的電腦名稱等,接著填寫所在城市名稱,組織名稱,組織單位,聯絡信箱,server 位址(IP/網域名稱),最後是要儲存憑證的地方。這樣填下來,大概會類似下面這張圖的樣子,不過下面截圖是範例,僅讀者們參考用。(圖F)

engine圖F

按下Generate cetrificate之後,會跳一個Cetrificate generated successfully代表產生憑證成功,憑證會自動加到路徑中。(圖G),(圖H)

engine   圖G        engine圖H

 

 

接下來我們要去設定,passive mode settings,被動傳輸模式時,需要有兩個port number運作,一個我們再產生憑證那裡有一個port number 990,另外在傳輸檔案時,我們需要再開另一個port範圍做傳輸檔案使用,如下圖。第一個要設定port範圍做傳輸檔案用。設定好之後按下確定,FTPS就算整個設定完成了。(圖I)

engine圖I

再來就是Filezilla FTP client使用FTPS連線了,首先我們開啟Filezilla,開啟後點選編輯 -> 設定,如下圖,把被動模式改為主動模式。(圖J)

engine圖J

設定完成後,如下圖一輸入主機IP或網域名稱,使用者名稱密碼以及FTPS port 990,就可以開始連線了,如果出現如下圖二,代表會問你是否要相信遠端的憑證,因為這個憑證是自己簽的。通常我們就是毫不猶豫的按下是XD(如果以後不想再跳出詢問憑證信任的視窗,可以把下面的選項勾選總是信任未來連線憑證。)接著按下快速連線。

engine圖一

 

engine圖二

 

[注意事項]

如果Windows本身有開啟內建的防火牆的話,需要去新增新的輸入規則,像是990以及passive mode port 50100~51100範圍,都要加入。(圖三)

按照圖四,圖五,圖六,圖七,圖八和圖九的步驟加入允許輸入的port number。

engine圖三engine圖四

engine圖五engine圖六

 

engine圖七engine圖八

engine圖九

[參考資料]

FileZilla+Server建立SSL與TLS安全連線