1

如果 root 用户正在运行一个 bash 脚本,该脚本为用户在机器上配置一些东西。该脚本将配置一个 git 存储库和一个用于无密码 github 通信的 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

1 回答 1

0

使用在远程主机上没有登录/root/.ssh且不存在的 root 用户,我可以通过以下方式交互式地 ssh:

su - $USERNAME -c "ssh $USERNAME@<remotehost>"

它读取用户名~/.ssh/known_hosts file(或验证提示)。如果 USERNAME 中存在正确的密钥,~/.ssh它会使用它们。完成后,仍然没有/root/.ssh,即这完全是作为 USERNAME 完成的,而不是 root。

同样与 git 克隆:

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
于 2013-10-31T02:27:31.147 回答