ユーザー名/パスワードの代わりにキーを使用して認証するようにsshをどのようにセットアップしますか?


34

ユーザー名/パスワードの代わりにキーを使用してユーザーを認証するようにsshをどのようにセットアップしますか?

回答:


27

彼らが使用して(自分のローカルマシン上で)自分の鍵ペアを生成する必要があります。各ユーザーのためにssh-keygen -t rsarsaと交換することができるdsaか、rsa1それらのオプションが推奨されていないものの、あまりにも)。次に、ログインしているサーバーに公開鍵(id_rsa.pub)のコンテンツを配置する必要があり~/.ssh/authorized_keysます。


これに追加する唯一のことは、ファイルとディレクトリのアクセス許可を確認することです。
トレント

2
chmod 0700 .ssh chmod 0600 .ssh / authorized_keysを忘れないでください
デイブチェイニー

3
この方法でキーを確実に生成しますが、「ssh-copy-id」に関する@Chris Bunchの投稿を確認します。それが 'id_rsa.pub'を転送する方法です。
ガレス

@gyaresu:ありがとう!何か新しいことを学びました!:-D
クリス・ジェスター・ヤング

23

実際には、デフォルトで* nixにあるスクリプト(ssh-copy-id)を好みます(Mac OS Xにも簡単に配置できます)。これは自動的に行われます。manページから:

ssh-copy-idは、sshを使用してリモートマシンにログインするスクリプトです(おそらくログインパスワードを使用しているため、複数のIDを巧妙に使用していない限り、パスワード認証を有効にする必要があります)

また、リモートユーザーのホーム、〜/ .ssh、および〜/ .ssh / authorized_keysのアクセス許可を変更して、グループの書き込み可能性を削除します(リモートsshdの構成にStrictModesが設定されている場合、ログインができなくなります)。

-iオプションが指定されている場合、ssh-agentにキーがあるかどうかに関係なく、IDファイル(デフォルトは〜/ .ssh / identity.pub)が使用されます。


2
@クリスバンチ :)にssh-コピー-IDは間違いなく株式1のid_rsa.pubへの道である
ギャレス

1
クール、私はこれを知らなかった...私はまったく同じことをするために自分のスクリプトを書いた:-/
デビッドZ

6

ええ、それを取得しないでください。キーを作成して開始するだけです。:) HOWTO さらに、パスワードによるログインを禁止できます。例:/ etc / ssh / sshd_config:

PasswordAuthentication no

2
また、UsePAMをnoに設定する必要があります(またはそれに応じてPAMを構成します)。この部分を見逃しているHOWTOの数は驚くべきものです。そうしないと、パスワードを使用してログインできます。
ネイサン

3

これは非常に簡単ですここに簡単なチュートリアルがあります

主なポイントは次のとおりです。

  • ssh-keygenマシンで実行します。これにより、公開キーと秘密キーが生成されます。
  • 公開鍵(おそらく~/.ssh/id_rsa.pub)の内容を~/.ssh/authorized_keysリモートマシンにコピーアンドペーストします。

これにより、マシン上の秘密キーにアクセスできる人は誰でもリモートマシンに同じアクセス権を与えることに注意してください。したがって、キーペアを生成するときに、セキュリティを強化するためにここにパスワードを入力できます。


コピーする代わりに、カットアンドペーストすることをお勧めします。authorized_keysファイルには複数のキーを含めることができますが、すでにそこにある他のキーを上書きしたくありません。
クリスジェスターヤング

私のお気に入りのチュートリアルはWayback Machineに委託されています:web.archive.org/web/20061103161446/http
フィリップダービン

@クリスおっと-私はそれを上書きするのではなく、ファイルにコピーするつもりでした!答えは明確にするために、今更新
ConroyP


1

他の人が言ったことを要約すると、SSH鍵の設定は簡単で非常に貴重です。

マシン上では、SSHingになることから、あなたの鍵のペアを生成する必要があります。

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

指示に従ってEnterを押し、プロンプトが表示されたらパスフレーズを入力します。これは、現在のホストとSSHで接続するホストの両方の通常のログインパスワードとは異なることが理想です。

次に、生成したキーをSSHに接続するホストにコピーする必要があります。ほとんどのLinuxディストリビューションには、ssh-copy-idこれを行うためのツールがあります。

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

ディストリビューションにそれがない場合は、キーを宛先ホストにコピーし、(おそらく既存の).ssh/authorized_keysファイルに追加する必要があります。

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

最後に、SSHキーを最大限に活用するには、SSHエージェントを実行する必要があります。デスクトップ環境(Gnome、KDEなど)を使用している場合、ログアウトして再度ログインするだけでSSHエージェントが起動します。そうでない場合、あなたは(あなたのシェルのRCファイルに以下を追加することができ.bashrc.profileなど、):

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1

これはチェックリストとして意図されています。ポイントごとにそれに従う場合、パスワードなしのログインに最もよくある落とし穴をカバーする必要があります。これらのポイントのほとんどは他の場所で言及されています。これは集約です。

接続を開始または受信するアカウントの下の各マシンに~/.sshディレクトリが必要chmod 700です。

(プライベート)キーはパスフレーズなしで生成する必要があります。そうしないと、クライアントが使用するパスフレーズ保持キーの復号化バージョンを保持するエージェントを開始できます。でエージェントを起動しssh-agent $SHELLます。$SHELL見つけるのに時間がかかった部分です。エージェントを使用する場合はさまざまな詳細があるため、manページを参照してください。

デフォルトでは、最近のバージョンのsshdでは弱い(<2048ビットDSA)キーが受け入れられないことを忘れないでください。

接続を開始するには、クライアント側のマシンで以下を実行する必要があります。

  1. あなたの秘密鍵を中に配置しなければならない~/.ssh/id_rsaか、~/.ssh/id_dsa適切に。別の名前を使用することもできますが、元のマシンのsshコマンドの-iオプションに含めて、秘密鍵を明示的に示す必要があります。

  2. あなたの秘密鍵はでなければなりませんchmod 600

  3. ホームフォルダーがであることを確認しますchmod 700

マシンがリクエストを受信できるようになりました。一般的なモデルは、管理者が所有していないマシン(共有Webホスティングなど)へのアクセスを許可する場所です。したがって、sshのアイデアは、アカウントを提供している人に公開キーを提供することです。そのため、通常、リクエストを受信するマシンに秘密鍵を配置しません。ただし、このマシンに発信sshも実行させる場合は、上記の手順で、発信元マシンとして扱う必要があります。

  1. 公開鍵は、接続~/.ssh/authorized_keys受け取るアカウントの下で呼び出されるファイルに配置する必要があります。このアカウントを介して接続できる他のキーをここに配置することもできます。viで、PuTTYの貼り付けバッファーからファイルにキーを貼り付ける場合、特に注意が必要なのは、キーが「ssh-」で始まることです。挿入モードでない場合、最初の「s」はviを挿入モードにし、キーの残りの部分は正常に表示されます。ただし、キーの先頭に「s」がありません。それを見つけるのに何日もかかりました。
  2. が好きchmod 600 ~/.ssh/authorized_keysです。少なくともgwでなければなりません。
  3. 次に、キャッシュにホストフィンガープリントを追加する必要があります。マシンAに移動し、sshでマシンBに手動で移動します。最初に、「ホストキーキャッシュに。。。を追加しますか?」などのクエリを取得します。このログインを使用する自動化(スクリプトなど)を取得しようとしている場合、自動化で使用されているsshクライアントがこのプロンプトを取得しないようにする必要があります。

0

他の人が言ったように、ユーザーはssh-keygenを使用してクライアントマシンで自分用のキーペアを作成し、ログインしたいマシンの〜/ .ssh / authorized_keysに公開キーを追加する必要があります。

ただし、より詳細な情報については、SSHであるThe Secure Shellを強くお勧めします。


0

ここには良いアドバイスがありますので、繰り返しません。キーでサインオンできるように1つのサーバーをセットアップしたら、この1つのライナーで同じことを行うように他のサーバーをセットアップできます。

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

ホームディレクトリにcdし、変数remoteを1つまたは複数のサーバー名として定義し、一度にまとめて実行します。要求するパスワードは、リモートサーバーのsshパスワードになります。もちろん、forループなしで簡易バージョンを使用できます。

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

注意:公開鍵のみをコピーしてください。sudoを使用しているユーザーがそれらをコピーしてパスフレーズをブルートフォースできるサーバー上に秘密キーを配置することは望ましくありません。

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