通过 ssh-copy-id 为其他用户安装公钥

通过 ssh-copy-id 为其他用户安装公钥

ssh-copy-id可用于将您的公钥安装到远程计算机的。如果您有能力authorized_keys,可以使用相同的命令来安装其他用户的公钥吗?sudo

更新:本地和远程都使用 Ubuntu 12.04。

更新2:描述创建新用户帐户和添加公钥的过程

  1. (远程)创建一个新的用户帐户,并将其设置为仅用户公钥访问。
  2. (本地)为新用户账户生成公钥(ssh-keygen)。
  3. .ssh/authorized_keys通常我的做法是在远程服务器上创建目录和文件,然后将本地生成的公钥复制并粘贴到新用户的帐户中。我所寻找的是,我是否可以使用ssh-copy-id将这个新创建的用户的公钥直接安装到 ssh 目录中。只是为了节省几个命令。

答案1

不是同一个命令,但如果您可以在远程主机上使用 sudo,则可以使用 ssh 远程执行所需的步骤。我使用以下命令将我的 ssh 密钥推送给我的 raspberry 的 root 用户:

cat ~/.ssh/id_rsa.pub | \
  ssh [email protected] \
  "sudo mkdir -p /root/.ssh; sudo tee -a /root/.ssh/authorized_keys"
  • 猫我的公钥
  • 通过管道传输到 ssh
  • ssh 以 ssh 用户身份连接到我的树莓派
  • 在远程使用 sudo 创建 /root/.ssh
  • 然后使用 sudo 和“tee -a”将 stdin(包含第一个 cat 中的密钥)附加到 /root/.ssh/authorized_keys

只需将这些东西放在一起作为脚本,也许在远程端添加一些 chmod/chown,您就会得到所需的东西。

答案2

就我而言:

  • 用户root已经可以通过 ssh 登录(密码或 ssh-key)
  • 该用户svruser已存在于服务器上,并具有无密码 sudo 权限
  • 我想允许svruser通过 ssh-key 登录:即将存储在本地电脑上的公共 ssh 密钥上传到远程服务器并将其附加到authorized_keys文件

这个命令对我有用:

cat LOCAL/PATH/my-ssh.pub | ssh [email protected] \
"sudo -u svruser bash -c 'mkdir -p ~/.ssh; chmod 700 ~/.ssh; tee -a ~/.ssh/authorized_keys'"

细节

  • 在本地电脑上安装了 ssh 的终端上执行此操作(例如 Linux 终端、WSL 或 Windows 上的 git-bash)
  • cat LOCAL/PATH/my-ssh.pub只需将我的公共 ssh 密钥的文件内容打印到终端即可
  • |将 ssh-key 的文本通过管道传输到下一个 (ssh) 命令
  • ssh [email protected]:以用户身份通过​​ ssh 连接root到我的主机
    • sudo -u svruser:以用户身份执行以下命令svruser
      • bash -c '..'在 bash hell 中执行单引号内的文本
        • mkdir -p ~/.ssh.ssh在主目录中创建(隐藏)目录svruser
        • chmod 700 ~/.ssh:为新目录设置正确的权限:参见.ssh 文件夹中私钥的权限?
        • tee -a ~/.ssh/authorized_keys:将 ssh-key 文本(我们通过管道传输到 ssh 命令)打印到终端,并将文本附加到authorized_keys文件

答案3

假设我们可以通过用户访问位于 ADDRESS 的服务器root,并且我们要为其设置密钥的用户名为ubuntu,则可以使用以下单行命令。

cat ~/.ssh/id_rsa.pub | ssh root@ADDRESS "su - ubuntu -c 'mkdir -p ~/.ssh && tee -a ~/.ssh/authorized_keys'"

无论是否存在,这都会.ssh起作用authorized_keys

相关内容