sshキーはid_rsaという名前にする必要がありますか?


130

キー付き認証でビルドサーバーを作成するときに、この問題に何度か遭遇しました。

他の誰かがこれを経験したことがあるのだろうかと思いました。現在のユーザー用に、異なるマシンに接続できるキーがいくつかあります。machine1とmachine2としましょう。公開鍵をそれぞれのauthorized_keysファイルに貼り付けました。最初のキーにid_rsaという名前を付け、2番目のキーベンダーに名前を付けました。

ベンダーに接続しようとすると、冗長なssh接続で次の出力が得られます

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

上記のように、id_rsaキーのみを提供します。これは正しいです?もしそうなら、なぜですか?より多くのキーを提供するにはどうすればよいですか?私は家にいるのであまり問題なく複数のキーを持っているので、断続的に見られる問題であることを知っています。

また、pubキーとprivateキーがクライアントとサーバーとどのように相互作用するかについての概要も評価したいと思います。私はかなりまともなアイデアを持っていると思ったが、どうやら何かが欠けているようだ。

お願いします。

回答:


157

デフォルトでは、sshはを検索id_dsaし、id_rsaファイル。キーにこのような名前を付ける必要はありません。mykey同様に名前を付けることも、別のディレクトリに配置することもできます。ただし、これらのいずれかを行う場合は、次のようにsshコマンドで明示的にキーを参照する必要があります。

ssh user@server -i /path/to/mykey

コマンドが受け入れない場合-i、たとえばsshfsIdentityFileオプションを使用します。

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

使い方

キーを生成すると、2つのファイルが取得されます:(id_rsa秘密キー)とid_rsa.pub(公開キー)。名前が示すように、秘密鍵は秘密にしておく必要があり、公開鍵は公開することができます。

公開鍵認証は、公開鍵と秘密鍵で機能します。クライアントとサーバーの両方に独自のキーがあります。openssh-serverサーバーをインストールすると、公開鍵と秘密鍵が自動的に生成されます。クライアントの場合は、自分でそれを行う必要があります。

(クライアント)がサーバーに接続すると、公開鍵が交換されます。サーバーを受け取り、サーバーを受け取ります。サーバーの公開鍵を最初に受け取るとき、それを受け入れるように求められます。この公開キーが時間の経過とともに変化する場合、クライアントとサーバー間のトラフィックを傍受する可能性のあるMITM(中間者)攻撃が行われているため、警告が表示されます。

サーバーは/etc/ssh/sshd_config、ユーザーが接続を許可されているか(で定義されているか)、および公開鍵が~/.ssh/authorized_keysファイルにリストされているかどうかを確認します。公開鍵が拒否される考えられる理由:

  • /etc/ssh/sshd_config
    • AllowUsersまたはAllowGroups指定されているが、サーバーユーザーがグループまたはユーザーリストにリストされていない(デフォルトは定義されていないため、ログインするユーザーまたはグループに制限はありません)。
    • DenyUsersまたはDenyGroups指定されており、ユーザーまたはグループのリストに含まれています。
    • ルートとしてログインしようとしていますがPermitRootLoginNo(デフォルトyes)に設定されています。
    • PubkeyAuthenticationに設定されNoます(デフォルトyes)。
    • AuthorizedKeysFile別の場所に設定されており、公開鍵はそのファイルに追加されません(デフォルト.ssh/authorized_keysはhome dirに対して)
  • ~/.ssh/authorized_keys:公開ファイルはこのファイルに追加されません(このファイルはrootユーザーとして読み取られることに注意してください)

複数のキーを使用する

複数のキーを使用することは珍しくありません。を実行する代わりにssh user@host -i /path/to/identity_file、構成ファイルを使用できます~/.ssh/config

一般的な設定は、IdentityFile(キー)とポートです。次の構成では、「id_dsa」および「bender」をチェックするのは、次のものと接続する場合のみssh youruser@yourhostです。

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

を省略するHost yourhostと、設定はすべてのSSH接続に適用されます。このホストの一致にUser youruserPort 2222、などの他のオプションも指定できます。これにより、のssh yourhost代わりに短縮形で接続できますssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender


1
キーを指定する必要があるのはなぜですか?全体のポイントは私がマシンに簡単にsshできるようにすることです。
myusuf3

2
@StevenRoose from ssh_config(5)ファイル名では、チルダ構文を使用してユーザーのホームディレクトリまたは次のエスケープ文字のいずれかを参照できます: '%d'(ローカルユーザーのホームディレクトリ)、 '%u'(ローカルユーザー名)、 '% l '(ローカルホスト名)、'%h '(リモートホスト名)、または'%r '(リモートユーザー名)。ワイルドカードを指定することはできませんが、これは十分便利だと思います。サーバーは送信した各キーをプローブする必要があるため、指定するキーの数は少ない方がよいことに注意してください。ホスト上のワイルドカードは動作しますssh_config(5)。のマニュアルページを再度参照してください。
-Lekensteyn

2
@therobyouknowすべてのマシンに一意のキーペアを作成する必要はありません。通常、キーはほとんどなく、いずれかのキーの公開キーを.ssh/authorized_keysリモートマシン上のファイルに追加します。標準の.ssh/id_rsaファイル名(またはid_dsa、id_ecdsa、または最近のid_ed25519)を使用する場合、sshはこれを自動的に試行するためIdentityFile、構成(またはの-i path/to/id_fileパラメーターssh)で指定する必要はありません。
Lekensteyn

4
必要な詳細を超えた回答が大好きで、時間をかけてコンセプトを説明します。素晴らしい仕事です!+1
user2490003

1
@landed SSHサーバーのホストです(IPアドレスまたはDNS名の場合があります)。私はそのセクションを明確にしようとしましたが、うまくいけば役立つでしょう。
-Lekensteyn

40

私のお気に入りの方法では、秘密鍵を自動的に選択できます

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSHは%lをローカルマシン名に、%rをリモートユーザー名に、%hをリモートホストに置き換えます。したがって、fooというマシンからユーザーとしてbarに接続したい場合、次を実行します。

ssh bar

sshは自動的に次を使用します。

~/.ssh/foo_user@bar_id_rsa

ローカルホストも保存されているため、これにより、NFS(マシンごとに異なるキー!)で共有されるホームディレクトリが可能になります。


1

多くのキーを指定するには時間がかかるというStevenRooseのコメントを考慮して、たまたま多くのキーで遊んでいるので、個人的な解決策を提案したいと思います。

その時点で使用したいキーへのシンボリックリンクを作成します。これは、作業中のプロジェクトに応じて頻繁に変更されるものではないため、満足しています。

ここで、virtualboxの下で実行されているマシンのキーにリンクしています。

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

また、lnコマンドを手動で再度入力することなく、別のセットに切り替えるための非常に簡単なスクリプトを追加することもできます。

繰り返しますが、これは2つのキーだけの解決策ではありませんが、より多くのキーについては実行可能かもしれません。


1
使用するサーバーごとにbash_profileでエイリアスを追加します。bobと呼ばれるサーバーの場合、これはただ...エイリアスbob = "ssh bob.example.com -l pete -i / path / to / key"-それからbobと入力するだけで-入ります!
ピーターバグ

2
「あなたが既に知っている方法で物事を成し遂げる」方が簡単な場合もありますが、.ssh / configsキーとホストをセットアップする方が簡単なアプローチがあります。このコメントは、コメント投稿者とコメント投稿者の両方に向けられています@ Peter-Bagnall
Scott Prive
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.