SSH (Secure SHell) の利用

遠隔にある計算機の利用方法としてリモートシェル(remote shell)やリモートコピー(remote copy)があります. 教育用計算機システムでは遠隔利用のために,リモートシェルの一種である SSH (Secure SHell) が提供されており,SSHサーバ (ssh01〜ssh03) 上のリモートシェルやリモートコピーが利用できます. なお教育用計算機システムを利用するためには,情報教育棟の iMac端末だけでなく, SSHサーバの利用であってもアカウントの有効化が必要です. 以下の手続きを済ませておかなくてはなりません.

https://www.ecc.u-tokyo.ac.jp/user.html

また遠隔利用に関する詳細については,以下のページで紹介されています.

https://www.ecc.u-tokyo.ac.jp/system/outside.html

1. 公開鍵・秘密鍵ペアの作成

教育用計算機システムのSSHサーバは,公開鍵による署名を利用した公開鍵認証方式を用いています. そのため,まず自分のPC(ローカルPC)で公開鍵と秘密鍵のペアを作り, 公開鍵をSSHサーバ(リモートマシン),秘密鍵をローカルPCに置く必要があります. 公開鍵と秘密鍵については,教科書の「4.3節 通信の秘密と相手の認証」で解説されていますので, 仕組みを理解しておくと良いでしょう.

以下に公開鍵・秘密鍵のペアを作成する手順を示します. Macであればターミナル,WindowsであればPowerShellでssh-keygenコマンドを用います. ls, pwd, cd, mkdir, cpなどの基本的なシェルコマンドは理解しているものとします (そもそもこれらのコマンドを理解していないとSSHサーバ自体が使えません). 不安のある人は, はいぱーワークブックの「14. ファイルシステム」, 特に「 14.4 コマンドを使ったファイル操作」 などを読んで,シェルコマンドによるファイル操作について理解してから作業を始めると良いでしょう. なお,以下のシェルコマンドはMacOS,Windowsに共通であるため, ローカルPCのコマンドプロンプトは「$」としています. また「」はreturnキーないしenterキーを意味しています. 「(鍵を置くディレクトリを作成する)」などの丸括弧内の記述は, 説明用のコメントであり,コマンドの入力や出力結果ではありません.

$ mkdir ~/.ssh¶                                (鍵を置くディレクトリを作成する)
$ ssh-keygen -t rsa -b 3072¶                   (RSA2, 3072bit の鍵を作る)
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yama/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): ¶  (パスフレーズ省略, 何も入力せず¶)
Enter same passphrase again: ¶                 (パスフレーズ確認, 何も入力せず¶)
Your identification has been saved in /Users/yama/.ssh/id_rsa.
Your public key has been saved in /Users/yama/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vOjNRnIxbVGVGgnsTmgED+eYkHhUy8IFMeMlhM+P5Eo yama@myPC
The key's randomart image is:
+---[RSA 3072]----+
|   =X=*....o.o.. |
|  oooO O. o o .  |
|   ++ =.o+ . o   |
|    +. .= = .    |
|   o o .S*       |
|  E o o.o..      |
| . .  .+.        |
|  .  . o.        |
|      ..o        |
+----[SHA256]-----+
$ ls -l ~/.ssh¶                               (鍵の確認, Windowsは -l オプション不要)
total 16
-rw-------  1 yama  staff  2602  4 15 20:39 id_rsa
-rw-r--r--  1 yama  staff   569  4 15 20:39 id_rsa.pub
(id_rsaが秘密鍵, id_rsa.pubが公開鍵)

教育用計算機システムでは,RSA2(2048bit以上),ECDSA(256bit以上)の鍵が必要とされています. ここでは 3072bit のRSA2の鍵を作成しています. また個人のPCを利用することを前提としてパスフレーズは省略しています (パスフレーズを利用することで,秘密鍵のあるPCを用いるだけでなく, パスフレーズを知る人だけがSSHサーバに接続できるため,セキュリティは高くなります. しかし,利用するたびにパスフレーズの入力が必要となるので省略しました. PCを複数名で利用する場合にはパスフレーズを設定するべきでしょう).

Windowsユーザへの注意
Windowsユーザの中にはユーザ名に漢字を用いている人がいるかもしれません. その場合,ssh-keygenコマンドはユーザ名と同じ漢字のホームディレクトリに アクセスできず,鍵ペアの作成に失敗することがあります. その際は鍵ペアを,標準のホームディレクトリ直下の~/.sshディレクトリではなく, 別の場所で作成したうえで,作成後に~/.sshディレクトリに移動すれば良いでしょう.

2. 公開鍵の配置

公開鍵をSSHサーバに配置するために教育用計算機システムでは, ウェブブラウザで利用可能な公開鍵配置ユーティリティを提供しています.

  1. ウェブブラウザ(SafariやEdgeなど)を起動する
  2. 以下のページをアクセスして,共通IDとパスワードでECCSシステムにログインする
    https://portal.ecc.u-tokyo.ac.jp
  3. Upload your SSH public key」を選択する
  4. File」を選択し,「Choose」を押して, ファイル ~/.ssh/id_rsa.pub (公開鍵!)を選択する
    MacOSではホームディレクトリ直下の~/.sshディレクトリは (ピリオドで始まるため)非表示になるが, 「command + shift + . (ピリオド)」と押すと.sshディレクトリも表示される
  5. Send」を押す(SSHサーバの~/.ssh/authorized_keysに公開鍵が配置される)

秘密鍵id_rsaは自分PC(ローカルPC)の~/.sshディレクトリにあれば良いので, 標準の場所に作成した際には,特に作業する必要はありません.

3. リモートシェル(ssh)の利用

sshコマンドによってSSHサーバ上のリモートシェルを利用できます. つまりローカルPCから,SSHサーバ上のシェルコマンドを実行できるようになります. この際,コマンド引数の「アカウント@サーバ」によって, 利用するSSHサーバとアカウントを指定します. 以下の例では,アカウントを「1234567890」とし,ssh01を利用しています. 実際に利用する場合にはもちろん自分の共通IDを用います. またSSHサーバとして教育用計算機システムには,ssh01, ssh02, ssh03の3台があります. 利用者数が偏らないように,wコマンドなどで利用状況を見てSSHサーバを選択しましょう.

$ ssh 1234567890@ssh01.ecc.u-tokyo.ac.jp¶ (ssh01上のリモートシェル起動)
The authenticity of host 'ssh01.ecc.u-tokyo.ac.jp (192.51.223.226)' can't be established.
ECDSA key fingerprint is SHA256:4fUNtKacYcAKwPoQ9Npm3+1NNRNMLnajvSQUKiGUJ74.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes¶
(初回の接続時は本当に接続するか確認してくるので yes と入力する)
Warning: Permanently added 'ssh01.ecc.u-tokyo.ac.jp,192.51.223.226' (ECDSA) to the list 
of known hosts.
ssh01:~ 1234567890$ hostname¶             (利用しているSSHサーバの確認)
ssh01.ecc.u-tokyo.ac.jp
ssh01:~ 1234567890$ whoami¶               (アカウントの確認)
1234567890
ssh01:~ 1234567890$ w¶                    (利用者の確認, ここでは自分1名だけ)
21:26  up 17:26, 1 user, load averages: 1.04 1.21 1.26
USER     TTY      FROM              LOGIN@  IDLE WHAT
1234567890 s000     111.101.139.33   21:26       - w
ssh01:~ 1234567890$ pwd¶                  (カレントディレクトリの確認)
/home/1234567890
ssh01:~ 1234567890$ exit¶                 (リモートシェルの終了)
logout
-bash: /opt/ECC/bin/logout.sh: No such file or directory
Connection to ssh01.ecc.u-tokyo.ac.jp closed.

4. リモートコピー(scp)の利用

scpコマンドによって,SSHサーバから自分のローカルPCにファイルを複写したり, 逆にローカルPCからSSHサーバにファイルを複写したりできます. 利用方法はcpコマンドとほとんど同じです. ローカルPC上のファイルはcpコマンドと同様にパスで指定しますが, SSHサーバ上のファイルは「アカウント@サーバ:パス」という形式で指定します. SSHサーバの相対パスは,SSHサーバのホームディレクトリが起点(カレントディレクトリ)となります.

$ scp 1234567890@ssh01.ecc.u-tokyo.ac.jp:.ssh/authorized_keys .¶
authorized_keys                               100% 1349   132.0KB/s   00:00    
$ ls -l¶                                 (ファイルの確認, Windowsは -l オプション不要)
total 8
-rw-------   1 yama  staff  1349  4 15 22:09 authorized_keys

この例ではSSHサーバ上のファイルである~/.ssh/authorized_keysをローカルPCに複写していますが, 逆にローカルPCからSSHサーバにファイルをコピーすることも可能です.