.sshフォルダーの秘密キーのアクセス許可?


381

.sshフォルダーのアクセス許可を変更し、秘密キーを使用するソフトウェアを使用するときは、毎回パスワードを入力する必要があります。id_rsaパスワードを使用するアプリを使用するたびにパスワードを入力する必要がないようにするには、ファイルに対するアクセス許可を何にする必要がありますか?

現在、私の許可は次のように設定されています。

-rw-------@ 1 Jody  staff   114 Nov  4 23:29 config
-rw-------  1 Jody  staff  1743 Oct 21  2009 id_rsa
-rw-------@ 1 Jody  staff   397 Oct 21  2009 id_rsa.pub 
-rw-------@ 1 Jody  staff  3855 Sep 13 22:35 known_hosts

回答:


640

通常、権限は次のようになります。

  • .ssh ディレクトリ: 700 (drwx------)
  • 公開鍵(.pubファイル):644 (-rw-r--r--)
  • 秘密鍵(id_rsa):600 (-rw-------)
  • 最後に、ホームディレクトリはグループまたは他のユーザー(最大755 (drwxr-xr-x))が書き込み可能ではありません。

システム/ユーザーのパスワードを毎回入力する必要があり、以前は入力する必要がなかったことを意味すると想定しています。cdhowieの応答は、キーを生成するときにパスワード/パスフレーズを設定すると仮定しています。そうすると、sshエージェントを使用しない限り、パスワードを毎回入力する必要があります。


13
authorized_keysファイルを使用する場合、640にchmod'dする必要があること、つまり-rw-r -----を他の場所で見つけました。
AnneTheAgile

5
この情報はmanページのどこにありますか?
ソニーク14年

131
私は約30回この投稿に戻ってきました。思い出せないなんて信じられない。
JREAM

7
唯一の重要なことは、.ssh内の何も他の誰にも書き込み可能ではなく、どの秘密鍵も他の誰にも読み取り可能でないことです。
マルクスクーン

5
ディレクトリの@Cerin実行許可は、そのディレクトリの直接の子ファイル/ディレクトリをリストする機能を付与します。フォルダ内のファイルは、親フォルダの実行ビットを「継承」しません。
トーマス

87

私はこれに永遠に苦労していましたが、最終的に何が必要かを見つけました。$USERすべての場所を、サーバーにログインするSSHユーザー名に置き換えます。などrootを使用する必要があるためにログインしようとしている場合/root/.ssh、代わりに/home/root/.ssh非ルートユーザー向けです。

  • サーバー上のホームディレクトリは、他のユーザーによって書き込み可能ではありません。 chmod go-w /home/$USER
  • サーバー上のSSHフォルダーには700のアクセス許可が必要です。 chmod 700 /home/$USER/.ssh
  • Authorized_keysファイルには644個の権限が必要です。 chmod 644 /home/$USER/.ssh/authorized_keys
  • それがいることを確認しuserたファイル/フォルダを所有していないrootchown user:user authorized_keyschown user:user /home/$USER/.ssh
  • 生成された公開鍵(からssh-keygen)をauthorized_keysサーバー上のユーザーのファイルに入れます
  • ユーザーのホームディレクトリが期待どおりに設定されていることと、.ssh変更した正しいフォルダが含まれていることを確認してください。そうでない場合は、usermod -d /home/$USER $USER問題の修正に使用します
  • 最後に、sshを再起動します。 service ssh restart
  • 次に、クライアントがローカルユーザーの.sshフォルダーに公開キーファイルと秘密キーファイルを持っていることを確認し、ログインします。ssh user@host.com

最初の段落に関してabc、リモートサーバー上のユーザー(例)とは異なるローカルLinuxボックス上のユーザー(例)で公開/秘密キーでsshを実行できますdef@123.456.789。私はちょうどローカルユーザがローカルの.sshファイルを所有していたことを確認する必要があった(例えばabc:abc、ないroot:abc) `
マイケル・

1
アレックス、初心者向けのすべての手順とコマンドをお寄せいただきありがとうございます。あなたの回答は、ここで最も役立つ回答の1つです。
ナビゲーション

6
+1。「Authorized_keysファイルには644個のアクセス許可が必要です」<=それは非常に重要でした!
ルコックベトナム

あなたは、ディレクトリの.ssh与えている場合は700モードを、そして存在しないはポイントためのグループと他の人にr--の与えることには、あなただけは、その後の.ssh「を経由」(これらのファイルのために存在する一切のハードリンクを想定していない)ことができます。受け入れられた答えについても同じです。デフォルトの755で十分です。
-user3125367

私の経験では、pemファイルの400で十分です。
AT

37

また、ホームディレクトリが他のユーザーによって書き込み可能でないことを確認してください。

chmod g-w,o-w ~


8
FYI、このコマンドは、あなたがユーザーではなくrootとしてログインしていると仮定し
アレックス・W

6

パーミッションはこれとは関係ありません。秘密鍵はパスワードで暗号化されているため、秘密鍵を復号化して使用するには、入力する必要があります。

復号化されたキーをキャッシュし、それらを必要とするアプリケーションに提供するsshエージェントの実行を検討することもできます。


sshエージェントに関する追加情報をありがとう。Leopardに組み込まれているものがあるように見えるので、そうするつもりです。少し問題がありますが、別の質問をします。

5
許可を過小評価しないでください。彼らは間違いなくまだ活躍しています。
アレックスW

@AlexW sshの他の側面と連携しますが、質問で尋ねられた側面ではありません。
cdhowie

プライベートキーにパスワードがない場合(スクリプトと呼ばれる自動化されたリモートの場合)、それは役に立ちません。ここでは権限が必要です。
-nerdoc

「毎回パスワードを入力する必要があります。パスワードを使用するアプリを使用するたびにパスワードを入力する必要がないようにするには、id_rsaファイルに対するアクセス許可をどうすればよいですか?」
クレイグヒックス

4

フェリペは正しい-.sshディレクトリを含むディレクトリは、グループまたは他のユーザーが書き込み可能ではいけません。したがって、ssh-keygenコマンドでパスフレーズを割り当てず、.sshディレクトリがホームディレクトリにあると仮定すると、chmod go-w ~実行後にsshを実行するときにパスワードの入力を求められる場合は、次に試すべき論理的なことssh-keygen -t rsa; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keysです。

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