ssh環境設定は結構手間がかかります
アッシェンテ!将棋を勉強したい、🐸かえるのクーの助手の🦉「井戸中 聖」です。
「マジかぁ~。」*1 ♣テト*2に藤井新棋聖🏆をやっつけて欲しいです。でも今の充実ぶりなら、返り討ちにあいそうです。なんせ、「神様に1つお願いするとしたら?」の質問に「ぜひ手合わせしてほしいです」と回答する方なのですから。
あ、それと前のページの設定を触っていたら、設定の手違いなのか、⭐スターがクリアされてしまいました。いただいた方ごめんなさい。なお前頁は久々の「記事丸ごとジョーク」です。笑ってもらえたら幸いです。さらに、インテルへのほのかな怒り👆も、くみ取ってもらえると僥倖です。(クーへ:おこっちゃやーよ)
本題に行く前に
MPIの3つ巴の相互接続を実験しようとしていましたが、田Windows同士の確認もしたくなったので、仮想環境にWindows10をもう1台準備します。
Windows10 Pro:
cpu=4,men=8G,disk=60G | COMPUTERNAME=SUEZO | ipv4=192.168.16.132
VMに新規インストールし、pycharmとanacondaを導入
これもプライベートアドレスに対してファイアーウォール全OFFです。
設定は前の設定通りです。
田Windows同士の接続
メインテーマからはずれますが一応やっておきます
Windows間ではsshの設定をまったくしていません。ユーザは同じユーザを設定しています。ディレクトリ構成も同じです。
suezoに至ってはopenSSHすら入れていません。でもつながります。
※suezoについてはあとでopenSSHを入れます。
Windowsではssh通信をしているのではなく、hydraサービスを使用しています。
では実行結果です。
Lakhesis機(Windows44号機)で実行
C:\Users\Mariel\PycharmProjects\MPI01>mpiexec -n 3 -host localhost python MPI_TEST01.py : -n 2 -host SUEZO python MPI_TEST01.py
From the New World: rank 0 of 5 running on Lakhesis (SELF rank 0 of 1) :I am The Beast that Shouted Love at the Heart of the World
From the New World: rank 1 of 5 running on Lakhesis (SELF rank 0 of 1)
From the New World: rank 2 of 5 running on Lakhesis (SELF rank 0 of 1)
From the New World: rank 3 of 5 running on suezo (SELF rank 0 of 1)
From the New World: rank 4 of 5 running on suezo (SELF rank 0 of 1)C:\Users\Mariel\PycharmProjects\MPI01>
suezo機で実行(Windows0号機)
C:\Users\mariel\PycharmProjects\MPI01>mpiexec -n 3 -host localhost python MPI_TEST01.py : -n 2 -host Lakhesis python MPI_TEST01.py
From the New World: rank 0 of 5 running on suezo (SELF rank 0 of 1) :I am The Beast that Shouted Love at the Heart of the World
From the New World: rank 1 of 5 running on suezo (SELF rank 0 of 1)
From the New World: rank 2 of 5 running on suezo (SELF rank 0 of 1)
From the New World: rank 3 of 5 running on Lakhesis (SELF rank 0 of 1)
From the New World: rank 4 of 5 running on Lakhesis (SELF rank 0 of 1)C:\Users\mariel\PycharmProjects\MPI01>
どちらもあっけないくらいにうまく動作しました。
ここからが本題です
🐧Lunix同士の接続
前回はsshの設定を書けなかったので、今回はそこからです。
(MPIをtcpで行う場合)Linuxの場合はsshで、ログインパスワードなしでダイレクトにリモートのコマンドを実行できる必要があります。アクセスされる側(サーバ)に自分(クライアント)の公開鍵を設定してもらい、許可を得る必要があります。
ubuntuとCentOSで若干の差異がありますので、それぞれ手順を書きます。ほぼ自分用の(またやる時のための)🖊メモです。
接続される側をサーバとして記載します。
なお、初期インストールされた標準の状態であるとしてやってみます。(汎用手順ではなく、やってみた例です)
ubuntu編
管理系のソフトがあまりはいっていないのでインストールします。
$ sudo apt install net-tools
/etc/hosts :ファイルに自分と対象のipアドレスを編集設定します。(ip4でやってみます)
※本格的に多数やるにはhostsファイルに書かずにnameサーバ(仮想でも可)だけに設定しましょう。
$ sudo ufw default ALLOW :FileWall全オフ(MPIはインターネット接続してない安全なローカル領域での動作が前提:相手側もやっておく)
$ ssh Atropos :とりあえずつないでみる(例 自ubuntu -> CentOS:CentOSが相手なら比較的すんなり接続できるがエラー出ても気にしない:初回はFingerPrintの保存が必要):接続確認してexitする
$ sudo apt install openssh-server :他マシンからのssh接続のための設定 ubuntuは標準ならsshサーバはインストールされていないのでインストール(OSインストール時に指定してインストール済なら不要)
$ ssh -V :いちおうバージョン確認します。
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020
$ sudo systemctl start ssh :デーモンを起動します。
※このあたりまで他のマシンもやっておくといいと思います。
[他マシン]$ ssh Klotho :たとえばCentOS -> 自ubuntu :初回はFingerPrintの保存が必要:fingerprintの保存確認がある。パスワードありで接続確認してexitする
:他マシンで公開鍵生成(一般ユーザで実行のこと)
mariel@Atropos ~]$ cd .ssh
[mariel@Atropos .ssh]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mariel/.ssh/id_rsa): :そのまま改行
Enter passphrase (empty for no passphrase): :そのまま改行
Enter same passphrase again: :そのまま改行
Your identification has been saved in /home/mariel/.ssh/id_rsa.
Your public key has been saved in /home/mariel/.ssh/id_rsa.pub.
...以下略
作成されたid_rsa.pub (公開鍵)の内容をサーバ側(自ubuntuの~/.ssh/authorized_keysに複写(なければファイル作成あればそれに追記):今回はVMWareで動作させているので、エディタでコピペした
ubuntuの自ユーザで実行
$ cd ~/.ssh
$ chmod 600 authorized_keys :重要:権限の設定を間違うと接続しない
root権限で以下のファイルを編集
/etc/ssh/sshd_config :編集
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
AuthorizedKeysFile .ssh/authorized_keys :追加#PermitRootLogin prohibit-password
PermitRootLogin no :追加#PasswordAuthentication yes
PasswordAuthentication no :追加#PermitEmptyPasswords no
PermitEmptyPasswords no :追加
$ sudo /etc/init.d/ssh restart :sshデーモンを再起動
[他マシン] $ ssh ubuntuホスト名 :sshでパスワードなし接続確認し exitで抜ける
[他マシン] $ ssh ubuntuホスト名 ls :ubuntuのディレクトリ一覧が出ればOK(パスワードなど聞いてきたらNG)
うう長い。。。
Cent OS編
デフォルトでsshサーバがはいっていると思います。CentOSの操作はsu でrootに切り替えてやったほうがよいかも?
# systemctl disable nftables :FileWall全オフ(MPIはインターネット接続してない安全なローカル領域での動作が前提:相手側もやっておく)
# systemctl stop firewalld :FileWall全オフ(ISSUE CODE:[ Maple_syrup_cookie_01 ]によりこの項追加)
# systemctl disable firewalld :FileWall全オフ(ISSUE CODE:[ Maple_syrup_cookie_01 ]によりこの項追加)
# systemctl disable iptables :FileWall全オフ(ISSUE CODE:[ Maple_syrup_cookie_01 ]により念のため項追加:通常動作していないのでエラーメッセージ iptables.service does not exist. がでますが問題ありません)
# systemctl list-unit-files --type service :ファイアウォールのサービスが動作していないことを確認します。 (ISSUE CODE:[ Maple_syrup_cookie_01 ]によりこの項追加)
[他マシン]$ ssh Atropos :他マシンより、パスワード認証でssh接続できることを確認しexit
:他マシンで公開鍵生成
mariel@Klotho:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mariel/.ssh/id_rsa): :そのまま改行
Enter passphrase (empty for no passphrase): :そのまま改行
Enter same passphrase again: :そのまま改行
Your identification has been saved in /home/mariel/.ssh/id_rsa
Your public key has been saved in /home/mariel/.ssh/id_rsa.pub
CentOS側ではMIPテスト用ユーザ(例では mariel)で実施
作成されたid_rsa.pub (公開鍵)の内容をサーバ側(自CentOSの~/.ssh/authorized_keysに追加(なければファイル作成あればそれに追記):今回はVMWareで動作させているので、OS間でエディタのコピペをした
$ cd ~/.ssh
$ chmod 600 authorized_keys :重要:権限の設定を間違うと接続しない
$ su :ここからrootになって編集
/etc/ssh/sshd_config :編集
#PermitRootLogin yes
PermitRootLogin no :変更#PasswordAuthentication yes
PasswordAuthentication no :追加#PermitEmptyPasswords no
PermitEmptyPasswords no :追加
# systemctl restart sshd.service :sshデーモンを再起動
[他マシン] $ ssh CentOSホスト名 :sshでパスワードなし接続確認 exitで抜ける
[他マシン] $ ssh CentOSホスト名 ls :ubuntuのディレクトリ一覧が出ればOK(パスワードなどきいてきたらNG)
田Windows編
前回の記事のとおり、Windows間ではsshを使用せず、Linux-Windows間では(intelの最新版2019Updte7では)実装がないのでMPIが効かないのですが、いちおう「おまけ」でWindowsのssh(公開鍵認証)設定を載せておきます。(設定を追い込むと「はまる」ので基本標準で動作させます)
Window標準では sshサーバの機能はインストールされていないのでインストールします。(openSSHクライアントはWindows最新版ビルドではインストール済のようです)
田で右ボタンメニュー/アプリと機能/オプション機能/機能の追加/OpenSSHサーバ/インストール
ファイアウォールは(インターネット接続なし:実験用なので)全開けする(運用の場合はssdポートを特定通信先に開ける。)
C:\Windows\System32\drivers\etc\host を編集して(自ドレスと)相手アドレスを登録する。
管理者権限でWindows Power Shell を起動し、以下を実行
> sshd install
> Start-Service sshd
> Set-Service sshd -StartupType Automatic
📩接続する側としての設定
接続ユーザで
> cd .ssh
> ssh-keygen -t rsa
C:\Users\mariel\.ssh>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\mariel/.ssh/id_rsa): :そのまま改行
Enter passphrase (empty for no passphrase): :そのまま改行
Enter same passphrase again: :そのまま改行
Your identification has been saved in C:\Users\mariel/.ssh/id_rsa.
Your public key has been saved in C:\Users\mariel/.ssh/id_rsa.pub....
作成される 公開鍵 id_rsa.pub の内容をサーバ側の該当利用者の .ssh/authorized_key に追加
サーバ側のssdデーモンをリスタート(OSの種類により違う)
> ssh Atropos :リモート接続できるか確認後 exit
> ssh Atropos ls :リモート側のコマンドを実行確認
📬接続される側としての設定
これがさらに面倒:わたくしはクライアント機ではWindowsユーザは必ずAdmistratorsグループ権限で使用するので、その前提の手順です。
Administratorsグループのみ、公開鍵の保存場所が違うのでそこに通信元の公開鍵を登録
%ProgramData%\ssh\administrators_authorized_keys :管理者権限でエディタを起動し、相手の公開鍵を登録する(ファイルがない場合は新規作成する)
またこのファイルについて継承の無効化を行ったあと、Authinticated Usersへの許可を削除する。ファイルの所有者であるSYSTEMのアクセス権を 「読み取りと実行」に変更する。※Linuxと同様にアクセス権をが600相当にすべきだが、「読み取り」と「書き込み」の組み合わせはWindowsだと「特殊」扱いになるので、「読み取りと実行」とした。SYSTEM権限でこのファイルを編集することはないので。。。Administratorsのほうはフルコントロールで構わない。わかりにくすぎ。。。
%ProgramData%\ssh\sshd_config :同じく管理者権限のエディタで編集
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PasswordAuthentication no :追加
#PermitEmptyPasswords no
PermitEmptyPasswords no :追加
管理者権限でWindows Power Shell を起動し、以下を実行 サービス画面GUIから行ってもOK
PS> ReStart-Service sshd
相手クライアントから接続を確認
$ ssh suezo
$ ssh suezo dir
めだたくAtropos と suezo の ssd交流ができました。(MPI交流ではないよ)
Linuxに話をもどしてMPIの分散処理を実行してみましょう
(上記例とはホスト名を変えています)
NODE A:ubuntu (Klotho) -> NODE A:ubuntu (localhost) & NODE B:CentOS(Atropos)
(base) mariel@Klotho:~/PycharmProjects/MPI01$ mpiexec -n 3 -host localhost python MPI_TEST01.py : -n 2 -host Atropos python MPI_TEST01.py
From the New World: rank 0 of 5 running on Klotho (SELF rank 0 of 1) :I am The Beast that Shouted Love at the Heart of the World
From the New World: rank 1 of 5 running on Klotho (SELF rank 0 of 1)
From the New World: rank 2 of 5 running on Klotho (SELF rank 0 of 1)
From the New World: rank 3 of 5 running on Atropos (SELF rank 0 of 1)
From the New World: rank 4 of 5 running on Atropos (SELF rank 0 of 1)
うまくいきました。8888
NODE A:CentOS(Atropos) -> NODE A:CentOS(localhost) & NODE B:ubuntu(Klotho)
[mariel@Atropos ~]$ mpiexec -n 3 python MPI_TEST01.py : -n 2 -host Klotho python MPI_TEST01.py
[mpiexec@Atropos] check_exit_codes (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:117): unable to run bstrap_proxy on Klotho (pid 11927, exit code 768)
[mpiexec@Atropos] poll_for_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:159): check exit codes error
[mpiexec@Atropos] HYD_dmx_poll_wait_for_proxy_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:212): poll for event error
[mpiexec@Atropos] HYD_bstrap_setup (../../../../../src/pm/i_hydra/libhydra/bstrap/src/intel/i_hydra_bstrap.c:770): error waiting for event
[mpiexec@Atropos] main (../../../../../src/pm/i_hydra/mpiexec/mpiexec.c:1956): error setting up the boostrap proxies
あら、Atroposさん Klothoから嫌われた?結構ボリューム書いて疲れたので、調査はまた今度ということで。
(CentOSからintelMPIできない issue として発行:受理:本イシューコード(ISSUE CODE:)を「柿の種」*3[Maple_syrup_cookie_01]とする:Statusを調査中に変更->Solved&Closed)
MPIの情報を求めておいでになった貴方。お役に立つ情報ありました?どうもすいません(P^o^)
ではまた。
今日の格言
「自らを省みることこそ、成長への王道なり。」魂は100までだが、3カ月あれば人は化けられる。
あ~Windowsの「より道情報」、別ページにするべきだった~
よみにく~。自分用の記録とはいえ。これはちょっとないなぁ。
(予告なく、エラーfixのため記事内容を改変します。コマンド・応答のフォントも一部調整中です。ページの標準フォントを選択したクーにほのかな👆を感じます。)