序章

DigitalOceanメタデータサービスの導入により、ログインする前にサーバーの構成を開始することができます。 つまり、メタデータサービスは、サーバーが起動プロセス中にアクセスできるHTTPの場所です。

メタデータの場所には、ネットワークアドレス、ホスト名など、サーバーの構成と環境に関する基本データが含まれます。 初期設定中に、これらの値はと呼ばれるプログラムによってプルダウンすることができます cloud-init 重要なサービスの構成を支援します。

最も強力な機能は、というフィールドを使用してサーバーを作成するときに、メタデータサービスにスクリプトを渡すことができることです。 user-data. これは最初の起動プロセス中に実行され、非常に柔軟性があり、スクリプトで実行できることは何でも実行できます。

渡すスクリプトの最も一般的なタイプは、 cloud-config 脚本。 これはYAML形式のファイルであり、宣言によって一般的な構成アイテムを設定するためのシンプルで読みやすいメソッドを提供します。 また、他のタスクのために任意のコマンドを実行する機能もあります。

このガイドでは、DigitalOceanメタデータサービスと cloud-config 簡単な例を試してファイルを作成します。 デモンストレーションのために、 Ubuntu14.04ガイドの初期サーバーセットアップで概説されている手順の一部を再作成します。

目標

Ubuntu 14.04初期サーバーセットアップガイドの手順を正常に複製するには、スクリプトでいくつかのタスクを実行する必要があります。

上記のガイドが実行する基本的なタスクは次のとおりです。

  • rootユーザーのパスワードを変更する
  • 新しいユーザーを作成する
  • 新しいユーザーのパスワードを作成します
  • 新しいユーザーにroot権限を与える
  • (オプション)SSHデーモンがリッスンするポートを変更します
  • (オプション)ルートSSHログインを制限する
  • (オプション)新しいユーザーを明示的に許可する

環境に対処するための目標の変更

で作成されたサーバーの場合 cloud-config ファイルの場合、目標を少し変更する必要があります。 を通じて渡された情報 cloud-config サーバーの存続期間中、システムの任意のユーザーがファイルにアクセスできます。

これにより、理解して対処することが重要なセキュリティの問題がいくつか発生します。 覚えておくべきいくつかのことは次のとおりです。

  • 渡された情報 cloud-config システム上のすべてのユーザーがアクセスできます。 機密情報を入れないでください cloud-config ファイル。
  • 既存のユーザーのパスワードを設定できますが、プレーンテキストで渡す必要があります。
  • 新規ユーザーの場合、ハッシュバージョンのパスワードを渡すことができますが、これらのハッシュは最新のハードウェアでは非常に簡単に破ることができます。

これらのことを念頭に置いて、私たちのセットアップは、パスワードをどのような形式でも、 cloud-config ファイル。 展開環境の特定のニーズに対応するために、目標を調整できます。

調整後の戦略は次のようになります。

  • パスワードを設定せず、rootアカウントにSSHキーを提供しない cloud-config (DigitalOceanインターフェイスを介して追加されたSSHキーは、通常どおり追加されます)
  • 新しいユーザーを作成する
  • 新しいユーザーアカウントにパスワードを設定しない
  • 新しいユーザーアカウントのSSHアクセスを設定します
  • 新しいユーザーにパスワードなしのsudo権限を付与して、管理上の変更を行います。
  • (オプション)SSHデーモンがリッスンするポートを変更します
  • (オプション)ルートSSHログインを制限します(特に、DigitalOceanインターフェイスを介してSSHキーを含めない場合)
  • (オプション)新しいユーザーを明示的に許可する

両方のアカウントのパスワードを削除することに加えて、ここで最も大幅な変更は、新しいアカウントが使用できるようになることです。 sudo アカウントのパスワードを入力せずに。 これは、rootログインを許可しておらず、新しいユーザーのアカウントパスワードを設定していないために必要です。

新しいユーザーがログインした後、必要に応じて、自分のパスワードを安全に設定し、sudo権限を変更してパスワードを要求することができます。

これらの調整された目標を念頭に置いて、始めましょう。

Cloud-Configファイルの使用

A cloud-config fileは基本的に、特定のディレクティブを理解するYAMLファイルです。 YAMLは、人間が非常に読みやすいように設計されたデータシリアル化形式であり、理解と編集が簡単です。

YAMLファイルは、フォーマットに関していくつかのルールに依存しています。

  • 空白のインデントは、アイテムの構造と相互の関係を示します。 よりインデントされているアイテムは、最初のアイテムのサブアイテムであり、その上に低いレベルのインデントがあります。
  • リストのメンバーは、先頭のダッシュで識別できます。
  • 連想配列エントリは、コロン(:)の後にスペースと値を使用して作成されます。
  • テキストのブロックはインデントされます。 書式を維持したまま、ブロックをそのまま読み取る必要があることを示すには、ブロックの前にパイプ文字(|)を使用します。

の最初の行 cloud-config ファイルには特別な識別子が含まれている必要があります。 cloud-init プログラムは、ファイルが cloud-config ファイル。 これは次のようになります。

#cloud-config

これは、最初の行に単独で配置する必要があります。 The cloud-config サーバーの作成時にファイルを提供する必要があります。 これは、2つの異なる方法で実行できます。

メタデータサービスは、クラウド1.5がデプロイされているリージョンでのみ利用可能であることに注意してください。 さらに、user-dataフィールドを使用するために必要なcloud-initのバージョンは、現在、Ubuntu14.04とCentOS7、およびこれらのリリースに基づくアプリケーションイメージでのみ使用できます。

コントロールパネルのインターフェイスを介して、ユーザーデータを有効にするオプションのチェックボックスがあります。 これを選択すると、貼り付けることができるテキストボックスが表示されます cloud-config ファイル:

APIを使用している場合、作成リクエスト中に渡されるJSONオブジェクトは、次のフィールドを利用できます。 user_data. たとえば、次のようなJSONオブジェクトを渡すことができます。

{
    "name": "test",
    "private_networking": true,
    "region": "nyc3",
    "size": "512mb",
    "image": "ubuntu-14-04-x64",
    "user_data":"#cloud-config
        config_data
        more_config"
    "ssh_keys":[ 12345,56789 ]
}

これらの方法はどちらも実際にはまったく同じように機能するため、最も快適な方法を使用してください。

新しいユーザーアカウントの設定

最初に行う必要があるのは、新しいユーザーアカウントを構成することです。

これは、ほとんどすべての作業が行われる場所です。 rootアカウントにはデフォルトでパスワードがないため、そこでパスワードを「設定解除」する必要はありません。

新しいユーザーを作成する

新しいユーザーを作成するには、 users 指令。 これには、作成するすべての新しいアカウントのリストが含まれます。 アカウントは1つしか作成していないため、1つのリストがあります。 リンクしたガイドに従うために、この新しいアカウントを呼び出します demo.

覚えておいてください、私たちは私たちを始めなければなりません cloud-config のファイル #cloud-config 最初の行で一人で。 これまでのところ、ファイルは次のようになります。

#cloud-config
users:
  - name: demo

ユーザーを追加したい場合は、次のように、アイテムを下に配置し、このアイテムと水平方向に揃えて、ダッシュから始めます。

#cloud-config
users:
  - name: demo
  - name: second_user

各ダッシュは、ユーザーの詳細を追加できる個別のユーザーアカウントを示します(これはすぐに実行します)。 ただし、作成しているユーザーは1人だけなので、このガイドにはこの2行目はありません。

許可されたキーの追加

パスワードなしでこの新しいアカウントにログインするには、1つ以上のSSH公開キーを提供する必要があります。 これらは新しいユーザーに追加されます authorized_keys 内のファイル .ssh ホームディレクトリのディレクトリ。

これは、 ssh-authorized-keys ディレクティブ。これは、 users エントリ。 基本的に、これは私たちがそれを私たちの name ディレクティブですが、新しいユーザーエントリの開始ではないため、ダッシュを付けないでください。

The ssh-authorized-keys エントリは実際にキーのリストを取ります。 これにより、ファイルに複数のSSH公開鍵を追加できます。 たとえば、ラップトップ、デスクトップ、およびコンピューター用のSSHキーペアが稼働している場合、それらすべてを個別のアイテムとして ssh-authorized-keys リスト。

ローカルコンピュータの公開鍵の内容を取得するには、次のように入力します。

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]

その後、完全なコンテンツをアイテムとして私たちの下に貼り付けることができます ssh-authorized-keys エントリ。 SSH公開鍵は公開して投稿できるため、これはセキュリティリスクを表すものではありません。

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]

追加のキーを追加したい場合は、別のダッシュの後に2番目の公開キーを追加することで実行できます。

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - key_one
      - key_two

このアカウントへのログインに使用するキーをここに追加します。

SudoAccessを設定する

次のステップは設定することです sudo 新しいアカウントへのアクセス。 繰り返しになりますが、パスワードなしで構成します sudo セキュリティ上の制限により、このアカウントにはパスワードを設定しないため、アクセスしてください。

アクセスを構成するために、実際には2つの別々のステップを実行します。

まず、使用するエントリを作成します sudoers ファイル。 私たちの変更は実際には別のファイルに書き込まれます /etc/sudoers.d ディレクトリ、これ /etc/sudoers 解析時に含まれます。

作成する必要のあるエントリには、ユーザー名を含める必要はありません。 cloud-init エントリ情報からアカウント名を把握するのに十分賢いです。 使用する必要のあるディレクティブは sudo、これは私たちの他のものと一致しています users レベルディレクティブ。

ガイドの場合、パスワードなしで構成しているため sudo 機能は、次のようになります。

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']

これにより、ファイルが作成されます /etc/sudoers.d と呼ばれるディレクトリ 90-cloud-init-users. このファイル内のエントリは次のようになります。

demo ALL=(ALL) NOPASSWD:ALL

次に行うことは、実際にユーザーをに追加することです。 sudo グループ。 によって解析される新しいアカウントに固有のエントリがあるため、これは厳密には必要ありません。 sudo、しかしそれは私達により多くの柔軟性を与えます。

後で、ユーザーのパスワードを手動で設定し、そのパスワードを sudo コマンド。 ユーザーがすでに sudo グループの場合、パスワードを設定し、のエントリを削除するだけです。 90-cloud-init-users ファイル。

補足グループを追加するには、 groups 指令:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo

これにより、より伝統的なものに移行します sudo セットアップが簡単です。 このガイドの最後に、これを行う方法を示します。

シェル環境を設定する

デフォルトでは、新しく作成されたユーザーのデフォルトのシェルは非常に基本的なものに設定されています /bin/sh シェル。

これは、ほとんどの人が慣れているよりもはるかに簡素化された環境であるため、手動で指定する必要があります bash 新しいユーザーのためのシェル環境。

これは、 shell 内のディレクティブ users レベルのアイテム。 私たちがする必要があるのは、それを bash 実行可能:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash

新しいユーザー設定が完了しました。 これで、SSHデーモンをロックダウンするオプションの手順に進むことができます。

SSHデーモンの構成とロックダウン(オプション)

次の手順は、セキュリティを強化するのに役立ちます。 必要に応じて、それらのいずれかまたはすべてを実装できます。 これらのオプションの詳細については、自動化するガイドをご覧ください。 2つの異なる方法を使用して各アイテムを実装する方法を示します。

行う必要のあるすべての変更は、 /etc/ssh/sshd_config ファイル。 繰り返しになりますが、私たちが関心を持っている変更は次のとおりです。

  • (オプション)SSHデーモンがリッスンするポートを変更します
  • (オプション)ルートSSHログインを制限します(特に、DigitalOceanインターフェイスを介してSSHキーを含めない場合)
  • (オプション)新しいユーザーを明示的に許可する

これらの設定は、これらの変更を行うことで実装できます。 sshd_config それぞれファイル:

  • ポート4444
  • PermitRootLogin no
  • AllowUsersデモ

これらの変更を行うには2つのアプローチがあります。 1つ目は、構成ファイル全体を内部に提供して、ファイルを完全に書き換えることです。 cloud-config ファイル。 2つ目は、一般的なLinuxテキストユーティリティを使用して戦略的に変更を加えることです。

これらは両方とも利点があり、どちらも異なるディレクティブを示しています cloud-config. それぞれを順番に説明します。

新しい構成ファイルを提供してSSHデーモンを構成する

必要な変更を加えるための最初の戦略は、必要な内容でファイルを完全に書き直すことです。

これにより、デフォルトで何が利用可能であるかに関係なく、ファイルを完全に制御できます。 方法論は単純明快であり、私たちの行動の結果を予測するのは簡単です。

ディスクに新しいファイルを書き込むには、 write_files 指令。 これはトップレベルのディレクティブであるため、 users 以前作業していたセクション。

書き込みたいファイルのリスト(各項目にダッシュで表されています)を提供します。

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
write_files:
  - item_one
  - item_two

この例では、1つのファイルのみを書き込みます。 ファイルごとに、作成したいチャネルに関する詳細を提供します。 たとえば、使用できるパラメータは次のとおりです。 path, content, owner, permissions、さらには encoding.

デフォルトでは、このメソッドで作成されたファイルの所有者はrootであり、権限は 644、まさにそれが私たちが望んでいることです。 だから私たちは供給する必要があるだけです pathcontent ディレクティブ。

The path ファイルを書き込むためのファイルシステム内の場所です。

のために content、ファイルの内容全体をそのまま提供する必要があります。 パイプ文字(|)を使用して、フォーマットを維持するテキストのブロックを渡すことができることを忘れないでください。

私たちのコンテンツについて sshd_config ファイルでは、コメントを取り除いたデフォルトのコンテンツ(簡潔にするため)を、必要な変更を加えて使用します。 ファイルを書き換える完全なセクションは次のようになります。

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
write_files:
  - path: /etc/ssh/sshd_config
    content: |
         Port 4444
         Protocol 2
         HostKey /etc/ssh/ssh_host_rsa_key
         HostKey /etc/ssh/ssh_host_dsa_key
         HostKey /etc/ssh/ssh_host_ecdsa_key
         HostKey /etc/ssh/ssh_host_ed25519_key
         UsePrivilegeSeparation yes
         KeyRegenerationInterval 3600
         ServerKeyBits 1024
         SyslogFacility AUTH
         LogLevel INFO
         LoginGraceTime 120
         PermitRootLogin no
         StrictModes yes
         RSAAuthentication yes
         PubkeyAuthentication yes
         IgnoreRhosts yes
         RhostsRSAAuthentication no
         HostbasedAuthentication no
         PermitEmptyPasswords no
         ChallengeResponseAuthentication no
         X11Forwarding yes
         X11DisplayOffset 10
         PrintMotd no
         PrintLastLog yes
         TCPKeepAlive yes
         AcceptEnv LANG LC_*
         Subsystem sftp /usr/lib/openssh/sftp-server
         UsePAM yes
         AllowUsers demo

これにより、の内容が完全に置き換えられます /etc/ssh/sshd_config 私たちが提供した新しいコンテンツで。 これがデフォルトです sshd_config 上記の項目のみが変更されたUbuntuのファイル。

これは、SSHデーモンに変更を加える1つの方法です。

焦点を絞った変更によるSSHデーモンの構成

変更できる2番目の方法 sshd_config ファイルは焦点を絞った編集によるものです。 Linuxシステムには、必要な変更のみを行うために活用できるさまざまな強力なテキスト操作ツールが付属しています。

任意のコマンドを実行するには、次のコマンドを使用します runcmd、これにより、システム上で任意のコマンドを実行できます。 各コマンドは、ディレクティブの下のリストアイテムになります。 これらは、コマンド全体を表す文字列として、またはコマンドとすべてのオプションを要素として持つ配列として指定できます。

を使用します sed コマンド。文字列の置換のために作成されます。 1つに複数の操作を渡すことができますが sed コマンド、それぞれに対して単一の操作を実行します sed 指図。 これにより、問題のトラブルシューティングが簡単になります。 私たちのすべて sed コマンドは編集します sshd_config ファイルを配置します。

私たちの最初の sed コマンドは、リスニングポートを構成する行を変更します。 「ポート」で始まる行を検索することで、これを識別します。 教えてあげます sed 行全体を置き換える(正規表現で指定) ^.*$) 私たち Port 4444 構成:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' etc/ssh/sshd_config

次は sed lineは、行の先頭でその文字列を検索することにより、「PermitRootLogin」ディレクティブを変更します。 もう一度、行全体を置き換えます。今回は PermitRootLogin no:

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config

sed 現在、ファイルには「AllowUsers」ディレクティブがないため、コマンドはファイルの最後に行を追加します。 これを行うには、最後の行(「$」で指定)を照合し、必要な行を追加します。

その後、変更が反映されるようにSSHデーモンを再起動する必要があります。 これは、Upstartの「restart」コマンドを使用して簡単に行うことができます。

#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
  - sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config
  - restart ssh

これは、ファイルに必要な編集を行い、サービスを再起動するのに十分なはずです。

完成品

これで、調整されたすべての目標を次のように使用して達成しました。 cloud-config ファイル。 コントロールパネルを使用してサーバーを作成するか、APIを使用してサーバーを起動できます。

APIを使用することを選択した場合、サンプルデータペイロードは次のようになります。

{"name": "your_droplet_name",
"private_networking": true,
"region": "nyc3",
"size": "512mb",
"image": "ubuntu-14-04-x64",
"user-data": "#cloud-config
users:
  - name: demo
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip [email protected]
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash
runcmd:
  - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config
  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
  - sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config
  - restart ssh"}

トラブルシューティング

取得に問題がある場合 cloud-config ファイルが正しく機能するようにするには、ログファイルで手がかりを確認できます。

これらは次の場所にあります。

  • /var/log/cloud-init.log :cloud-initによる構成ファイルの処理の実際のプロセスログ。
  • /var/log/cloud-init-output.log :構成の処理によって生成された出力はすべてここにあります。

あなたは通常、使用することによって何が起こったかについてのいくつかの良い情報を見つけることができます grep これらのファイルを検索します。

構成上の問題が原因で作成したサーバーにログインできない状況になった場合は、サーバーを破棄して再起動することをお勧めします。 トラブルシューティングのために、rootパスワードを使用してテストサーバーを一時的に設定する必要がある場合があります。 cloud-config 何が問題になっているのかを確認できるようにファイルします。

これはあなたの中にこのようなものを含めることによって行うことができます cloud-config:

#cloud-config
chpasswd:
  list: |
    root:yourpassword
  expire: False
. . .

これにより、SSHに依存しないDigitalOceanコンソールを使用してログインできるようになります。 ここに設定したパスワードは、システムの存続期間中、サーバー上のすべてのユーザーが読み取ることができるため、問題が何であるかを確認したら、このドロップレットを破棄してください。 その後、修正されたサーバーを使用して別のサーバーを起動できます cloud-config ファイル。

従来のSudoアクセスの設定

従来のパスワード認証を構成する場合 sudo サーバーがデプロイされた後にアクセスするには、次の手順を簡単に実行できます。

まず、新しいアカウントのパスワードを設定する必要があります。 が現在のパスワード(存在しない)を入力せずにこれを行う唯一の方法は、 sudo. ルートパスワードを設定しないようにするには、コマンドの最後に新しいユーザーアカウントの名前を指定する必要があります。

sudo passwd demo

アカウントのパスワードを取得したので、実際に、 sudo グループ。 これは、次のように入力することで実行できます。

groups
demo sudo

まだ参加していない場合 sudo グループの場合、次のように入力して自分を追加できます。

sudo usermod -a -G sudo demo

今、編集します 90-cloud-init-users とファイル visudo コマンド、ファイルを引数として渡すことによって:

sudo visudo -f /etc/sudoers.d/90-cloud-init-users

ユーザーに関連付けられている行をコメント化または削除します。

#demo ALL=(ALL) NOPASSWD:ALL

ファイルを保存して閉じます。 アカウントを実行するには、パスワードが必要になります sudo コマンド。

結論

使用する cloud-config サーバーの初期構成を完了するためのファイルは簡単で、長期的には時間を節約できます。 ファイルは簡単に調整でき、さまざまな構成を構築することで、サーバーをすばやくセットアップする際の柔軟性が大幅に向上します。

組み合わせることで cloud-config マシンがオンラインになった後の従来の構成管理システムを使用すると、新しいマシンをすばやく簡単に目的の状態にすることができます。