AWS インスタンスを使用すると、初めてパスワードなしで秘密鍵を使用して SSH 経由で SSH を接続できます。

AWS インスタンスを使用すると、初めてパスワードなしで秘密鍵を使用して SSH 経由で SSH を接続できます。

提案されている場合、これはサーバーの公開鍵をコピーしてSSHに接続することではありません。

そのため、AWS Linuxインスタンスを作成し、SSHキーペアを作成し、自動的にプライベートキーをダウンロードしました.

これで、次の簡単な方法でAWS Linuxインスタンスに接続できます。

ssh -i key_they_gave_me ec2-user@AWSinstanceIP

私のLinux仮想マシンにこのようなものをどのように設定しますか?それでは、誰かがパスワードを要求せずに秘密鍵を使用してSSHにアクセスできますか?

編集:id_rsa.pubコピーについて話すものではありません。私はこれを行う方法を知っており、AWSインスタンスではそれを必要としません。これが私が望むものです。

答え1

SSHは空のパスワードを受け入れます。ssh-keygenパスワードの入力を求められたら、Enterキーを押すだけでコピーできます。からman ssh-keygen

このプログラムにはパスワードも必要です。パスワードは空である可能性があります。つまり、パスワードがない場合(ホストキーに空のパスワードが必要)、任意の長さの文字列がある可能性があります。

これは、さまざまなクラウドサービスの一部として生成されたキーの標準動作です。 Google や Microsoft クラウドを使用している場合でも、同じことが起こることを願っています。これは安全ではないように見えるかもしれませんが、代替案もそれほど良くありません。何らかの方法で仮想マシンにアクセスできるようにする必要があります。

セキュリティが気になる人のためにssh-keygen公開鍵を変更せずに秘密鍵のパスワードを変更する機能もあります。

ssh-keygen -p -f key_they_gave_me

個人的には、私はデフォルトでパスワードを有効にしますが、パスワードのないキーをLUKSボリュームに保存します。 SSHを頻繁に使用する予定の場合は、主キーの上にパスワードのないキーをインストールしてください。完了したら、それを削除して侵入者はまだパスワードを処理する必要があります。これにより、ssh-agentが不要になり、同時にキーセキュリティの制御が大幅に可能になります。

答え2

AWS インフラストラクチャが SSH キーを生成する方法についてお問い合わせいただきました。 AWSで働き、この情報を公開することを許可されていない限り(高い可能性なし)これで完全な答えは得られません。

結論は、あなたが探している答えは、あなたが使用している仮想化バックエンドに完全に依存しているということです。

ところで、AWSが公開した情報によると、これまでに使用していた方法のKVM代わりに自社製の仮想化プラットフォームを使用しているということです。XEN

これにより、AWS がこれを行う方法を推測することができます。または、少なくとも kvm ホストでこれを行う方法を提供できます。私が知っている限り、最も一般的な方法はvirt-sysprepロゴのある画像に使用することです。qcow2--ssh-inject

はい

まず、kvmhostで公開鍵を生成しますssh-keygen。ユーザーがiamAguest次の場所に新しい公開鍵を保存したとします。/home/iamAguest/.ssh/id_rsa.pub

virt-sysprepその後、次のキーを画像に挿入することができます。

virt-sysprep -a a_linux_image.qcow2 --run-command 'useradd iamAguest' --ssh-inject iamAguest:file:/home/iamAguest/.ssh/id_rsa.pub 

その後、そのイメージを使用してインスタンスをデプロイすると、a_linux_image.qcow2新しく作成されたキーを使用してSSHを実行できます。

Amazonはボタンをクリックするだけでこれをどのように実行しますか?

十分に単純なスクリプトでこれを行うことはできますが、AWS規模のプラットフォームでは間違いなくかなり複雑になります。

独自のkvmインスタンスを実行する場合は、次のような簡単な方法を使用できます。

#!/usr/bin/bash

# get image and user from user input
image=$1
user=$2

# fail if no user input
if [ -z "$image" ] || [ -z "$user" ]; then
    echo "you must enter a filepath to an image and a user name to run this"
    echo "e.g: inject_ssh.bash <image> <user>"
    exit 1
fi

# create ssh key for current logged in user with no passphrase
echo -e "/home/$user/.ssh/id_rsa\n\n" | ssh-keygen

# inject key into image 
virt-sysprep -a $image --run-command "useradd $user" --ssh-inject $user:file:/home/$user/.ssh/id_rsa.pub

ただし、コンシューマーソリューションとして提供する場合は、キーなしできれいな画像を維持できるように、最初に画像をコピーすることをお勧めします。スクリプトにさらに検証を追加するのも良い考えです。これは単なる例です。

答え3

実際に方法を見つけました。実は本当に簡単です。

machine1とmachine2があり、machine1のユーザーがmachine1以外のシステムでもmachine2にアクセスできるようにして、machine1のキーを処理することなくmachine1からmachine2にアクセスできるようにしたいとします。

ssh-keygenマシン2で行います。次に、cat /path/.ssh/id_rsa.pub >> /path/.ssh/authorized_keys最後にPermission.pemファイルにchmod 600 /path/.ssh/authorized_keysコピーしてid_rsamachine1に渡します。

このようにして、machine1はmachine2に接続して動作できますssh -i permission.pem thatuser@machine2。 machine1のユーザーは、パスワードなしでどのシステムでも許可.pemを持ってmachine2に接続できます。

もちろん、これは安全ではありませんが、パスワードを使用することもできます。私が知りたいのは、これを行う方法の概念です。これが答えた。

関連情報