つぶやき
技術系や雑感等は再編集して本文の記事にする事を前提としているので、こっちにLinkを張らないでください。
WebPageのSSL化
本サイトを含め、個人的に管理しているサイトがそこそこあるわけだが、昨今の様々な要請からSSL化を進めることにした。 (そういうわけでLet's Encryptと格闘していたのだが)
その結果、WordPressとRedmine系を除いて、概ねLet's Encryptの証明書を利用したSSL化が一通り区切りがついた。
まぁ、証明書が入手できさえすれば、SSL化は簡単ではあるけど。
server {
listen xxx.xxx.xxx.xxx:80;
server_name www.seirios.org;
return 301 https://$host$request_uri;
}
server {
listen xxx.xxx.xxx.xxx:443 ssl;
server_name www.seirios.org;
ssl on;
...
}
結構重要なこととして、コンテンツ側に記載されているLink等のうち、自らを示しているURLを一通り確認すること。 これをしないと、結局一部SSL化されないURLが残るので、面倒なことになりかねない。
shell scriptとwhileとreadとssh
大変にハマったのでメモ書き。今日はもういいや。
shell scriptにおいて、ファイルから1行ずつ読み込んで処理をするような場合、以下のようにかける。
while read line; do echo ${line} done < file
ところが、この手を使ってsshを実行すると、なぜか最初の行しか実行されない
while read line; do ssh xxx.xxx.xxx.xxx ${line} # XXX 期待通りに動かない done < file
原因はsshコマンド実行に伴う標準入力の切替と考えられる。 sshコマンドを実行すると、ローカルホストのstdinからの入力を終了し、sshで指定したリモートホストのstdinからの入力受付を開始する。 従って、ローカルホストのファイルの読込みを終了させた上でsshコマンドを実行し、再びreadコマンドを実行しようとしていると考えられる。もちろん、この時点で既にファイルがcloseされている為、whileが終了してしまう。
対策は、sshに-nオプションをつけること。これよって、sshコマンドのstdin切り替えを禁止することが出来る。
この原因がちっともわからず、数時間を無駄にしてしまった。
while read line; do ssh -n xxx.xxx.xxx.xxx ${line} # これで/dev/nullがsshのstdinにつながる done < file
このほかに、for文で for line in `cat file` で代用する手も考えられるが、これは、行にスペースがある場合、$lineに代入される値が1行まるごとではなく、スペースまでの部分になるので、ここにも明確な罠があると考えられる。これを回避するにはIFSを変えれば良いのだから、
IFS=$'\n' # 区切り文字を" "から"\n"に変える for line in `cat file`; do # while readの代わりにcatで読み込ませる ssh -n xxx.xxx.xxx.xxx ${line} done
あと、whileはちょっと特殊な制御文で、場合によってはwhile内で変数設定しているはずなのにloopをでてくると変数が空のようなことが起こる。 これは、Whileと他のコマンドを組み合わせた場合、組み合わせ方次第で処理がsubshellがわで処理されてしまう事が原因である。 shellでpipelineを用いて実行した処理は、subshellで処理される。while loopの内部でpipelineを利用すると、whileブロック全体がsubshellで処理されるため、whileブロックの内部と外部で変数の共有が出来ない。 このような場合、whileに対して出力をredirectしてやることで解決できる。
while read line; do OUT=`echo ${line} | sed 's/test/test2'` done < $1 echo ${OUT}
なお、/bin/shの引数に -v や -x をつけると、デバッグに大変に役立つ
LDAP管理ソフトを探す
以前、(PHP LDAP Admin)のつぶやきを書いたが、その後状況が変わっていないかちょっと調べてみる。
- Admin4 どうやら、細々メンテナンスはされている模様。2年に1回くらいUpdateされているように見える
- Pythonなので、割と何でも動かせそう
- The Apache Directory Studio(TM) でかい。Java…
- Fusion Directory FreeBSDでも動かしている人はいるらしい。画面からでは理解しにくい…
- PHP+perl+いろいろ。ちょっと面倒そうな感じ
- LDAP Account Manager 悪くなさそうなんだけど、いまいち。商用版がある
- Accountの管理だけならおそらくこれでいい。FreeBSDのportsがある
- PHP LDAP Admin もう終わってるとおもう。2013年以降更新なし
- Self Service Password これは、ユーザーに公開するパスワード変更用のI/Fとしては良さそう
- FreeBSDのportsにある
こうしてみると、LDAP管理系のソフトが本当にない。Java使えばいいんだろうけど、管理がなぁ… ActiveDirectoryに行く気持ちがわかってきた…
古いの承知でPHP LDAP Admin使うのか?…Admin4かなぁ…
