私はRoot.io
のTrellis
ワークフローを使っています。
ansible-playbook
経由で接続を確立できないというエラーが発生しました。
ansible-playbook server.yml -e env=staging
を実行すると、ssh接続を確立できないというエラーが表示されるので、users.yml
ファイルを確認したところ、keys
セクションの下に問題がありました。
- name: "{{ admin_user }}"
groups:
- Sudo
keys:
- "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- https://github.com/dummyuser.keys
私は私が既存のid_rsa.pub
キーを持っていることに気づきました、しかし、私はそれを私のサーバー上で認証させていませんでした、私は代わりにhttps://github.com/dummyuser.keys
を使っていました。だから私はその行を削除しました
- "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
しかし、それでも問題は解決しません。応答は次のとおりです。
fatal: [10.10.2.5]: UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the Host via ssh.",
"unreachable": true
}
また、sshでログインするのにpublic key
が必要なときに、なぜconfigがprivate key
を指すのですか。私はいつもやる
ssh -i ~/.ssh/private_key [email protected]
私はSSH経由でサーバーにログインするたびに。
私は別の方法を使いました。今回はcliのキーを指定しました
ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa
その結果、接続を確立できました。
<10.10.2.5> ESTABLISH SSH CONNECTION FOR USER: dummy_admin
しかし、別のエラーがありました:それはa password is required
がここで完全なメッセージであると言います:
fatal: [10.10.2.5]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {"module_name": "setup"},
"module_stderr": "OpenSSH_6.9p1, LibreSSL 2.1.8\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 21: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 85702\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\nShared connection to 10.10.2.5 closed.\r\n",
"module_stdout": "Sudo: a password is required\r\n",
"msg": "MODULE FAILURE",
"parsed": false
}
なぜパスワードが私のgroup_vars/staging/vault.yml
に設定されているのか、よくわからないのですが、その内容は次のとおりです。
vault_mysql_root_password: stagingpw
vault_sudoer_passwords:
dummy_admin: $6$rounds=656000$8DWzDN3KQkM9SjlF$DhxLkYaayplFmtj9q.EqzMDWmvlLNKsLU0GPL9E0P2EvkFQBsbjcMCXgWkug4a5E66PfwL4eZQXzMLkhXcPBk0
それで、私はついに以下のコマンドを使ってログインしました:
ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa --ask-become-pass
私にパスワードを尋ねた後、それは機能し、問題なく私のサーバーを準備します。
誰もがこれに光をあてることができますか?私は何かが足りないのですか?詳細が必要な場合はお知らせください。
私はこの質問を discourse および @fullyint にも投稿しました。だから私はちょうど答えといくつかの抜粋のためのリンクを投稿しています
Ansibleとsshが必要な秘密鍵を見つけるのを手助けする
つまり、各sshコマンドで秘密鍵を手動で指定していることになります。はい、すべてのansible-playbookコマンドで秘密鍵を手動で指定することの当然の結果は、--private-key =またはkey-file =オプションを追加することです。ただし、sshコマンドとansible-playbookコマンドを使用して目的の秘密鍵ファイルを自動的に検索して使用することで、面倒な作業を省くことができます。 1つの方法は、Host 10.10.2.5で使用されるIdentityFileを指定して、ssh設定ファイルにエントリを追加することです。私はあなたのssh-agentに〜/ .ssh/dummy_rsaをロードすることをお勧めします。これはあなたのために鍵を扱うことができ、接続を試みるときに複数の秘密鍵を試します。
あなたのssh-agentが起動していることを確認してください:ssh-agent bashあなたのキーを追加してください:ssh-add〜/ .ssh/dummy_rsaあなたがMacなら、キーチェーンにキーを追加してください:ssh-add -K 〜/ .ssh/dummy_rsaこれで、sshコマンドが-iオプションなしで、そしてansible-playbookコマンドを--key-file =オプションなしで実行できるようになるはずです。 SSH接続をしてみてください。「Sudo:パスワードが必要です」というエラーの理由
Trellisがserver.ymlプレイブックを介して実行するタスクの中には、Sudoを必要とするものもあります。これは、プレイブックがrootとして接続している場合は問題ありませんが、プレイブックがrootとして接続していない場合があります。このrootとしての最初の接続試行が失敗した場合は、admin_userとしての接続にフォールバックします。あなたが発見したように、このユーザーはオプション--ask-become-passを通してそのSudoパスワードを指定しなければなりません。
rootとしての接続が失敗した理由はすでにご存知かもしれませんが、いくつかの可能性があります。
リモートがAWS上にあり、rootがデフォルトで無効になっており、admin_user:ubuntuである可能性があります。
group_vars/all/security.ymlでsshd_permit_root_login:falseを指定してserver.ymlを既に正常に実行したため、rootがssh経由でログインすることは許可されなくなりました(優れたセキュリティ)。あなたが使用しようとしている秘密鍵が、rootユーザーのauthorized_keysのリモートにロードされていない可能性があります。
あなたはおそらくあなたの public キーをマシンのauthorized_keys
ファイルinsideに追加していないでしょう。ローカルのSSHエージェントに private キーを追加することもできます。
public キーをサーバー内に置きます。すでにサーバー上にあるキーの例
# Add key directly on the box:
echo "$(cat your_public_key)" >> ~/.ssh/authorized_keys
# Add key from local to remote:
ssh user@server "echo \"$(cat your_public_key)\" >> ~/.ssh/authorized_keys"
エージェントに private キーを追加する必要があります。
# Start agent
eval "$(ssh-agent -s)"
# Add private key
ssh-add ~/.ssh/your_private_key