手元のPCが計算リソース不足等の理由により計算機サーバー上でデータを解析する必要な場合がある. そのためには以下の作業が必要である.
本章ではまずsshコマンドを用いて計算機サーバーに接続する手順[上記2]を示す. 次にサーバーへの接続やsshを利用したファイル転送関連コマンド(scpやrsync)の実行を簡略化するためにssh configファイルを作成後、scpやrsyncを用いたデータ転送のやり方[上記1, 4]を示す. 最後にssh通信断への対応[上記3関連事項]の仕方を示す.
本章で仮定しているネットワーク構成は以下の通りである.
まず踏み台サーバーに接続する.
$ 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を作成することで、コマンドオプション無指定時のデフォルトの挙動を設定する.
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コマンドは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コマンドを発行する.
計算機サーバー上で以下のコマンド文を実行する.
$ 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という階層順で多重化することができる. それぞれの区別や利用法は下表を参考にしつつ、実際に操作してみればすぐに理解することができるはずだ.
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から離れる |
prefix (Ctrl-b) + c | 新規window作成 |
prefix (Ctrl-b) + & | window削除 |
prefix (Ctrl-b) + n | 次のwindowへ移動 |
prefix (Ctrl-b) + p | 前のwindowへ移動 |
prefix (Ctrl-b) + % | paneを左右分割 |
prefix (Ctrl-b) + " | paneを上下分割 |
prefix (Ctrl-b) + o | paneを順に移動 |
prefix (Ctrl-b) + x | pane削除 |
既定ではprefixはCtrl-bに設定されている. これはCtrlとbを同時に打鍵するという意味である. 現在sessionから離れるためのショートカットキーであるCtrl-b + dは、Ctrlとbを同時打鍵後、一度キーボードから指を離し、再度dを打鍵するという意味である.