今回の実習ではやりませんが,公開鍵認証を用いたリモートログインの手法もあります.
リモートログインにパスワードを使用しないため,パスワードなどの機密情報がネットワークに送信されずパスワード推測攻撃に強いということや,リモートログイン時のパスワード入力の手間が省ける利点があります.
しかし,生成された秘密鍵の取り扱いには注意が必要です. 生成した秘密鍵を誤って外に漏らさないように気を付けましょう.
ローカルホストにて以下のコマンドで公開鍵を作成します.
local$ ssh-keygen |
デフォルトではRSA暗号化アルゴリズムの2048bit長の鍵が生成されます.デフォルトのままで問題はありませんが,例えば鍵の長さを倍の4096bitにすればセキュリティはより強固になります.
これらの設定は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$ cat id_rsa.pub >> ~/.ssh/authorized_keys |
リモートホストのホームディレクトリにまだ .sshディレクトリが存在しない場合(リモートホストで公開鍵を生成していない場合) mkdirコマンドで .sshディレクトリを作成してもよいのですが,今回はリモートホスト側でも公開鍵を生成して .sshディレクトリを作ります.
リモートログインをした状態で先程と同様にssh-keygenコマンドを使用して公開鍵を生成してください.~/.ssh/authorized_keysも一緒に作られます.
リモートホストへログインできない場合はリモートホストに通常ログインをし,ローカルホスト側で作成した公開鍵(id_rsa.pub)をUSBメモリ等の記憶媒体を使用してリモートホストに送ることが可能です.
そのままのファイルサイズでも問題ありませんが,必要に応じてzip形式などにファイルを圧縮してください.データ圧縮・解凍のやり方は最低限 Unix(Linux)II: シェル・テキストエディタ【5. [付録] データの圧縮・解凍】を参考にしてください.
無事にリモートホスト側に公開鍵を送ることができたら,圧縮していた場合は解凍して公開鍵ファイル(id_rsa.pub)の中身を~/.ssh/authorized_keyに書き込みます.~/.sshが存在しない場合はmkdirコマンドで .sshディレクトリを作成してもよいのですが,今回はリモートホスト側でも公開鍵を生成して .sshディレクトリを作ります.モートホスト側でもssh-keygenコマンドで公開鍵を生成してください.
hoge$ cat id_rsa.pub >> ~/.ssh/authorized_keys |
hogeはリモートホストの皆さんのアカウント名です.
これで公開鍵認証を用いたリモートログインをする準備が整いました.
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コマンドなどでパーミッションを700などにしましょう.
remote$ chmod 700 ~/.ssh/authorized_keys |
最終更新日: 2024/06/24 鮒田 忠治 作成 | Copyright © 2024 inex |