SSHキーを別のマシンにコピーする最も簡単な方法は?


342

私は家で怠け者で、自宅のマシンにパスワード認証を使用しています。キーベースの認証に移行する準備ができました。これを行う方法については、ウェブ上に多くのオプションがあります。たとえば、キャットしてからキーをかぶる、キーを直接かざすなどです。

キーをコピーする最も簡単で推奨される方法を探していますが、Ubuntu sshパッケージのどこかに便利なラッパーがありますか?

私はすでにパスワードログインを止める方法を知っています


回答:


463

ssh-copy-id(中コマンドのopenssh-クライアントはデフォルトでインストールされたパッケージとは)まさにこのことを行います。

ssh-copy-id user@hostname.example.com

デフォルトのID(-i identity_file他のIDに使用)の公開鍵をリモートホストにコピーします。

デフォルトのIDは「標準」のsshキーです。それはあなたの内の2つのファイル(公開鍵と秘密鍵)で構成され~/.sshたディレクトリ、通常は名前のidentityid_rsaid_dsaid_ecdsaまたはid_ed25519(および同じ.pub)、キーの種類に応じて。複数のsshキーを作成しなかった場合は、IDの指定について心配する必要はありません。ssh-copy-idは自動的にそれを選択します。

IDがない場合は、ツールを使用してIDを生成できますssh-keygen

さらに、サーバーがデフォルトのポート(22)とは異なるポートを使用する場合、次のように引用符を使用する必要があります(source):

ssh-copy-id "user@hostname.example.com -p <port-number>"

1
デフォルトのアイデンティティとは何ですか?
オックスウィビ

17
:別のポートは、この使用のためにssh-copy-id "user@host -p 6842"
jibon57

5
コピー先のリモートサーバーがパスワードプロンプトを許可せず、SSHアクセスのために基本的にロックダウンされている場合はどうなりますか?
サイレ14年

10
Mac brew install ssh-copy-idでは、コマンドを実行してから実行できます。
アヴィシャイ14

1
@MarcelStimbergは、-iプロファイルを含めるように回答を更新してください。人々は、おそらく1つの以上の鍵を持っており、それらすべてをプッシュする、またはコメントで-iオプションを捜すために持っている
ニック・

129

マルセルの答えが好きです。私はこのコマンドを知りませんでした。私は常に、Oracle 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"'

2
この正確なコマンドは、あまりにものMacから仕事
ミハイP.

ほとんどのシェルを備えたUnixで動作するはずです。フォルダー.sshがリモート側に存在しない場合に備えて、更新されたコマンドで投稿を更新しました。
ホイヘンス

1
これcatは必須ではありません-通常の入力リダイレクトで十分です。たとえば< ~/.ssh/id_rsa.pub | ssh ...
-maxschlepzig

@Huygensありがとう。これを覚えておくと便利です。何もインストールする必要はなく、高度な例で示したようにサーバー側の権限を変更するなど、外部コマンドを実行するのにも適しているからです。
ジョナサンコマー

2
どうして壊れているのかを理解するのに役立つ冗長sshを使用できるので、私はこの方法を非常に好みます。sshcopyidはフリーズしただけで機能しませんでしたが、これは完璧に行きました。
サイレン

31

グラフィカルな方法

  1. アプリケーションパスワードとキーマイパーソナルキーを開きます
  2. キーを選択し、[ リモート ] ▸ [ Secure Shellのキーの設定 ]をクリックします。

SSH接続用のコンピューターのセットアップ


メニューに「パスワードと暗号化キー」がありません。
ホルヘカストロ

どのUbuntuリリースを使用していますか?Ubuntu 10.04 LTSでは、これはデフォルトで使用可能になっているはずです。
アーンドリューク

10.10、タグを追加しました。Marcelの答えは私が探しているものですが、デスクトップ向けの答えは+1です!
ホルヘカストロ

4
このプログラムはseahorseです。
ジル

1
このアプリケーションは10.10の[システム]-> [設定]メニューにあると思います(今はチェックできません、10.04を使用しています)
Huygens

18

Ubuntuでは、Launchpadからキーを取得できます。

ssh-import-id [launchpad account name]

詳細

  1. Launchpadアカウントが必要なので、ログインするか、アカウントを作成してください
  2. ログイン後、SSHキーの横にあるボタンをクリックします
  3. 公開キーファイルの内容をそのフィールドに貼り付けます(コメントを含む)。このようなキーは次のようになります。

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    ここでssh-rsa、キーがRSAキーでAAAAB3Nza .... UyDOFDqJpあり、実際のキーでlekensteynあり、コメントであることを示します。

  4. Import Public Keyを押してキーを保存します
  5. すべてがうまくいった場合、キーはSSHキーの下にリストされているはずです。

パッケージssh-import-idは、リモートからアクセスする必要があるマシンにインストールする必要があります。このパッケージはのopenssh-server推奨パッケージであるため、パッケージとともにインストールされますopenssh-serverssh-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キーを含む行の後に余分な改行を取得するために必要です。


14

カスタムポート用

ssh-copy-id -i "user@hostname.example.com -p2222"

-iスイッチのデフォルトは〜/ .ssh / id_rsa.pubです。別のキーが必要な場合は、-iの後にキーのパスを入力します

警告: -iを記述しなかった場合、〜/ .sshにあるすべてのキーがコピーされます


1
その警告について確かですか?"-i identity_file-identity_fileに含まれるキーのみを使用します(ssh-add(1)またはdefault_ID_fileでIDを探すのではなく)。ファイル名が.pubで終わっていない場合、これが追加されます。省略され、default_ID_fileが使用されます。」
Yousha Aleayoub

0

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 myusername@hostname.tld

コマンドを実行する前-nに、最後にスイッチを実際に使用してドライランを実行し、コマンドが意図したとおりに機能することを確認しました。確認したら、上記のように、-nスイッチなしでコマンドを再度実行しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.