CmhaDSO 計算機サーバ利用の手引き


はじめに

手元のPCが計算リソース不足等の理由により計算機サーバー上でデータを解析する必要な場合がある. そのためには以下の作業が必要である.

  1. 手元のPC上にある解析したいデータを計算機サーバーに送る(scp/rsyncコマンド).
  2. 手元のPCから遠隔にある計算機サーバーを操作するために計算機サーバーに接続する(sshコマンド).
  3. 計算機サーバー上でデータを解析する(手元のPCをコマンドライン上で操作するのと同様).
  4. 計算機サーバー上にある解析結果データを手元のPCに送る(scp/rsyncコマンド).

本章ではまずsshコマンドを用いて計算機サーバーに接続する手順[上記2]を示す. 次にサーバーへの接続やsshを利用したファイル転送関連コマンド(scpやrsync)の実行を簡略化するためにssh configファイルを作成後、scpやrsyncを用いたデータ転送のやり方[上記1, 4]を示す. 最後にssh通信断への対応[上記3関連事項]の仕方を示す.

本章で仮定しているネットワーク構成は以下の通りである.

sshコマンドによる計算機サーバーへの接続

まず踏み台サーバーに接続する.

$ ssh -p 10022 u000@xxx.xx.xx.xxx

初回アクセス時のみ以下のように聞かれるのでyesと回答する。

The authenticity of host '[xxx.xx.xx.xxx]:10022 ([xxx.xx.xx.xxx]:10022)'
can't be established.
ECDSA key fingerprint is SHA256:
1143A+hR461HldFGd45OIHactZo3t4yysh54j1jObYhxJ.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

パスワード入力 (画面表示はされない。入力後ENTERで確定)

u000@xxx.xx.xx.xxx's password:

踏み台サーバーに接続したことは以下のようにプロンプトが変化していること等で分かる.

[u000@gateway ~]$

次に踏み台サーバーから計算機サーバーに接続する.
以下のように入力すると、先ほど同様にパスワードを要求される.

[u000@gateway ~]$ ssh main

計算機サーバーに接続したことはプロンプトが変化していること等で分かる.

[u000@main ~]$

exitコマンドまたはCtrl-dにより接続を切ることができる。

[u000@main ~]$ exit
[u000@gateway ~]$ exit

ssh configファイルの作成

計算機サーバーへの接続を簡便化するために、~/.ssh/configを作成することで、コマンドオプション無指定時のデフォルトの挙動を設定する.

Host     gateway
HostName xxx.xx.xx.xxx
User     u000
Port     10022

Host     u000
HostName main
User     u000
Port     22
ProxyCommand ssh -W %h:%p gateway
~/.ssh/configを上記のように作成しておけば今後は以下のようにして計算機サーバーに接続することができる.
$ ssh main   # パスワード入力は2回(gatewayの分とmainの分)要求される.

scp/rsyncコマンドによるデータ転送

scpコマンドはscp -P portNumber [-r] from toの書式で使用し、directoryを転送する場合には-rオプションを指定する. 計算機サーバー側のパスはuserName@hostName_or_IP_address:filePath_on_the_serverという書式で指定する. 上記のようにssh configファイルを作成している場合は、scpコマンドにおいて-P portNumberを指定する必要がなく、サーバー側のパス指定もu000:filePath_on_the_serverとすれば十分である.

$ scp -r ~/NGS_20230401                 u000:~/NGS      # 手元PCにおけるデータをサーバーに転送する例. 手元のPCからscpコマンドを発行する.
$ scp -r u000:~/NGS/NGS_20230401/RESULT ~/NGS_20230401  # サーバー上のデータを手元のPCに転送する例. 手元のPCからscpコマンドを発行する.

rsyncコマンドはdirectoryを同期するために使用する. 同期元と同期先の差分を検出し、差分に対応する処理のみ行う. まずは以下のオプションとパス指定で使用することを検討するとよい.

$ rsync -auv --delete from to
$ rsync -auv --delete u000:~/SYN/ ~/SYN/

  # サーバー上の~/SYN配下にあるファイル・ディレクトリを手元のPCの~/SYN配下にあるファイル・ディレクトリと完全同期している例.
  # 手元のPCからrsyncコマンドを発行する.

tmuxによる通信断への対応

計算機サーバー上で以下のコマンド文を実行する.

$ seq 3600 | while read i ; do date; sleep 1 ; done

1秒ごとに日付・時刻情報が1時間出力され続ける。

Thu May 25 16:12:31 JST 2023
Thu May 25 16:12:32 JST 2023
Thu May 25 16:12:33 JST 2023
Thu May 25 16:12:34 JST 2023
Thu May 25 16:12:35 JST 2023
Thu May 25 16:12:36 JST 2023

処理中に計算機サーバーとの接続が切断されると、コマンドが停止する。 次にコマンド実行前にtmuxを起動しておいた場合を検討する.

$ tmux     # 新規セッションを作成

正常にtmuxのsessionに入ったら、左上にsession番号、window番号、pane番号が表示された画面に遷移する. 上記コマンド文を再実行し、その結果が出力され続けている状態で、計算機サーバーとの接続を切断し、計算機サーバーに再接続後、以下のコマンドを実行してみよう.

$ tmux a

直前に作成したtmuxのsessionに復帰することができ、通信切断後も計算機サーバー上では処理が継続していることが分かる.

Thu May 25 16:24:51 JST 2023
Thu May 25 16:24:52 JST 2023
Thu May 25 16:24:53 JST 2023
Thu May 25 16:24:54 JST 2023
Thu May 25 16:24:55 JST 2023
Thu May 25 16:24:56 JST 2023

tmuxを利用すれば意図せぬ通信トラブルによるコマンド処理の中断を回避することができる. また計算機サーバー上で処理に多くの時間を要するコマンドを実行する際には、コマンド実行後、意図的に現在のsessionから離れる(Ctrl-b + d)ことができる. すなわち、計算機サーバーに今晩やらせるお仕事を仕込んでおいて、手元のPCは電源を落として帰宅する. そして翌朝計算機サーバーに接続して一晩の成果を確認するという利用ができるわけだ.

tmuxを利用すれば端末をsession・window・paneという階層順で多重化することができる. それぞれの区別や利用法は下表を参考にしつつ、実際に操作してみればすぐに理解することができるはずだ.

session
tmux 新規session開始
tmux new -s sessionName 名前を付けて新規session開始
tmux a 直前のsessionに入る
tmux a -t sessionName 指定したsessionに入る
tmux kill-session -t sessionName 指定したsessionを削除
tmux ls sessionリストの表示
prefix (Ctrl-b) + d 現在sessionから離れる
window
prefix (Ctrl-b) + c 新規window作成
prefix (Ctrl-b) + & window削除
prefix (Ctrl-b) + n 次のwindowへ移動
prefix (Ctrl-b) + p 前のwindowへ移動
pane
prefix (Ctrl-b) + % paneを左右分割
prefix (Ctrl-b) + " paneを上下分割
prefix (Ctrl-b) + o paneを順に移動
prefix (Ctrl-b) + x pane削除

既定ではprefixはCtrl-bに設定されている. これはCtrlbを同時に打鍵するという意味である. 現在sessionから離れるためのショートカットキーであるCtrl-b + dは、Ctrlbを同時打鍵後、一度キーボードから指を離し、再度dを打鍵するという意味である.