我正在写一篇关于以困难的方式设置 Ceph 的教程,一路 shell。
我对以 root 身份连接到远程主机、创建新用户、然后 scp 密钥所需的 ssh 命令数量不满意……必须有一种更智能、更简单的方法——尤其是在 Ubuntu 上。
这是确切的问题:可以使用用户 ROOT 访问远程服务器的本地用户 FOO 需要为用户 CEPH 设置密钥(可能还有用户)。对 n 个远程主机重复 n 次。
我缺少任何聪明的单线吗?
当前步骤:
scp -i digitalocean id_rsa.pub storage-1:/root
ssh -i digitalocean storage-1
useradd ceph
mkdir ~ceph/.ssh
cat id_rsa.pub >> ~ceph/.ssh/authorized_keys
chmod 700 ~ceph/.ssh
chmod 600 ~ceph/.ssh/authorized_keys
chown ceph:ceph ~ceph/.ssh/authorized_keys
chown ceph:ceph ~ceph/.ssh/
rm id_rsa.pub
您的部分问题在于创建
.ssh
. 我要做的是使用 usessh-keygen
,如果它不存在,它将创建它并正确设置权限(当然,为用户创建一个密钥对)。笔记:
adduser
而不是useradd
- 它创建一个骨架主目录,从/etc/skel
.--gecos ""
并--disabled-password
用于避免提示。如果您不介意输入名称和密码的提示,则可以跳过这些选项。ssh-keygen
可以.ssh
使用正确的权限创建-N ""
和-f ~ceph/.ssh/id_rsa
用于避免提示。如果您不介意密钥位置的提示(默认设置很好)并且希望设置密码,则可以跳过这些。.ssh
也不.ssh/authorized_keys
需要700
作为模式。只要只有所有者可以写信给他们,就可以了(755
for.ssh
和644
for.ssh/authorized_keys
都可以)。因为这是 Digital Ocean,这个问题可以通过将用户数据设置为初始云实例启动的一部分来解决——下面将创建一个 ceph 用户,将其放入 sudoers 组,并配置提供登录所需的 SSH 密钥。
我仍然相信应该有一种不涉及云结构的聪明方法来做到这一点。
我通过修改这个问题的答案找到了一个更通用的解决方案,以在以另一个用户身份登录时完成此操作:
您可以使用它
ssh-copy-id
来将 SSH 密钥传输到远程主机。例子:
它会自动创建目录(例如
.ssh
)并将它们设置为正确的权限。