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

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

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

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

[4.1] 公開鍵の作成

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

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


[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$ mkdir ~/.ssh
remote$ chmod 700 ~/.ssh
remote$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
remote$ chmod 600 ~/.ssh/authorized_keys

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

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

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


[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 コマンドなどでパーミッションを 600 などにしましょう.

remote$ chmod 600 ~/.ssh/authorized_keys



<< 前ページへ      本日のスケジュールへ戻る >>

最終更新日: 2025/06/20 山本 峻大 更新 Copyright © 2024 - 2025 inex