私はCephをハードな方法でセットアップするチュートリアルを書いています。シェルです。
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
これはデジタルオーシャンであるため、最初のクラウドインスタンスブートアップの一部としてユーザーデータを設定することで問題に対処できます。次の手順では、cepユーザーを作成し、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
クラウドファブリックを使用せずにこれを行うスマートな方法があるはずだと私はまだ信じています。
問題の一部は、.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
の場合は[.ssh
]、644
の場合は.ssh/authorized_keys
は問題ありません)。この質問 への回答を変更して、別のユーザーとしてログインしながらこれを達成することにより、より一般的なソリューションを見つけました。
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"'
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
など)が自動的に作成され、適切なアクセス許可に設定されます。