ユーザー名/パスワードの代わりにキーを使用してユーザーを認証するようにsshをどのように設定しますか?
ユーザーごと:ssh-keygen -t rsa
(rsa
をdsa
またはrsa1
に置き換えることもできますが、これらのオプションも使用できます(ローカルマシンで)推奨されません)。次に、公開鍵(id_rsa.pub
)の内容を、ログインしているサーバーの~/.ssh/authorized_keys
に入れる必要があります。
私は実際には 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)が使用されます。
うーん、理解しないでください。単純にキーを作成して始めましょう。 :) [〜#〜] howto [〜#〜] さらに、パスワードによるログインを禁止することもできます。たとえば/ etc/ssh/sshd_config:
PasswordAuthentication no
これはかなり簡単です。 ここにあります になる簡単なウォークスルーがあります。
主なポイントは次のとおりです。
ssh-keygen
を実行します。これにより、公開鍵と秘密鍵が生成されます。~/.ssh/id_rsa.pub
にある可能性が高い)をコピーして、リモートマシンの~/.ssh/authorized_keys
に貼り付けます。これにより、マシンの秘密鍵にアクセスできるすべてのユーザーにリモートマシンへの同じアクセス権が与えられるため、キーペアを生成するときに、セキュリティを強化するためにここにパスワードを入力することを選択できます。
WindowsユーザーがPuTTYをセットアップする場合
他の人が言ったことを要約すると、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
これはチェックリストとして意図されています。ポイントバイポイントでそれに従うなら、パスワードなしのログインへの最も一般的な落とし穴はカバーされるべきです。これらのポイントのほとんどは、他の場所で言及されています。これは集約です。
接続を開始または受信するアカウントの下の各マシンには、~/.ssh
ディレクトリchmod 700
が必要です。
(秘密)鍵はパスフレーズなしで生成する必要があります。そうしないと、クライアントが使用するパスフレーズ付き鍵の復号バージョンを保持するエージェントを開始できます。 ssh-agent $Shell
でエージェントを開始します。それを見つけるのに少し時間がかかったのは$Shell
部分です。エージェントを使用する場合は、さまざまな詳細があるため、manページを参照してください。
最近のバージョンのsshdでは、デフォルトで弱い(<2048ビットDSA)鍵が受け入れられないことを忘れないでください。
originate接続するには、クライアント側のマシンで以下を実行する必要があります。
秘密鍵は、必要に応じて~/.ssh/id_rsa
または~/.ssh/id_dsa
に配置する必要があります。別の名前を使用することもできますが、秘密鍵を明示的に示すには、元のマシンのsshコマンドの-iオプションにその名前を含める必要があります。
秘密鍵はchmod 600
である必要があります。
ホームフォルダーがchmod 700
であることを確認します。
次に、マシンに受信要求を許可します。一般的なモデルは、管理者が所有していないマシン(共有Webホスティングなど)へのアクセスを許可する場合です。したがって、sshのアイデアは、アカウントを与えている人にpublicキーを提供することです。これが、リクエストを受信するマシンに一般的に秘密鍵を置かない理由です。ただし、このマシンで発信SSHも実行する場合は、上記の手順でを発信元マシンとして扱う必要があります。
~/.ssh/authorized_keys
というファイルに配置する必要があります。このアカウントを介した接続が許可されている他のキーもここに配置できます。 viを使用していて、PuTTYの貼り付けバッファーからファイルにキーを貼り付ける場合に特に注意が必要なことは、キーが「ssh-」で始まることです。挿入モードでない場合は、最初の「s」でviが挿入モードになり、残りのキーは問題なく表示されます。ただし、キーの先頭に「s」がありません。それを見つけるのに何日もかかりました。chmod 600 ~/.ssh/authorized_keys
が好きです。少なくともg-wである必要があります。ここには良いアドバイスがあるので、繰り返しはしません。キーを使用してサインオンできるように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を使用している誰かがコピーしてパスフレーズをブルートフォースで攻撃できるようなサーバーに、秘密キーを公開したくない場合。
他の人が言ったように、ユーザーはssh-keygenを使用して自分のクライアントマシンで自分用のキーペアを作成し、自分の公開鍵をログインしたいマシンの〜/ .ssh/authorized_keysに追加する必要があります。
ただし、より詳細な情報については、 SSH、The Secure Shell を強くお勧めします。