今天配置了通過ssh提供的cvs服務:
安裝了sshd後,創建使用cvs的帳戶。不過這些帳戶的開通使得cvs的用戶可以通過ssh登錄到cvs服務器上執行命令。爲了限制cvs用戶只能通過ssh使用cvs功能,我用Google找到了兩個方法。
方法一:關閉ssh的密碼認證功能,讓ssh服務必須通過密鑰(證書)認證,並在服務器上的認證證書文件的證書前加上command選項限制ssh登錄後的執行命令。這個方法不太好,用戶通過ssh連接到服務器後,就進入cvs的服務命令狀態,沒有任何提示。
方法二:建立一個腳本作爲用戶登錄後的shell,腳本的內容爲判定執行的命令,如果是cvs命令則執行,否則顯示提示信息後退出。我選擇了這個方法,建立了下面的腳本文件(文件名爲cvsonly):
#!/bin/sh
if [ "$*" != "-c cvs server" ]; then
echo "CVS Only!";
exit;
fi;
cvs server
腳本存放在/usr/local/bin下,通過chmod 755加上執行權限。
然後在/etc/passwd中將只允許使用ssh訪問cvs的用戶的shell替換成上面的腳本即可。
在cygwin上也可以用類似的方式進行配置。(實際上我就是在cygwin環境下這樣配置的,Linux上反而還沒有試驗。)
另外,爲了更加安全可以在上面的腳本的最後一行cvs server後加參數--allow-root,防止cvs訪問cvsroot之外的文件系統。