web-dev-qa-db-ja.com

ルートアクセスを指定して、リモートホストでSSHアクセスを使用して新しいユーザーをセットアップする最も簡単な方法

私は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
1
0xF2

これはデジタルオーシャンであるため、最初のクラウドインスタンスブートアップの一部としてユーザーデータを設定することで問題に対処できます。次の手順では、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

クラウドファブリックを使用せずにこれを行うスマートな方法があるはずだと私はまだ信じています。

1
0xF2

問題の一部は、.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は問題ありません)。
1
muru

この質問 への回答を変更して、別のユーザーとしてログインしながらこれを達成することにより、より一般的なソリューションを見つけました。

 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"'
0
0xF2

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など)が自動的に作成され、適切なアクセス許可に設定されます。

0
Matthew Smith