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

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

2. ssh を用いたリモートアクセス入門 (パスワード認証)

[2.1] ssh を用いたリモートログイン

[2.1] の内容は受講生全員が各自のアカウントで行うようにしてください. [2.2] 以降は交代で行うようにして構いません.

ssh を用いてリモートログインしてみましょう. 今回の実習ではパスワード認証を用いたリモートアクセスをしてもらいます.
ssh は通信内容を暗号化するので, パスワードを盗まれる危険性が減ります.

つい先ほど自分のアカウントを作成した隣の計算機(リモートホスト)にリモートログインしてみましょう.

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

初めてリモートログインすると以下のようなメッセージが流れます.

The authenticity of host '192.168.16.1XX (192.168.16.1XX)' can't be established.
ED25519 key fingerprint is SHA256: (文字列).
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
    

SSH では,リモートホストに接続する前に,接続先の認証を行います. 接続先の認証には,リモートホストの公開鍵を用います. 皆さんは初めて隣の計算機にリモートアクセスするため,ローカルホストに リモートホストの公開鍵を持っていません. そのため,ここでは隣の計算機の公開鍵のフィンガープリント (和訳: 指紋. ここでは公開鍵をハッシュ化したもの.指紋のように公開鍵の真正性を確認できる) を示し, この公開鍵を信頼してリモートアクセスを続けても良いですか,と訊ねてきています. (ED25519 は暗号アルゴリズムの一種です)

本来はリモートアクセスする計算機の公開鍵からフィンガープリントを計算し,それを照合するべきです. ですが,今回は時間短縮の為,提示された公開鍵を信用し,yes と回答しましょう.

ここで用いられたホスト公開鍵はリモートホストの /etc/ssh/ 以下に置かれています. 気になる方は隣の計算機で $ ssh-keygen -l -f /etc/ssh/<公開鍵名> を打鍵してフィンガープリントを計算し, 提示されたものと比較してみましょう.

二回目以降のリモートアクセスでは,ローカルホストの ~/.ssh/known_hosts に保存された リモートホストの公開鍵を使用してリモートホストの認証を行うため, 上記のメッセージは表示されません. (.ssh ディレクトリは,一度でも SSH でリモートアクセスをするとローカルホストに自動的に生成されます)

さて,yes と打鍵すると以下のメッセージが表示されます.
hoge@192.168.16.1XX's password:

要求の通り,隣の実験機で作成したアカウントのパスワードを入力しましょう.

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

リモートホストからログアウトする場合は以下のように logout コマンドを実行します. exit コマンドでもログアウトできます.

remote$ logout        
< リモートホストからログアウトします

[2.2] リモートログインした状態でのコマンド実行

リモートホストにログインした状態で,カレントディレクトリを確認してみましょう.
リモートホストのユーザーのホームディレクトリにいることが確認できます.(hogeはリモートホストでの皆さんのアカウント名です)

remote$ pwd
/home/hoge        

ファイルを作成してみましょう.

remote$ echo "remote_command_test" > test.txt        
< リダイレクトを利用して, 適当な txt ファイルを作成します. 

作成したファイルが正しく作られているか確認してみてください (ls, cat, less などを使う). このように, リモートホスト上でもローカルホストと変わりなく作業ができることが リモートアクセスの利点です.

リモートホストからローカルホストへ X クライアント (アプリケーションの一種. X window system については次回参照) を「飛ばしたい」, つまりリモートホストで起動した X クライアントをローカルホスト上に表示させたい場合は -X オプションを付けて ssh ログインします. (これの実現のために [1.2] の設定変更が必要でした.) ログインした後, X クライアントの一つである xeyes を飛ばしてみて下さい.

local$ ssh -X hoge@192.168.16.1XX        
< XX には情報実験機番号(2桁)を記述
remote$ xeyes        
< リモートホストで起動した xeyes がローカルホストに飛んできます.
ctrl + C で終了できます.

xeyes はデスクトップ上のマウスカーソルを追いかける目が出現するアプリケーションです. 今回のようにリモートログインをした状態で xeyes を起動した場合, ローカルホストのデスクトップ上のカーソルの位置情報が ssh 接続を介してリモートホストに送られており, 「カーソルを追いかけた場合の適切な目の位置の決定」という演算処理は リモートホストの CPU で処理されます. そしてその処理結果が再び ssh 接続を介してローカルホストに送られ, 「決定された位置へと実際に目を動かす」という処理が ローカルホストの CPU によって行われています.
xeyes は軽量なアプリケーションなので恩恵は薄いのですが, より演算処理の大変な作業をおこなう場合, 処理自体は高性能な リモートホストに任せれば, 低性能なローカルホストでも負担をかけずに実行結果だけを見ることができます.


[2.3] sftp を用いたファイル転送

sftp はファイル転送のために使われるコマンドで, ssh プロトコルを用いて通信内容を暗号化するという利点があります. 使い方は以下の解説の通りです.

local$ sftp hoge@remote
(パスワードなどで認証)

sftp> COMMAND

リモートホスト -> ローカルホストの場合は "COMMAND"(コマンド) として "get ファイルのパス" を, ローカルホスト -> リモートホストの場合は "put ファイルのパス" を 入力することでファイルの転送ができます.

アクセスするディレクトリを指定する際は
アカウント名@リモートホスト名:ディレクトリの絶対パス
という書式で指定します(未指定の場合はホームディレクトリ).

先に作成した test.txt をリモートホストからローカルホストへ転送してみましょう. test.txt はリモートホストのホーム領域に存在するものとし, test.txt をローカルホストのカレントディレクトリ (現在自分のいるディレクトリ)に転送するものとします. その場合は以下のようになります.

local$ sftp hoge@192.168.16.1XX
sftp> get test.txt sftp> exit
< XX には情報実験機番号(2桁)を記述
local$ cat test.txt
< 転送されたファイルを見る
<< 前ページ      本日のスケジュールのページへもどる >>      次ページ >>



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