リモートアクセス/ネットワークセキュリティ

  1. 実習の前準備
  2. パスワード認証を用いたリモートアクセス
  3. ネットワークセキュリティ
  4. [応用]公開鍵認証を用いたリモートアクセス

4. [応用]ssh を用いたリモートアクセス入門 (公開鍵認証)

今回の実習ではやりませんが,公開鍵認証を用いたリモートログインの手法もあります.
リモートログインにパスワードを使用しないため,パスワードなどの機密情報がネットワークに送信されずパスワード推測攻撃に強いということや,リモートログイン時のパスワード入力の手間が省ける利点があります.
しかし,生成された秘密鍵の取り扱いには注意が必要です. 生成した秘密鍵を誤って外に漏らさないように気を付けましょう.

[4.1] 公開鍵の作成

ローカルホストにて以下のコマンドで公開鍵を作成します.

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が公開鍵となります.


[4.2] 公開鍵の送信

公開鍵認証を用いてリモートログインを行う場合,ローカルホストで生成した公開鍵がリモートホストの~/.ssh/authorize_keysに書かれていなければなりません.このファイルは公開鍵を登録しておくためのものです.
そのためローカルホストで作成した公開鍵をリモートホストへ送る必要があります.この時誤って秘密鍵を送らないように注意しましょう.

[4.2.1] 既に何かしらの方法でリモートログインできる場合

作成した公開鍵を[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も一緒に作られます.

[4.2.2] リモートログインできない場合

リモートホストへログインできない場合はリモートホストに通常ログインをし,ローカルホスト側で作成した公開鍵(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はリモートホストの皆さんのアカウント名です.

これで公開鍵認証を用いたリモートログインをする準備が整いました.


[4.3] sshを用いたリモートログイン(公開鍵認証)

ssh を用いてリモートログインしてみましょう.

リモートホストにリモートログインしてみましょう.

local$ ssh hoge@192.168.16.1XX
    
< hoge にはリモートホスト上でのアカウント名, XX にはリモートホストの情報実験機番号(2桁)を記述. 
ローカルホストとリモートホストでアカウント名が同じ場合は「hoge@」の部分を省略できます.
	

パスフレーズを設定した方はここでパスフレーズを聞かれます.今回は公開鍵を渡してあるためパスワードの要求はされません.

無事ログインできれば、リモートホストのプロンプトが返ってきます.
hoge@johoXX$
      
< プロンプトに表示されている "アカウント名@johoXX" の "johoXX" が, 
隣の情報実験機の番号になっているのが確認できます. 
      


[4.4]公開鍵認証でssh接続できない時

うまく接続できない時は公開鍵に関するディレクトリのパーミッションがうまく設定されていない可能性があります.パーミッションの変更に関しては最低限 Unix(Linux)I: アカウントとパスワード [4.2] パーミッションを操作する を参照してください.

リモートホストのホームディレクトリのパーミッション

リモートホストのホームディレクトリのパーミッションがGroupやOthersに書き込み権限を許可している場合,公開鍵認証によるssh接続ができない場合があります.
ls -lコマンドでリモートホストのホームディレクトリのパーミッションを確認し, もしGroupやOthersに書き込み権限があった場合はchmodコマンドなどでパーミッションを700などにしましょう.

remote$ chmod 700 ~

リモートホストの.sshディレクトリのパーミッション

リモートホストの.sshディレクトリのパーミッションがGroupやOthersに書き込み権限を許可している場合,公開鍵認証によるssh接続ができない場合があります.
ls -lコマンドでリモートホストの.sshディレクトリのパーミッションを確認し, もしGroupやOthersに書き込み権限があった場合はchmodコマンドなどでパーミッションを700などにしましょう.

remote$ chmod 700 ~/.ssh

リモートホストのauthorized_keysファイルのパーミッション

リモートホストの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