2013-09-30 25 views
0

我在Git用戶手冊中討論下面討論的主題時遇到了問題。任何闡述或鏈接都會有所幫助。我已經找到了一些討論這個問題的主題,但我老實說,在理解整體概念,寫入語言等方面存在問題。Shell Wrapper:哪個用戶連接VIA SSH

如果你允許每個人都通過公鑰認證與單個用戶連接(如「混帳」) ,你可能不得不給用戶一個shell 包裝,確定哪些用戶連接基於公共密鑰 ,並設置指定該用戶的環境變量。在這裏,我 假設連接的用戶是在$ USER環境變量,所以 您更新腳本通過收集所有的信息開始,你需要:

here

編輯引用:有問題搞清楚命令,我需要使用它來查看遠程用戶傳入的SSH密鑰。另外,我不知道如何遍歷authorized_keys文件來匹配密鑰。有關於此事的任何文件嗎?

回答

2

包裝腳本只是一個腳本,你調用,然後調用另一個腳本或程序。

這在UNIX中很常見。

用戶的shell基本上是一個程序。所以你可以把它包裝在一個腳本中。

如果你有一個用戶'湯姆'。他會出現在/ etc/passwd中這樣:

湯姆:X:91:91:湯姆·蒙特:/家庭/湯姆:/斌/慶典

但湯姆實際上是由湯姆·共享帳戶部。

所以,你要設置一些變量了在識別湯姆部門的成員在登錄的ENV。

通過更改/斌/慶典屬性爲/ bin/TOM-包裝

做到這一點

然後你在該路徑添加腳本:

/斌/ TOM-包裝:

#!/bin/bash 

KEY=$(figure out the ssh key the user used to log in) if [ $KEY == $tom_user_one ]; then 
    USER="Tom User One" 
    /bin/bash fi 

if [ $KEY == $tom_user_two ]; then 
    USER="Tom User Two" 
    /bin/bash fi 

echo "You aren't the Tom I am looking for." exit 0 

這是一個超級簡單的腳本,並沒有完全你は什麼nt但是表明了理論。

請記住chmod + x腳本。

然後,當用戶登錄,而不是直接擊打bash,他們擊中了你的腳本......它指出了哪個tom用戶這是...設置和env變量名爲user的用戶標識用戶,然後給用戶如地獄。

超過簡化,但它是基本的想法。

+0

這是我所需要知道的。我理解我猜想它最終應該做什麼,但不知道其中的任何區域。你把很多東西都解決了,謝謝! – user1757359

+0

有點難以理解「找出用戶用來登錄的ssh密鑰」。有任何想法嗎? – user1757359

+0

從下面的答案中檢查出gitolite。可能是針對您問題的打包解決方案。 –

1

,它通過SSH添加一個授權層作爲服務器git有一個很好的解釋如何this works

在本質上,gitolite工具依賴於可能性爲authorized_keys中的每個條目添加選項。在這種情況下,command選項會告知sshd它不應使用與用戶git的默認外殼不同的命令。該命令本身包含一個唯一的字符串,用於識別用此特定密鑰登錄的用戶。從我自己的gitolite實驗

例子:

command="/Users/git/bin/gitolite-shell hlangeveld",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA... [email protected] 

注意選項字符串如何包含應防止git的賬戶用於不同目的的濫用幾個選項。您也不需要gitolite,但它已自動創建新的密鑰條目。

+0

gitolite是一個很棒的工具來解決這個問題。 –

+0

@MattJoyce它肯定會消除痛苦。 –