web-dev-qa-db-ja.com

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

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

34
ScArcher2

ユーザーごと:ssh-keygen -t rsarsadsaまたはrsa1に置き換えることもできますが、これらのオプションも使用できます(ローカルマシンで)推奨されません)。次に、公開鍵(id_rsa.pub)の内容を、ログインしているサーバーの~/.ssh/authorized_keysに入れる必要があります。

27

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

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

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

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

23
Chris Bunch

うーん、理解しないでください。単純にキーを作成して始めましょう。 :) [〜#〜] howto [〜#〜] さらに、パスワードによるログインを禁止することもできます。たとえば/ etc/ssh/sshd_config:

PasswordAuthentication no
6
Node

これはかなり簡単です。 ここにあります になる簡単なウォークスルーがあります。

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

  • マシンでssh-keygenを実行します。これにより、公開鍵と秘密鍵が生成されます。
  • 公開鍵の内容(~/.ssh/id_rsa.pubにある可能性が高い)をコピーして、リモートマシンの~/.ssh/authorized_keysに貼り付けます。

これにより、マシンの秘密鍵にアクセスできるすべてのユーザーにリモートマシンへの同じアクセス権が与えられるため、キーペアを生成するときに、セキュリティを強化するためにここにパスワードを入力することを選択できます。

3
ConroyP

WindowsユーザーがPuTTYをセットアップする場合

2
Gareth

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

SSH接続するマシンでfrom鍵ペアを生成する必要があります:

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したいホストにコピーする必要がありますto。ほとんどの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
Drew Stephens

これはチェックリストとして意図されています。ポイントバイポイントでそれに従うなら、パスワードなしのログインへの最も一般的な落とし穴はカバーされるべきです。これらのポイントのほとんどは、他の場所で言及されています。これは集約です。

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

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

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

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

  1. 秘密鍵は、必要に応じて~/.ssh/id_rsaまたは~/.ssh/id_dsaに配置する必要があります。別の名前を使用することもできますが、秘密鍵を明示的に示すには、元のマシンのsshコマンドの-iオプションにその名前を含める必要があります。

  2. 秘密鍵はchmod 600である必要があります。

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

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

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

ここには良いアドバイスがあるので、繰り返しはしません。キーを使用してサインオンできるように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を使用している誰かがコピーしてパスフレーズをブルートフォースで攻撃できるようなサーバーに、秘密キーを公開したくない場合。

0
Bruno Bronosky

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

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

0
Neall