我正在写一个关于如何以困难的方式设置 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
答案1
您的问题部分在于创建.ssh
。我会使用ssh-keygen
,如果不存在则创建它并正确设置权限(当然,还会为用户创建密钥对)。
$ scp -i digitalocean id_rsa.pub storage-1:/tmp
$ ssh digitalocean storage-1 '
adduser --gecos "" --disabled-password ceph
echo | sudo -u ceph ssh-keygen -N "" -f ~ceph/.ssh/id_rsa
sudo -u cp /tmp/id_rsa.pub ~ceph/.ssh/authorized_keys
'
笔记:
- 使用
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
都可以)。
答案2
因为这是 Digital Ocean,所以可以通过将用户数据设置为初始云实例启动的一部分来解决该问题 - 以下将创建一个 ceph 用户,将其放入 sudoers 组,并配置提供登录所需的 SSH 密钥。
#cloud-config
users:
- name: ceph
groups: sudo
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf0q4PyG0doiBQYV7OlOxbRjle026hJPBWD+eKHWuVXIpAiQlSElEBqQn0pOqNJZ3IBCvSLnrdZTUph4czNC4885AArS9NkyM7lK27Oo8RV888jWc8hsx4CD2uNfkuHL+NI5xPB/QT3Um2Zi7GRkIwIgNPN5uqUtXvjgA+i1CS0Ku4ld8vndXvr504jV9BMQoZrXEST3YlriOb8Wf7hYqphVMpF3b+8df96Pxsj0+iZqayS9wFcL8ITPApHi0yVwS8TjxEtI3FDpCbf7Y/DmTGOv49+AWBkFhS2ZwwGTX65L61PDlTSAzL+rPFmHaQBHnsli8U9N6E4XHDEOjbSMRX f2@digitalocean
我仍然相信应该有一种不涉及云结构的聪明的方法来做到这一点。
答案3
我通过修改答案找到了一个更通用的解决方案这个问题以另一个用户身份登录时完成此操作:
cat ~/.ssh/id_rsa.pub | ssh root@storage-1 'useradd ceph; umask 0077; mkdir -p ~ceph/.ssh; cat >> ~ceph/.ssh/authorized_keys && echo "Key copied"'
答案4
您可以使用ssh-copy-id
它将 SSH 密钥传输到远程主机。
例子:
mallard@steamroller:~$ ssh-copy-id mallard@puter
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'mallard@puter'"
and check to make sure that only the key(s) you wanted were added.
它会自动创建目录(例如.ssh
)并为其设置正确的权限。