「計算機利用ことはじめ」の版間の差分

提供: Eospedia
移動: 案内検索
(Xフォーワードが有効になっているかのチェック)
(研究室計算機へのsshログイン)
行83: 行83:
  
 
passwordには、計算機管理者から通知された計算機アカウントのパスワードを入力すればよい。コピペも効く。
 
passwordには、計算機管理者から通知された計算機アカウントのパスワードを入力すればよい。コピペも効く。
 +
 +
=== 公開鍵認証を利用してパスワードなしでログインできるようにする ===
 +
==== ローカルPCから研究室計算機へ ====
 +
ローカルPCにて、
 +
<pre>
 +
cd ~/.ssh
 +
ssh-keygen
 +
</pre>
 +
とすると、公開鍵秘密鍵ペアの生成に関するプロンプトが出てくる。特にこだわりが無ければデフォルトのままで、エンターを押していけば良い。
 +
 +
.ssh以下に id_rsa(秘密鍵ファイル)と id_rsa.pub(公開鍵ファイル)が生成される。秘密鍵は漏洩させてはならない。秘密鍵にセキュリティをかけたいならば、ssh-keygenでパスフレーズを設定しておくと良い。
 +
 +
sshログイン先の計算機のアカウントの ~/.ssh/authorized_keys ファイルに id_rsa.pub(公開鍵)の中身をコピペすることで公開鍵が登録され、それ以降はローカルPCからリモートPCへパスワード無しでsshログイン可能になる(セキュリティは公開鍵認証により担保される)。
 +
 +
実際にリモートPCで ~/.ssh/authorized_keys ファイルを作成し、そこへ公開鍵の中身のテキストをコピペすることもできるが、sshには特別なコマンドがあって、
 +
<pre>
 +
ssh-copy-id tutorial@192.168.4.83
 +
</pre>
 +
 +
のようにすれば、ホスト192.168.4.83のアカウントtutorialへ公開鍵登録することができる。このほうが楽。
 +
 +
==== 研究室計算機間で ====
 +
研究室計算機は複数存在して、その間をsshで行き来することはよくやる。ので、研究室計算機間でもパスワードなしsshログインできると楽である。
 +
 +
研究室計算機はNFS(Network File System)によりホームディレクトリを共有しているので、したがって.sshも共有している。ゆえにどこかの研究室計算機で鍵ペアを生成し、authorized_keysに登録しておきさえすれば、いずれの研究室計算機間でもパスワードなしsshログインが可能となる。
 +
 +
どこかの研究室計算機にsshログインしたあと、
 +
<pre>
 +
ssh-keygen -C ""
 +
</pre>
 +
とする。-C ""は、公開鍵の末尾に計算機名をつけないようにするオプション。
 +
 +
それができたら、id_rsa.pubの中身をauthorized_keysへ登録すれば良い。
 +
<pre>
 +
cd ~/.ssh
 +
echo id_rsa.pub >> authorized_keys
 +
</pre>
 +
'>>'ではなく'>'としてしまうとauthorized_keys全体が上書きされてしまうので打ち間違えないように注意。
 +
 +
上記ができたら、計算機間でsshログインを試してみる。
  
 
== '''XフォーワードによるリモートGUIアプリの使用''' ==
 
== '''XフォーワードによるリモートGUIアプリの使用''' ==

2020年7月13日 (月) 14:08時点における版

安永研究室特有の説明も含みますので、研究室外の方は適宜読み替えてください。

本記事の内容

まずは以下ができるように説明を試みます。

  • 研究室計算機へのsshログイン
  • XフォーワードによるリモートGUIアプリの使用


研究室の計算機に直接インストールしてあるアプリを使いたいだけであれば上記までで十分ではあります。が、共用の計算機で各々好き勝手なことをやろうとすると色々と問題が生じてくるものです(使う方も管理・運用する方も)。

ということで、Dockerを用いた環境構築とその利用法についても説明します。

  • 研究室計算機内でのDockerイメージのビルドとコンテナの生成
    • 研究室で用意している機械学習用イメージと単粒子解析用イメージの両方の場合について説明します。あまり汎用的なDockerの説明にはなっていないので留意してください。
    • これらのイメージは将来的に統合する予定です。
  • sshポートフォワードによるローカルPCとDockerコンテナの直接接続
  • Dockerコンテナへのログイン
  • JupyterLabサーバーの起動
  • JupyterLabへの接続

前提

  • 研究室計算機のアカウントを持っていること。
  • コンソール(ターミナル)アプリの使い方がわかっていて、Unix/Linuxの基本コマンドが(調べながらでもいいから)使えること。
  • ローカルPC(自分が手元で使うPCのこと)にXサーバーがインストールされていて、Xサーバーが起動していること。
  • 研究室ネットワークへ接続していること。
  • ググって調べる心意気。

よくわからなければネットワーク係に相談してください。

研究室計算機へのsshログイン

sshコマンドの基本書式は?

sshの基本書式は以下の通りで、ユーザー名とログインしたい計算機のホスト名とを`@`でつなげてsshコマンドに渡す。

ssh [ログインしたい計算機における自分のユーザー名]@[ログインしたい計算機のホスト名(またはIPアドレス)]

※ []は、[]も含めて適当な値に置き換えること。


sshコマンドの使い方は簡易的には以下コマンドで確認できる。

ssh

詳細なドキュメントを読むにはmanコマンドを使う。

man ssh

研究室にはどんな計算機がある?

いろいろあるので、用途や空き状況に応じて適宜選択する。

研究室のファイルサーバーに計算機一覧表が置いてあるので(マニュアル\サーバー関連\計算機一覧\computer_list_yasunaga-lab.xlsx)、それを参照すればよい。計算機一覧表にアクセスできない場合や、一覧表を見たとてどれを使えばいいのかよくわからない場合は、ネットワーク係に聞く。

GPGPU計算をしないとわかっている場合は、GPUを使いたい人のためにも、高性能GPU(※)搭載の計算機利用は避けるのが望ましい。 ( ※ 2020年6月時点では GeForce GTX1080, GTX1080Ti, RTX2080, RTX2080Ti)

利用するのに予約は必要ですか?

計算機の予約状況は、研究室カレンダーのうちの「計算機」カレンダーで確認できる。他の人が使えなくなるレベルの重い計算を長時間走らせる場合は、先例に倣ってカレンダーで予約をする(あまり厳密にはやっていませんが)。交渉はSlackやメールで適宜やってください。

実際のログイン例

ユーザー名が tutorial で、ホスト名 cs03 の計算機にログインしたいとすると、

ssh tutorial@cs03

※ (ドメイン名無しの)ホスト名でアクセスするためには、ローカルPCのネットワーク設定においてDNSサーバーとDNSサーチドメインが設定されている必要がある。DHCPを使っていればDHCPサーバーが勝手に設定値を振ってくれるはずなので、気にする必要はないはず。もしホスト名でのアクセスがうまく行かなければ、ネットワーク係へ連絡してください。

もしくは、cs03のIPアドレスは 192.168.4.83 なので、以下の様にしてもログインできる。

ssh tutorial@192.168.4.83

初回ログインの場合は、以下のようなメッセージとプロンプトが表示される。

The authenticity of host 'cs03 (192.168.4.83)' can't be established.
ECDSA key fingerprint is SHA256:*****.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cs03,192.168.4.83' (ECDSA) to the list of known hosts.
tutorial@cs03's password:

"Are you sure you want to continue connecting (yes/no)?"の問いに対しては "yes" と入力すればよい。(もちろん、それが信頼できるサーバーであるとわかっている場合。)

passwordには、計算機管理者から通知された計算機アカウントのパスワードを入力すればよい。コピペも効く。

公開鍵認証を利用してパスワードなしでログインできるようにする

ローカルPCから研究室計算機へ

ローカルPCにて、

cd ~/.ssh
ssh-keygen

とすると、公開鍵秘密鍵ペアの生成に関するプロンプトが出てくる。特にこだわりが無ければデフォルトのままで、エンターを押していけば良い。

.ssh以下に id_rsa(秘密鍵ファイル)と id_rsa.pub(公開鍵ファイル)が生成される。秘密鍵は漏洩させてはならない。秘密鍵にセキュリティをかけたいならば、ssh-keygenでパスフレーズを設定しておくと良い。

sshログイン先の計算機のアカウントの ~/.ssh/authorized_keys ファイルに id_rsa.pub(公開鍵)の中身をコピペすることで公開鍵が登録され、それ以降はローカルPCからリモートPCへパスワード無しでsshログイン可能になる(セキュリティは公開鍵認証により担保される)。

実際にリモートPCで ~/.ssh/authorized_keys ファイルを作成し、そこへ公開鍵の中身のテキストをコピペすることもできるが、sshには特別なコマンドがあって、

ssh-copy-id tutorial@192.168.4.83

のようにすれば、ホスト192.168.4.83のアカウントtutorialへ公開鍵登録することができる。このほうが楽。

研究室計算機間で

研究室計算機は複数存在して、その間をsshで行き来することはよくやる。ので、研究室計算機間でもパスワードなしsshログインできると楽である。

研究室計算機はNFS(Network File System)によりホームディレクトリを共有しているので、したがって.sshも共有している。ゆえにどこかの研究室計算機で鍵ペアを生成し、authorized_keysに登録しておきさえすれば、いずれの研究室計算機間でもパスワードなしsshログインが可能となる。

どこかの研究室計算機にsshログインしたあと、

ssh-keygen -C ""

とする。-C ""は、公開鍵の末尾に計算機名をつけないようにするオプション。

それができたら、id_rsa.pubの中身をauthorized_keysへ登録すれば良い。

cd ~/.ssh
echo id_rsa.pub >> authorized_keys

'>>'ではなく'>'としてしまうとauthorized_keys全体が上書きされてしまうので打ち間違えないように注意。

上記ができたら、計算機間でsshログインを試してみる。

XフォーワードによるリモートGUIアプリの使用

下準備

まずはローカルPCでXサーバーを起動する。起動方法はどのXサーバーを使うかにより異なるので、適宜マニュアルやブログなどを探して頑張ってください。

「よくわからん!」という声が多ければ、(誰かが)整理してここに追記します。

Xフォーワードを有効にしてのsshログイン

信頼できる計算機を相手にXフォーワードをする場合は、以下の様にする。

$ ssh -Y [ユーザー名]@[ホスト名]

要は通常のsshコマンドに -Y オプションを追加しているだけ。

-Yの代わりに-Xでも行けると思うが、-Xはセキュリティを重視して制限がかかる場合があるようで、一部のアプリは阻害されるかもしれない。研究室計算機相手であれば-Yで問題ないだろう。

上記コマンドにより、リモート計算機にsshログインすると同時に、Xフォーワードも有効になる。

Xフォーワードが有効になっているかのチェック

色々な理由でXフォーワードが有効になっていない場合もある。軽量なGUIアプリを使ってチェックしてみるとよい。

例えば

$ xeyes

とうつと、Xフォーワードが有効であれば

コメント 2020-06-27 194638.png

目玉が表示される。

※ Command not foundのようなエラーが出た場合は xeyes がインストールされていないから、インストールするか、別のGUIアプリで試す。

もし以下のような表示が出た場合は、

Error: Can't open display:

Xフォワードに失敗している。sshコマンドへの-Yオプションの付け忘れ、ローカルPCでのXサーバーの立ち上げ忘れをチェックする。

忘れていないにも関わらず失敗している場合は、リモート計算機側でssh越しのXフォーワードを無効に設定していることが考えられる。/etc/ssh/sshd_config の X11Fowarding が yes, X11useLocalhost が no となっているか確認すること。よくわからなければネットワーク係へ連絡。

そもそもXフォーワードとは何だ

X Window Systemという仕組みで動く一連のGUIアプリがあって、それは各アプリがXクライアントとなって、Xサーバーへ描画やキー入力制御をやってもらう感じで動作している。

普通は1つの計算機の中で、各XクライアントがXサーバーへ描画指示などを投げて描画が行われる。

一方でXフォーワードをする場合は、リモート計算機のXクライアントが、sshで確立した通信経路を通して、ローカルPCのXサーバーに描画やキー入力をやってもらう感じで動作する。このように普通とは異なる相手先へ通信を転送する行いをフォーワード、フォーワーディングと呼ぶ。

LinuxはOSがそもそもX window systemを使っているため、そこで動くGUIアプリもXを利用したものになっているから、だいたいXフォーワードで飛ばしてこれる。FirefoxでもファイルエクスプローラーでもImageJでもRELIONでもEmacsでも飛ばしてこれる。ただしOpenGLを使って描画しているアプリではGLXが必要だったりと、特殊なことをしないといけない場合もある。

という説明でなんとなくお判りいただけるだろうか?

XフォーワードでRELIONを使ってみる