【问题标题】:How do I set up an SSH key for some user, if I'm root?如果我是 root,如何为某些用户设置 SSH 密钥?
【发布时间】:2013-10-30 10:21:25
【问题描述】:

如果 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.

【问题讨论】:

  • 为什么脚本要以root用户身份运行?
  • 这是一个很好的资源 - github.com/saga-project/BigJob/wiki/…
  • su -c 行完全没有意义,因为id_rsa 是执行 ssh 调用时自动搜索的文件之一。我会对 id_rsa 文件执行 chown 以确保它归相关用户所有。我完全不支持这个过程
  • @akluth 即使我用 sudo 运行脚本(因为它需要预先安装一些包)它仍然无法工作。
  • 你在使用 vagrant 吗?如果是这样,并且您正在使用已知约定设置的框,则 vagrant 用户具有无密码 sudo 权限。考虑使用 Puppet 或 Chef 进行上述设置(当然,如果您使用的是 vagrant)。

标签: linux git bash ssh


【解决方案1】:

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

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

它读取 USERNAME 的 ~/.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2016-04-24
    • 2016-03-03
    • 2016-11-11
    • 2011-09-24
    • 2022-09-23
    • 2020-03-01
    相关资源
    最近更新 更多