satoshiabe.jp : SSH login without password
HOME > DOCUMENTS > SSH login without password
まえがき
このページは、ssh を使用してリモートホストにログインする際の設定をメモしたページ。 よりセキュアなリモート接続を実現するため、パスワード認証を禁止し、パスフレーズを使用した認証を有効にする。 パスフレーズを入力せずにログインする方法も簡単に説明する。
ローカルホストの設定
パスワード認証を使用して SSH によりリモートホストへのログインする場合、ローカルホストに OpenSSH がインストールされているなら、基本的に何も準備しなくて十分だろう。 ただし、今回はパスフレーズによる認証を有効にするため、鍵のペア(公開鍵と秘密鍵)を作成する。 鍵を作成するために、ssh-keygen コマンドを実行する。 鍵の作成に使用するオプションは以下のとおり。
本ページでは、SSH version 2 を使用する。 SSH クライアントが version 2 に対応していないこともあるため、附属のドキュメントを読んでおくこと。
ssh-keygen (1) -t rsa1 SSH version 1 -t dsa SSH version 2 -t rsa SSH version 2
ssh-keyget コマンドを実行する。 passphrase として任意の文字列を指定する。
localhost% ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/satoshi/.ssh/id_rsa): <-- 何も入力せずに [ENTER] キーを押下する Enter passphrase (empty for no passphrase): <-- ここでパスフレーズを入力する Enter same passphrase again: <-- もう一度パスフレーズを入力する Your identification has been saved in /home/satoshi/.ssh/id_rsa. Your public key has been saved in /home/satoshi/.ssh/id_rsa.pub. The key fingerprint is: 58:50:72:f0:e2:df:1d:3f:ac:fb:c1:df:1a:07:23:82 satoshi@example.com localhost%
${HOME}/.ssh ディレクトリに鍵のファイルが作成された。 id_rsa が秘密鍵で、id_rsa.pub が公開鍵だ。
localhost% ls -l ~/.ssh/ total 8 -rw------- 1 satoshi satoshi 1743 4 19 02:12 id_rsa -rw-r--r-- 1 satoshi satoshi 408 4 19 02:12 id_rsa.pub localhost%
リモートホストの ~/.ssh ディレクトリに存在する authorized_keys ファイルに、ローカルホストで生成した id_rsa.pub ファイルの内容をコピーする。 既に authorized_keys ファイルが存在する場合、id_rsa.pub ファイルの内容を追記する。 authorized_keys ファイルが存在しない場合、authorized_keys ファイルを作成し、id_rsa.pub ファイルの内容を記述する。 尚、この状態で、まだリモートホストはパスワード認証を許可している。
localhost% scp .ssh/id_rsa.pub remotehost:/home/satoshi/ localhost% ssh remotehost remotehost% cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
リモートホストの設定
続いて、リモートホスト上で作業をする。 パーミッションを変更する。
remotehost% chmod 700 ~/.ssh remotehost% chmod 600 ~/.ssh/authorized_keys
sshd_config を編集するため root になる。
remotehost% su - # vi /etc/ssh/sshd_config RSAAuthentication yes # RSA 認証を有効にする # プロトコル Versison 1 のみ適用される PubkeyAuthentication yes # 公開鍵による認証を有効にする PasswordAuthentication no # パスワードによる認証を無効にする :wq #
sshd のプロセスを再起動し、sshd_config を改めて読み込ませる。
remotehost# kill -HUP PID
接続する
ssh で接続する。 パスフレーズの入力を要求されるため、入力してログインする。
localhost% ssh remotehost
パスフレーズを入力せずにログインする (1)
ssh コマンドを使用し、リモートホストへ接続したり切断したりしていると、パスワードの入力を面倒に感じるかもしれない。 そういうときに利用する方法をひとつ。 まず、ssh-agent コマンドに引数に使用している shell を指定し、実行する。 その後、ssh-add コマンドを実行し、パスフレーズに指定した文字列を入力して Enter キーを押下する。
localhost% echo $SHELL /bin/bash localhost% localhost% ssh-agent bash localhost% ssh-add Enter passphrase for /home/satoshi/.ssh/id_rsa: パスフレーズを入力して ENTER キーを押下する Identity added: /home/satoshi/.ssh/id_rsa (/home/satoshi/.ssh/id_rsa) localhost%
リモートホストにログインしてみる。
localhost% ssh remotehost login successful... remotehost%
パスフレーズを入力せずにログインする (2)
ssh-keygen コマンドを実行した後、パスフレーズを入力するところで何も入力せず Enter キーを押下する。 同様に手順で、作成された公開鍵をリモートホスト上に設置しておけば、パスフレーズの入力なしでログインできるようになる。
リンク
OpenSSH (openssh.com)
LiNUX Horizon - SSH Without Password (linuxhorizon.ro)
Common threads: OpenSSH key management, Part 1 (ibm.com)
Common threads: OpenSSH key management, Part 2 (ibm.com)
SSH User Identities (securityfocus.com)