公開鍵認証を用いたリモートログインの手法もあります.
リモートログインにパスワードを使用しないため,パスワードなどの機密情報がネットワークに送信されず
パスワード推測攻撃に強いということや,リモートログイン時のパスワード入力の手間が省ける利点があります.
しかし,生成された秘密鍵の取り扱いには注意が必要です.
生成した秘密鍵を誤って外に漏らさないように気を付けましょう.
ローカルホストにて以下のコマンドで公開鍵を作成します.
local$ ssh-keygen |
デフォルトでは RSA 暗号化アルゴリズムの 2048 bit 長の鍵が生成されます.
デフォルトのままで問題はありませんが,例えば鍵の長さを倍の 4096 bit にすればセキュリティはより強固になります.
これらの設定は ssh-keygen コマンドのオプションで変更が可能です (気になった方は man コマンドで ssh-keygen コマンド
のマニュアルを見てみましょう)
以下のように生成した鍵の保存場所を聞かれます. デフォルトの設定で問題ないので Enter キーを押してください.
hoge はローカルホストでの皆さんのアカウント名です.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): |
次に公開鍵を使用する際にローカルホスト側で要求されるパスフレーズ (合言葉) の入力が求められます.
パスフレーズを設定したい場合は自分で考えたパスフレーズを入力した後 Enter キーを押して次に進んでください.
特に必要がない場合は Enter キーを押してスキップしても大丈夫です.
Enter Passphrase (empty for no passphrase): |
パス"フレーズ"はパス"ワード"とは異なり,"文章"が設定できます. また空白文字も使用可能です.パスフレーズを設定することでセキュリティをより強化することができます.
再度パスフレーズの入力が求められるのでパスフレーズを設定した場合は先程と同様のものを入力し,
Enter キーを押して次に進んでください.
先程スキップした場合は今回も Enter キーを押してスキップしてください.
Enter same Passphrase again: |
鍵が生成されると下のようなメッセージが表示されます.
Your identification has been saved in /home/hoge/.ssh/id_rsa. Your public key has been saved in /home/hoge/.ssh/id_rsa.pub. The key fingerprint is: ... The key's randomart image is: ... |
この時 id_rsa が秘密鍵,id_rsa.pub が公開鍵となります.
公開鍵認証を用いてリモートログインを行う場合,ローカルホストで生成した公開鍵がリモートホストの
~/.ssh/authorize_keys に書かれていなければなりません.
このファイルは公開鍵を登録しておくためのものです.
そのためローカルホストで作成した公開鍵をリモートホストへ送る必要があります.
この時誤って秘密鍵を送らないように注意しましょう.
作成した公開鍵を [2.3] に出てきた sftp コマンドなどを用いてリモートホストに送ります.
sftp> put /home/hoge/.ssh/id_rsa.pub |
hoge はローカルホストでの皆さんのアカウント名です. この時誤って秘密鍵を送らないように.
sftp から抜けて ssh でリモートログインし,先程送信した公開鍵ファイル (id_rsa.pub) の中身を リモートホストの ~/.ssh/authorized_key に書き込んでください.
remote$ mkdir ~/.ssh remote$ chmod 700 ~/.ssh remote$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys remote$ chmod 600 ~/.ssh/authorized_keys |
リモートホストへログインできない場合はリモートホストに通常ログインをし,
ローカルホスト側で作成した公開鍵 (id_rsa.pub) を USB メモリ等の記憶媒体を使用してリモートホストに
送ることが可能です.
そのままのファイルサイズでも問題ありませんが,必要に応じて zip 形式などにファイルを圧縮してください.
データ圧縮・解凍のやり方は
最低限 Unix(Linux)II: シェル・テキストエディタ【5. [付録] データの圧縮・解凍】を参考にしてください.
無事にリモートホスト側に公開鍵を送ることができたら,圧縮していた場合は解凍して公開鍵ファイル (id_rsa.pub) の中身を
~/.ssh/authorized_key に書き込みます.~/.ssh が存在しない場合は,前節を参考に mkdir コマンドで
.ssh ディレクトリを作成してください.
remote$ cat id_rsa.pub >> ~/.ssh/authorized_keys |
これで公開鍵認証を用いたリモートログインをする準備が整いました.
ssh を用いてリモートログインしてみましょう.
リモートホストにリモートログインしてみましょう.
local$ ssh hoge@192.168.16.1XX |
< hoge にはリモートホスト上でのアカウント名, XX にはリモートホストの情報実験機番号 (2桁) を記述. ローカルホストとリモートホストでアカウント名が同じ場合は「hoge@」の部分を省略できます. |
パスフレーズを設定した方はここでパスフレーズを聞かれます. 今回は公開鍵を渡してあるためパスワードの要求はされません.
無事ログインできれば、リモートホストのプロンプトが返ってきます.
hoge@johoXX$ |
< プロンプトに表示されている "アカウント名@johoXX" の "johoXX" が, 隣の情報実験機の番号になっているのが確認できます. |
うまく接続できない時は公開鍵に関するディレクトリのパーミッションがうまく設定されていない可能性があります. パーミッションの変更に関しては最低限 Unix(Linux)I: アカウントとパスワード [4.2] パーミッションを操作するを参照してください.
リモートホストのホームディレクトリのパーミッションが Group や Others に書き込み権限を許可している場合,
公開鍵認証による ssh 接続ができない場合があります.
ls -l コマンドでリモートホストのホームディレクトリのパーミッションを確認し,
もし Group や Others に書き込み権限があった場合は chmod コマンドなどでパーミッションを 700 などにしましょう.
remote$ chmod 700 ~ |
リモートホストの .ssh ディレクトリのパーミッションが Group や Others に書き込み権限を許可している場合,
公開鍵認証による ssh 接続ができない場合があります.
ls -l コマンドでリモートホストの .ssh ディレクトリのパーミッションを確認し,
もし Group や Others に書き込み権限があった場合は chmod コマンドなどでパーミッションを 700 などにしましょう.
remote$ chmod 700 ~/.ssh |
リモートホストの authorized_keys ファイルのパーミッションが Group や Others に書き込み権限を許可している場合,
公開鍵認証による ssh 接続ができない場合があります.
ls -l コマンドでリモートホストの authorized_keys ファイルのパーミッションを確認し,
もし Group や Others に書き込み権限があった場合は chmod コマンドなどでパーミッションを 600 などにしましょう.
remote$ chmod 600 ~/.ssh/authorized_keys |
最終更新日: 2025/06/20 山本 峻大 更新 | Copyright © 2024 - 2025 inex |