私は家で怠け者で、自宅のマシンにパスワード認証を使用しています。キーベースの認証に移行する準備ができました。これを行う方法については、ウェブ上に多くのオプションがあります。たとえば、キャットしてからキーをかぶる、キーを直接かざすなどです。
キーをコピーする最も簡単で推奨される方法を探しています。Ubuntusshパッケージのどこかに便利なラッパーがあるといいのですが。
パスワードによるログインを停止する方法 についてはすでに知っています。
ssh-copy-id
コマンド(openssh-clientパッケージに含まれ、デフォルトでインストールされる)は、まさにこれを行います:
ssh-copy-id [email protected]
デフォルトIDの公開鍵(他のIDには-i identity_file
を使用)をリモートホストにコピーします。
デフォルトのIDは「標準」のsshキーです。これは、~/.ssh
ディレクトリ内の2つのファイル(公開キーと秘密キー)で構成され、通常、キーの種類に応じて、identity
、id_rsa
、id_dsa
、id_ecdsa
、またはid_ed25519
(.pub
と同じ)という名前が付けられます。複数のsshキーを作成しなかった場合、IDの指定について心配する必要はありません。ssh-copy-idは自動的にそれを選択します。
IDがない場合は、ssh-keygen
ツールを使用してIDを生成できます。
さらに、サーバーがデフォルトのポート(22
)とは異なるポートを使用する場合、次のように引用符を使用する必要があります( source ):
ssh-copy-id "[email protected] -p <port-number>"
マルセルの答えが好きです。私はこのコマンドを知りませんでした。 SunのWebサイト で見つけたものを常に使用しています。
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'
ssh
の力でシェルコードで達成できることの良い例であるため、ここにまだ投稿しようと思いました。しかし、ssh-copy-id
を使用することは、間違いなく適切に行うためのより安全な方法です!
フォルダ.ssh
がまだ存在しない場合、上記のコマンドは失敗することに注意してください。さらに、ファイルを作成するときに、最小限の許可を設定することをお勧めします(基本的には、所有者のみの読み取り/書き込み)。より高度なコマンドを次に示します。
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Ubuntuでは、Launchpadからキーを取得できます。
ssh-import-id [launchpad account name]
詳細:
公開キーファイルの内容をそのフィールドに貼り付けます(コメントを含む)。このようなキーは次のようになります。
ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
ここで、ssh-rsa
はキーがRSAキーであること、AAAAB3Nza .... UyDOFDqJp
は実際のキー、lekensteyn
はコメントであることを示します。
パッケージssh-import-id
は、リモートからアクセスする必要があるマシンにインストールする必要があります。このパッケージは、openssh-server
の推奨パッケージであるため、openssh-server
パッケージと一緒にインストールされます。 ssh-import-id
がインストールされていることを確認した後、クライアントマシンで次を実行します。
ssh-import-id [launchpad account name]
これにより、HTTPSを介してLaunchpadサーバーから公開鍵がダウンロードされ、MITM攻撃から保護されます。
Ubuntu Lucid以前では、次の方法で同じことを実現できます。
wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys
echo
コマンドは、SSHキーを含む行の後に余分な改行を取得するために必要です。
カスタムポート用
ssh-copy-id -i "[email protected] -p2222"
-iスイッチのデフォルトは〜/ .ssh/id_rsa.pubです。別のキーが必要な場合は、-iの後にキーのパスを入力します
警告: -iを記述しなかった場合、〜/ .sshにあるすべてのキーがコピーされます
ssh-copy-id
はまさにそれを行います。ここの他の回答のいくつかが不正確な情報を追加する理由はわかりません。ヘルプには以下が表示されます。
~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
-f: force mode -- copy keys without trying to check if they are already installed
-n: dry run -- no keys are actually copied
-h|-?: print this help
私はCentOS 7.6サーバーを搭載したUbuntu 18.04クライアントで次のことを試しましたが、それは魅力的なものでした。この例では、2222
のカスタムポートを使用し、~/.ssh/path-to-rsa.pub
で公開キーを指定しています。
$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]
コマンドを実行する前に、最後に-n
スイッチを使用してドライランを実行し、コマンドが意図したとおりに機能することを確認しました。それを確認したら、-n
スイッチなしで、上記のようにコマンドを再度実行しました。