![通过 ssh-copy-id 为其他用户安装公钥](https://linux22.com/image/1365623/%E9%80%9A%E8%BF%87%20ssh-copy-id%20%E4%B8%BA%E5%85%B6%E4%BB%96%E7%94%A8%E6%88%B7%E5%AE%89%E8%A3%85%E5%85%AC%E9%92%A5.png)
ssh-copy-id
可用于将您的公钥安装到远程计算机的。如果您有能力authorized_keys
,可以使用相同的命令来安装其他用户的公钥吗?sudo
更新:本地和远程都使用 Ubuntu 12.04。
更新2:描述创建新用户帐户和添加公钥的过程
- (远程)创建一个新的用户帐户,并将其设置为仅用户公钥访问。
- (本地)为新用户账户生成公钥(ssh-keygen)。
.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
。