如果root用户正在运行bash脚本,该脚本在用户的计算机上配置某些内容。该脚本将为无密码github通信配置git存储库和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.
答案 0 :(得分:0)
如果root用户没有在远程主机上登录,并且/root/.ssh
不存在,我可以交互式地使用以下内容:
su - $USERNAME -c "ssh $USERNAME@<remotehost>"
它读取USERNAME的~/.ssh/known_hosts file
(或提示进行验证)。如果USERNAME的~/.ssh
中存在正确的密钥,则会使用它们。完成后,仍然没有/root/.ssh
,即完全按照USERNAME完成,而不是root。
同样使用git cloning:
su - $USERNAME -c "git clone remoteuser@host:/path/to/repo"
小心引用。如果您希望在运行su
时取消引用变量,请使用双引号。如果您希望在su
传递给用户的shell之后取消引用变量,请使用单引号。例如:
su - myuser -c "echo $HOME"
/root
su - myuser -c 'echo $HOME'
/home/myuser