インスタンスを作成したら、gcutil または ssh を使用してログインできます。インスタンスの下部にリストされている ssh リンクからコピー/貼り付けを試みましたが、同じエラー メッセージが表示されます。
11 に答える
アクセス許可拒否エラーは、SSH 秘密鍵認証が失敗したことを示している可能性があります。gcutil が推奨する Debian または Centos イメージから派生したイメージを使用していると仮定すると、次のいずれかになります。
-i
ssh キーチェーンにロードされた ssh キーがなく、オプションでプライベート ssh キーを指定していません。- ログインしようとしているアカウントの .ssh/authorized_keys のエントリと一致する ssh キーはありません。
- マシンに存在しないアカウントにログインしようとしているか、root としてログインしようとしています。(デフォルトのイメージでは、ルートへの直接ログインが無効になっています。ほとんどの ssh ブルート フォース攻撃は、ルートまたは脆弱なパスワードを持つその他のよく知られたアカウントに対するものです。)
インスタンスにあるアカウントとキーを特定する方法:
標準の Compute Engine Centos および Debian イメージで毎分実行されるスクリプトがあり、メタデータ サーバーから「sshKeys」メタデータ エントリをフェッチし、必要に応じて (sudoers アクセスで) アカウントを作成します。このスクリプトは、sshKeys メタデータに「account:\n」という形式のエントリを想定しており、1 つのアカウントの authorized_keys に複数のエントリを入れることができます。(または、必要に応じて複数のアカウントを作成します)
イメージの最近のバージョンでは、このスクリプトはその出力を syslog 経由でシリアル ポートに送信するだけでなく、マシンのローカル ログにも送信します。を介してシリアル ポート出力の最後の 1MB を読み取ることができますgcutil getserialportoutput
。これは、マシンが SSH 経由で応答しない場合に便利です。
仕組みgcutil ssh
:
gcutil ssh
次のことを行います。
- でキーを探し、存在しない場合はキーを作成するため
$HOME/.ssh/google_compute_engine
に呼び出します。ssh-keygen
sshKeys
次のようなエントリのプロジェクト メタデータ エントリの現在の内容を確認します。${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
- そのようなエントリが存在しない場合は、そのエントリをプロジェクト メタデータに追加し、メタデータの変更が反映され、VM 内のスクリプトが新しいエントリを認識して新しいアカウントを作成するまで、最大 5 分間待機します。
- 新しいエントリが配置されると (または user:key が既に存在する場合はすぐに) 、VM に接続するためのいくつかのコマンドライン引数を指定して
gcutil ssh
呼び出されます。ssh
これが壊れる可能性のあるいくつかの方法と、それらを修正するためにできること:
- を読み取るスクリプトを削除または変更した場合
sshKeys
、コンソールとコマンド ライン ツールは、変更が機能しないことを認識sshKeys
せず、上記の自動魔法の多くが壊れる可能性があります。 - raw を使用しようとしている
ssh
場合、キーが見つからない可能性があります.ssh/google_compute_engine
。gcutil ssh
を使用するか、ssh 公開鍵 (末尾が ) をコピーしてコンソールのプロジェクトまたはインスタンスのエントリに.pub
追加することで、これを修正できます。sshKeys
(おそらくローカルマシンのアカウント名と同じユーザー名も入力する必要があります。) - を使用したことがない場合
gcutil ssh
は、ファイルがない可能性があり.ssh/google_compute_engine.pub
ます。を使用ssh-keygen
して新しい SSH 公開/秘密キー ペアを作成しsshKeys
、上記のように に追加するか、 を使用gcutil ssh
してそれらを作成して管理することができますsshKeys
。 - 主にコンソールを使用している場合、エントリのアカウント名が
sshKeys
ローカルのユーザー名と一致しない可能性があります。SSH に-l
引数を指定する必要がある場合があります。
ホーム ディレクトリと、接続しているホストのユーザーのホーム ディレクトリのアクセス許可が 700 に設定されていることを確認します (ユーザー rwx を所有しているのは、他のユーザーが .ssh サブディレクトリを参照できないようにするためだけです)。
次に、~/.ssh ディレクトリも 700 (ユーザー rwx) であり、authorized_keys が 600 (ユーザー rw) であることを確認します。
~/.ssh ディレクトリの秘密鍵は 600 または 400 にする必要があります (ユーザー rw またはユーザー r )
私は長い間この問題に直面していました。最後にssh-addの問題でした。Git ssh クレデンシャルは考慮されていませんでした。
次のコマンドが機能するかどうかを確認します。
ssh-add
作成したばかりのコンピューティング エンジン VM に接続した後、同様のメッセージ [私の場合は "アクセス許可が拒否されました (publickey)"] が表示されました。この投稿を読んだ後、もう一度試してみることにしました。
その時はうまくいきました。したがって、2回目に機能する3つの理由が考えられます。
- 2 回目の接続で問題が解決する (ssh キーが最初に作成された後)、または
- おそらく、コンピューティング エンジンが作成された直後にコンピューティング エンジンに接続しようとすると、しばらくすると問題が解決する可能性があります。
- この投稿を読むだけで問題が解決します
最後はありそうもないと思います:)