2017 年度 OSS リテラシー 3 : 第 4 回 リモートアクセス

今回からは自分のアカウントでログインすること. ユーザ pi でログインしないこと.

ネットワークパラメタの確認

SSH によるリモートアクセスを行うために, まずはラズパイのネットワークパラメタを確認し, IP アドレスを控える必要がある. 確認には ifconfig コマンドを用いる.

$ ifconfig eth0 

   ...(略)...   inet: XX.XX.XX.XX   ...(略)...

ssh の設定

まず始めに, ラズパイの SSH インターフェイスを設定する. "メニュー" => "設定" => "Raspberry Pi の設定" を起動し, "インターフェイス" タブを選択する. 以下のように SSH を「有効」にする.

次に, 公開鍵認証による ssh 接続を許可する. sshd_config の中の "PubkeyAuthentication yes" と書かれた行のコメントアウトを外す. 設定を変更した後は必ず SSH サーバを再起動すること.

$ sudo -s
  [sudo] hogehoge のパスワード:

# vi /etc/ssh/sshd_config 

  ...(略)...
  PubkeyAuthentication yes      (コメントアウトを外す)
  #PubkeyAuthentication yes

# /etc/init.d/ssh restart       (SSH サーバの再起動)

  [ ok ] Restarting ssh (via systemctl): ssh.service.

# exit
$

ssh の接続テスト (ローカルホスト内)

まず始めに, テストとしてローカルホスト (ラズパイ自身) に ssh でログインする. なお, 初めて ssh 接続するホストの場合は鍵を .ssh/known_host ファイルに登録してよいか聞かれるが通常は "yes" で良い. パスワードを入力するとログインが完了する. ログアウトする場合は exit を入力する. w コマンドでログイン情報が表示できる.

$ ssh localhost

  The authenticity of host 'localhost (::1)' can't be established.
  ECDSA key fingerprint is SHA256:kxOhw7sERvC9lrf0LddfB0ekBrKfqUZAohy5N/EaYaM.
  Are you sure you want to continue connecting (yes/no)? yes                      <-- 鍵の登録
  Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
  hogehoge@localhost's password:                                                  <-- パスワード入力 
  Linux iot-00 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l

  The programs included with the Debian GNU/Linux system are free software;
  the exact distribution terms for each program are described in the
  individual files in /usr/share/doc/*/copyright.

  Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  permitted by applicable law.
  Last login: Thu Oct 19 13:37:06 2017 from 10.164.1.197

$ w 

  04:56:53 up 15:25,  3 users,  load average: 0.00, 0.00, 0.00
  USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
  hogehoge tty7     :0               木13    15:25m 21.04s  0.30s /usr/bin/lxsession -s LXDE-pi -e LXDE
  hogehoge tty1     :0               04:06    0.00s  0.33s  0.09s ssh localhost
  hogehoge pts/2    ::1              04:56    5.00s  0.26s  0.03s w

$ ls
$ exit

リモートアクセス (公開鍵認証): ラズパイ => サーバ

ラズパイで公開鍵を作成する. 途中, 「パスフレーズ」を入力するよう求められるが, 何も入力しないで Enter キーを押す. ラズパイからサーバへのデータ転送を自動化する (パスワードなしで実行する) ために, パスフレーズ無しで公開鍵を作成する (Linux セキュリティ標準教科書 6.8 節).

$ ssh-keygen 

  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/hogehoge/.ssh/id_rsa): (何も入力せず Enter キーを押す => 鍵が /home/hogehoge/.ssh/id_rsa に作られる)
  Enter passphrase (empty for no passphrase):                       (何も入力せず Enter キーを押す)
  Enter same passphrase again:                                      (何も入力せず Enter キーを押す)
  Your identification has been saved in /home/hogehoge/.ssh/id_rsa.
  Your public key has been saved in /home/hogehoge/.ssh/id_rsa.pub.
  The key fingerprint is:
  SHA256:DWM3yUuGBTb2V1BRwJp+lnBbi/XCHqX2HECsaVjihLQ hogehoge@iot-00
  The key's randomart image is:
  +---[RSA 2048]----+
  |      ..*.. o+=+.|
  |       +.O o +.  |
  |       EB % =o   |
  |       . X B+...o|
  |        S +. ++*o|
  |            ..@o.|
  |             = =.|
  |              . o|
  |                 |
  +----[SHA256]-----+

公開鍵の種類とbit長は以下のコマンドで確認できる. "Comment:" 行に注目すると, この鍵の場合は鍵の bit 長が 2048 の RSA 形式であることがわかる.

$ ssh-keygen -e

  Enter file in which the key is (/home/hogehoge/.ssh/id_rsa): 
  ---- BEGIN SSH2 PUBLIC KEY ----
  Comment: "2048-bit RSA, converted by hogehoge@iot-00 from OpenSSH"
  AAAAB3NzaC1   .... (以下略).....

  ---- END SSH2 PUBLIC KEY ----

公開鍵をサーバ sky.epi.it.matsue-ct.jp へコピーするため, ラズパイのターミナルを起動し, ssh-copy-id コマンドを実行する. サーバ sky.epi.it.matsue-ct.jp でのアカウント名は「学生番号」である (以下では jxxxx と表記する). 仮パスワードは演習時間中に連絡する.

ssh-copy-id は公開鍵をサーバ側の ~/.ssh/authorized_keys に保存するものである. 途中, サーバのログインパスワード (鍵認証のパスフレーズではない)を聞かれるので, 適宜入力すること. 成功すると, "Number of key(s) added: 1" と表示される.

$ ssh-copy-id jxxxx@sky.epi.it.matsue-ct.jp

  /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/hogehoge/.ssh/id_rsa.pub"
  The authenticity of host 'sky.epi.it.matsue-ct.jp (10.164.1.197)' can't be established.
  ECDSA key fingerprint is SHA256:xr2ga95fO+StoEfPKwI1gOHmUTgSQNy0znMs7rqbjLI.
  Are you sure you want to continue connecting (yes/no)? yes       (yes を入力)

  /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
  /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
  jxxxx@sky.epi.it.matsue-ct.jp's password:   (パスワードを入力)

  Number of key(s) added: 1

  Now try logging into the machine, with:   "ssh 'jxxxx@sky.epi.it.matsue-ct.jp'"
  and check to make sure that only the key(s) you wanted were added.

サーバからラズパイへログインする. パスフレーズなしでログインできれば OK. サーバからログアウトするときは exit コマンドを実行する.

$ ssh -l jxxxx sky.epi.it.matsue-ct.jp

  The programs included with the Debian GNU/Linux system are free software;
  the exact distribution terms for each program are described in the
  individual files in /usr/share/doc/*/copyright.

  Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  permitted by applicable law.

sky$ 
sky$ exit
$

サーバとラズパイの区別をするために, サーバのコマンドプロンプト ($, #) の 前にホスト名 (sky) を付けた. また, ラズパイとサーバでユーザ名が異なるので, ssh の -l オプションにユーザ名を渡した.

リモートアクセス (公開鍵認証): サーバ => ラズパイ

自分のアカウントの設定

まず, サーバ sky.epi.it.matsue-ct.jp にログインする. サーバとラズパイの区別をするために, サーバのコマンドプロンプト ($, #) の 前にホスト名 (sky) を付けていることに注意せよ.

$ ssh -l jxxxx sky.epi.it.matsue-ct.jp

  The programs included with the Debian GNU/Linux system are free software;
  the exact distribution terms for each program are described in the
  individual files in /usr/share/doc/*/copyright.

  Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  permitted by applicable law.

 sky$ 
 sky$

サーバにログインしたら, 忘れないうちにサーバの初期パスワードを変更すること. なお, 新旧パスワードの入力場面では, ターミナルには何も表示されないことに注意せよ.

sky$ passwd 

  jxxxx 用にパスワードを変更中
  現在の UNIX パスワード:                   
  新しい UNIX パスワードを入力してください:
  新しい UNIX パスワードを再入力してください:
  passwd: パスワードは正しく更新されました

サーバ上で ssh 公開鍵を作成する. 途中, 「パスフレーズ」を入力するよう求められる. これは公開鍵認証を行うときに使うパスワードみたいなもので, 他で使っていない 文字列を入力すること.

sky$ ssh-keygen 

  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/jxxxx/.ssh/id_rsa):  (何も入力せず Enter キーを押す => 鍵が /home/jxxxx/.ssh/id_rsa に作られる)
  Enter passphrase (empty for no passphrase):                     (パスフレーズを入力, 画面表示されない)
  Enter same passphrase again:                                    (パスフレーズを入力, 画面表示されない)
  Your identification has been saved in /home/jxxxx/.ssh/id_rsa.
  Your public key has been saved in /home/jxxxx/.ssh/id_rsa.pub.
  The key fingerprint is:
  36:12:2d:9f:5f:14:50:92:16:3e:99:77:68:f0:fa:fa jxxxx@sky
  The key's randomart image is:
  +---[RSA 2048]----+
  |          ==o    |
  |       . .o* o   |
  |      o ..= * .  |
  |       + . * .   |
  |      . S . .    |
  |       o o o     |
  |          . .    |
  |           .     |
  |          ..E    |
  +-----------------+

公開鍵をラズパイへコピーするため, ssh-copy-id コマンドを実行する.

sky$ ssh-copy-id hogehoge@XX.XX.XX.XX (ラズパイの IP)

  ECDSA key fingerprint is 4f:aa:eb:69:d0:29:42:32:d4:75:6d:4b:3c:ce:9b:a6.
  aAre you sure you want to continue connecting (yes/no)? yes    (yes 入力)

  /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
  /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
  hogehoge@10.138.64.114's password:        (ラズパイのパスワード入力)

  Number of key(s) added: 1

  Now try logging into the machine, with:   "ssh 'hogehoge@10.138.64.114'"
  and check to make sure that only the key(s) you wanted were added.

テスト接続を行う. 公開鍵認証が優先されるので, パスフレーズの入力が求められる.

sky$ ssh -l hogehoge XX.XX.XX.XX

  Enter passphrase for key '/home/hogehoge/.ssh/id_rsa':     (パスフレーズの入力)

  Linux iot-00 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l

  The programs included with the Debian GNU/Linux system are free software;
  the exact distribution terms for each program are described in the
  individual files in /usr/share/doc/*/copyright.

  Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  permitted by applicable law.
  Last login: Mon Oct  2 19:54:47 2017 from 10.164.1.197

$ exit   (ラズパイからログアウト)

sky$ 

教員のアカウントの設定

教員のアカウントで, サーバからラズパイにログインできるようにする. 以下で行う手順 (1), (2) は ssh-copy-id コマンドの内部で実際に行なわれている処理である (ssh-key-copy コマンドが使えないから).

1) サーバ上の公開鍵を転送.

sky$ scp /home/sugiyama/sugiyama-id_rsa.pub hogehoge@XX.XXX.XXX.XXX:~/

sky$ exit   (サーバからログアウト)

$

2) ラズパイにおいて教員の公開鍵を設定する. 転送した公開鍵を手動で ~sugiyama/.ssh/authorized_keys に保存する. ファイル/ディレクトリの所有者とパーミッションを適切に設定すること.

$ sudo -s

# cd /home/sugiyama
# mkdir .ssh
# chmod 700 .ssh/  (パーミッション変更) 
# chown sugiyama.sugiyama .ssh/  (所有者・所有グループ変更)

# ls -ld .ssh/ (確認)

   drwx------ 2 sugiyama sugiyama 4096 11月  1 00:23 .ssh/

# mv /home/hogehoge/sugiyama-id_rsa.pub .ssh/authorized_keys
# chmod 600 .ssh/authorized_keys
# chown sugiyama.sugiyama .ssh/authorized_keys
# ls -l .ssh/authorized_keys

   -rw------- 1 sugiyama sugiyama 2435 11月  1 00:29 .ssh/authorized_keys

課題

  • 次回の授業開始までにこれまでの演習課題を完全に終わらせておくこと. 次回, 教員がサーバから各自のラズパイに ssh で接続できることを確認する予定である.
  • Windows で putty を起動し, サーバ sky.epi.it.matsue-ct.jp へ ssh せよ. さらに, サーバからラズパイへ ssh アクセスせよ. ラズパイにログインしたあと, 以下のコマンドを実行し, そのスクリーンショット (ラズパイにログインした証拠) を提出せよ.

    • ラズパイの無線インターフェイス (wlan0) に接続することになるので, ラズパイの IP は $ ifconfig wlan0 で確認すること.
    $ cat /etc/issue
    
      Raspbian GNU/Linux 9 \n \l
    
    $ hostname
    
      iot-XX
  • (発展, 提出任意) Windows の putty からサーバ(や自分のラズパイ)に公開鍵認証で リモートアクセスしよう. 設定して接続した証拠を何らかの形で提出せよ.