2013-10-30 27 views
1

如果root用戶正在運行一個bash腳本,該腳本爲用戶配置一些機器上的東西。該腳本將配置一個git存儲庫和一個ssh密鑰以實現無密碼的github通信,然後它將克隆存儲庫。 這隻會發生一次。如果我是root用戶,如何爲某個用戶設置SSH密鑰?

我是新來的bash,我該怎麼做?

我的解決方案至今(此腳本以root身份運行):

USERNAME="vagrant" 
HOMEDIR="/home/$USERNAME" 

apt-get update -y 
apt-get install git -y 
cp id_rsa* $HOMEDIR/.ssh #copying predefined keys 
su -c "eval `ssh-agent -s` ssh-add $HOMEDIR/.ssh/id_rsa" $USERNAME 
chmod 400 $HOMEDIR/.ssh/id_rsa 
cat $HOMEDIR/.ssh/id_rsa.pub > $HOMEDIR/.ssh/known_hosts 

這不起作用,因爲沒有添加的關鍵,我得到的錯誤:

Could not open a connection to your authentication agent. 
+4

爲什麼腳本以root用戶身份運行? – akluth

+0

這是一個很好的資源 - https://github.com/saga-project/BigJob/wiki/Configuration-of-SSH-for-Password-less-Authentication – Hussain

+0

'su -c'這行完全沒有意義,因爲'id_rsa '是執行ssh調用時自動搜索的文件之一。我會在id_rsa文件上做一個chown,以確保它由相關用戶擁有。我並不贊同這個過程* – Petesh

回答

0

隨着具有遠程主機上沒有登錄,並/root/.ssh根用戶不存在,我可以交互的ssh與:

su - $USERNAME -c "ssh [email protected]<remotehost>" 

它讀取USERNAME的~/.ssh/known_hosts file(或提示驗證)。如果USERNAME的~/.ssh中存在正確的密鑰,則使用它們。完成後,仍然沒有/root/.ssh,即完全按照USERNAME而不是根完成。

同樣使用Git克隆:

su - $USERNAME -c "git clone [email protected]:/path/to/repo" 

只是要小心引用的。如果您想要在運行su時取消引用變量,請使用雙引號。如果你想在su已經交給用戶的shell之後取消一個變量,請使用單引號。示例:

su - myuser -c "echo $HOME" 
/root 

su - myuser -c 'echo $HOME' 
/home/myuser 
相關問題