インスタンスを作成したら、gcutilまたはsshを使用してログインできます。インスタンスの下部にリストされているsshリンクからコピー/貼り付けを試みましたが、同じエラーメッセージが表示されました。
許可拒否エラーは、おそらくSSH秘密鍵認証が失敗したことを示しています。 gcutilが推奨するDebianまたはCentosのイメージから派生したイメージを使用していると仮定すると、おそらく次のいずれかです。
-i
オプションでプライベートsshキーを指定していません。メタデータサーバーから 'sshKeys'メタデータエントリを取得し、必要に応じて(sudoersアクセスで)アカウントを作成する標準のCompute Engine CentosおよびDebianイメージで毎分実行されるスクリプトがあります。このスクリプトでは、sshKeysメタデータに「account:\ n」という形式のエントリが必要です。また、単一のアカウントのauthorized_keysに複数のエントリを入れることができます。 (または必要に応じて複数のアカウントを作成します)
イメージの最近のバージョンでは、このスクリプトはマシンのローカルログだけでなく、syslogを介してシリアルポートに出力を送信します。 gcutil getserialportoutput
を介してシリアルポート出力の最後の1MBを読み取ることができます。これは、マシンがSSHを介して応答しない場合に便利です。
gcutil ssh
の仕組み:gcutil ssh
は次のことを行います。
$HOME/.ssh/google_compute_engine
でキーを探し、ssh-keygen
を呼び出して、存在しない場合は作成します。${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
のようなエントリのsshKeys
のプロジェクトメタデータエントリの現在の内容をチェックしますgcutil ssh
は、VMに接続するためのいくつかのコマンドライン引数を使用してssh
を呼び出します。sshKeys
を読み取るスクリプトを削除または変更した場合、コンソールとコマンドラインツールはsshKeys
の変更が機能しないことを認識せず、上記の自動マジックの多くが破損する可能性があります。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に設定されていることを確認します(他のユーザーが.sshサブディレクトリを参照できないようにするために、ユーザーrwxを所有します)。
次に、〜/ .sshディレクトリーも700(ユーザーrwx)であり、authorized_keysが600(ユーザーrw)であることを確認します。
〜/ .sshディレクトリーの秘密鍵は600または400でなければなりません(ユーザーrwまたはユーザーr)
私はこの問題に長い間直面していました。最後に、それはssh-addの問題でした。 Git sshの資格情報は考慮されませんでした。
次のコマンドが動作する可能性があることを確認してください。
ssh-add
同じ問題が発生し、何らかの理由でsshKeysがインスタンス上のユーザーと同期していませんでした。
-ssh_user = anotheruserをgcutilコマンドに追加して、別のユーザーを作成しました。
Gcutilはこのように見えました
gcutil --service_version="v1" --project="project" --ssh_user=anotheruser ssh --zone="us-central1-a" "inst1"
作成したばかりのコンピューティングエンジンVMに接続した後、同様のメッセージが表示されました[私のものは "Permission denied(publickey)"]。この投稿を読んだ後、もう一度試してみることにしました。
その時はうまくいった。したがって、2回目に動作する理由として考えられるのは3つです。
最後の可能性は低いと思う:)
Ec2インスタンスをsshに接続しているときにこのエラーが見つかりました。間違ったユーザー名を書いた場合に発生します。
例えば。 Ubuntuではユーザー名としてubuntuを使用する必要があり、他ではec2-userを使用する必要があります。
この手順に従う必要があります https://cloud.google.com/compute/docs/instances/connecting-to-instance#generatesshkeypair
「許可が拒否されました(公開鍵)」次のコマンドssh -i ~/.ssh/my-ssh-key [USERNAME]@[IP_ADDRESS]
を使用して、/ etc/ssh/sshd_configファイルを変更し、AllowUsers [USERNAME]
行を追加する必要があります
次に、sshサービスを再起動します
service ssh restart
「ホストキーをロードできませんでした:/ etc/ssh/ssh_Host_ed25519_key」というメッセージが表示された場合、実行:ssh-keygen -A
最後にsshサービスを再起動します。
service ssh restart
ここでのコツは、-C(コメント)パラメーターを使用してGCEユーザーIDを指定することです。 Googleはこの変更を2018年の最後に導入したようです。
GCEインスタンスを所有するGoogleユーザーが[email protected](ログインユーザーIDとして使用します)の場合、(たとえば)とキーペアを生成します
ssh-keygen -b521 -t ecdsa -C myname -f mykeypair
Mykeypair.pubをインスタンスの公開キーリストに貼り付けると、キーのユーザーIDとして「myname」が表示されます。
これを設定すると、コマンドラインからssh、scpなどを使用できます。
ここからすべてに従いました: https://cloud.google.com/compute/docs/instances/connecting-to-instance#generatesshkeypair
しかし、それでもエラーが発生し、インスタンスメタデータのSSHキーが認識されませんでした。
解決策:sshキーに改行があるかどうかを確認します。 catを使用して公開キーをコピーすると、キーにインラインが追加され、キーが破損しました。改行を手動で確認して修正する必要がありました。
回答を受け入れていないので、 PuTTY :
ユーザー名の変更を許可せずに、ゲートウェイマシンでエラーとしてこの質問の件名を取得しました。