お知らせ:


 ◇ YouTube Apple Japan チャンネル で有用なヒントや使い方を配信中です。
 ◇ iOS 向け Apple サポート App のバージョン 2.4.1 が公開されました。

お知らせ: macOS Mojave にアップグレードする


macOS Mojave には、ダークモードやスタックなどの新機能や、3 つの新しい内蔵 App が新たに加わり、クリックするたびにさらに多くのことができるようになります。 macOS Mojave へのアップグレード方法はこちら >

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

質問:

質問: Mac とNAS とUPS と

質問兼、情報提供です。情報はネタ程度でお読み下さい。

まず使用機器は下記です。

Mac macOS High Sierra 10.13.3

NAS Synology DS215j

UPS OMRON BN50T PowerAttendant Lite 1.11(最新版は1.12 のようです。)

UPS Mac USB 接続


それでここで質問です。

シェルスクリプトでssh shutdown コマンドを無人で実行する場合、管理者パスワードが平分になるようです。これを暗号化する方法はないでしょうか。

可能であればMac に純正でないアプリケーション等をインストールせずに行いたいと考えます。また認証鍵で行う方法が有るようですが、これも避けパスワード方式だとありがたいです。

手っ取り早く思いついたのはAutomator でアプリケーションにしてしまえばテキストファイルではなくなります。が、Hex Editor 系のアプリケーションで覗くとパスワードとは判らないかもしれないですが、やはりテキストとして内部に存在します。

なおシェルスクリプトの実行はUPS メーカの提供するユーティリティで停電時にコマンドラインを実効する能力があるようですので、それを使おうと思っております。未検証ですがシェルスクリプトをアプリケーション化した場合はopen コマンドでアプリケーションを実行出来るのではと推測しています。(アプリケーションを直接実行する機能もある気配です。)


以下、情報(ネタ)です。不要な人は読み飛ばして下さい。

Apple 製の機器でない話なのでサラッと書きます。PowerAttendant Lite というユーティリティですが先にも書いた通りUPS との連携で停電時などに接続された機器をシステム終了する機能があります。その機能の中にLAN 接続の機器にssh でログインしshutdown コマンドを実行する能力があります。

今回、この設定に数日かかりました。探し方が悪い可能性がありますがネットを検索してもイマイチでした。成功した設定が下記です。一部割愛して書きます。


コマンドタイプ: SSH V2

OS:Linux

文字コード:macintosh


下記4 項目はNAS に設定した物を設定しました。ただし一般も管理者も管理者のID とパスワードを設定しました。別に一般である必要もないようなので。

ログイン一般ユーザID

ログイン一般パスワード

ログイン管理者ユーザID

ログイン管理者パスワード


スクリプトファイルの内容はサンプルを参考に下記。

rcv=$

snd=su $u2

rcv=word:

snd=$p2

rcv=$

snd=sudo shutdown -h now

rcv=word:

snd=$p2

rcv=$

snd=exit

上から4 行はいらない気がしまが、とりあえず動くので、このままにしています。shutdown コマンドを工夫すれば停電復帰後に自動で起動することもできるとネットに出ていましたが、自動起動はしなくてよいので単純に落しています。

数日悩んだのが「文字コード」です。NAS の文字コードだと思い込みデフォルトのUTF-8 にしていたため動きませんでした。


長くなったので、とりあえずここで一旦、設定編と言う事で書込みます。

Apple Pencil, OS X Yosemite (10.10.5), null

投稿日

返信
スレッドに付いたマーク 参考になった

2018/04/15 20:02 ni_ki への返信 ni_ki への返信

AppleScriptに移行してしまったようで、もしかしたら見当違いかもしれませんが...


securityコマンドで、キーチェンにアプリケーションパスワードとして追加・表示・削除することができます。

security add-generic-password -a account_name -s service_name -w secret_password security find-generic-password -a account_name -s service_name -w security delete-generic-password -a account_name -s service_name

事前に"security add-generic-password"でマシンに登録しておき、次のスクリプトを叩けばパスワードを書かなくて済みます。

#!/bin/bash -eu PASSWORD=$( security find-generic-password -a account_name -s service_name -w ) expect <<EOD set timeout 1 spawn sudo shutdown -r now expect "Password:" send "$PASSWORD\n" expect eof EOD exit 0

しかし、account_nameかservice_nameかが分かってしまえば(securityコマンドを使える人なら)誰でもsecret_passwordを見れてしまうので、管理者パスワードを登録するのは無謀ですよね...。


ところで、「無停電電源装置(UPS)でシステム終了するまでの時間を設定する」ではダメなのですか?

https://support.apple.com/kb/PH25520?viewlocale=ja_JP&locale=ja_JP

ディスカッションを部分的に表示しています

返信をすべて表示

ページコンテンツが読み込まれました

2018/02/28 00:27 ni_ki への返信 ni_ki への返信

> 管理者パスワードが平分になる


スクリプトの中で平文になってるだけで、sshですから、もちろん通信の最中は暗号化されてます。

パスワードを平文で書くのが嫌なら、認証鍵を使うしかないです。

でも、いろいろ試してますが、うちでもhigh sierraのssh の鍵認証がうまくいってませんけど。あちこちのウェブに書いてあることを試してるのだけど、ダメですね、、、これがうまくいくなら、パスワードなしでログインできるので、大変便利です。

2018/02/28 00:27

返信 参考になった

2018/02/28 10:01 ni_ki への返信 ni_ki への返信

ただ目的がUPSによるサーバ管理となると本当に認証鍵によるssh接続が必要かどうか微妙と思います。

普通の家庭やSOHOなどのUPSの目的は瞬断でサーバが落ちるのを防いで安定な運用を確保するというのが主な目的と思いますが、それだと、UPSに連動させてサーバをシャットダウンするというようなこともほとんど必要ないと思います。瞬断程度なら、UPSを動かしておくだけでカバーできますし、もっと長時間の停電なら、あらかじめわかってることが殆どですので、わざわざUPSの自動断に頼らなくても、(必要なら)リモートでシャットダウンするだけで良いからです、と思うのですがいかがでしょう。

雷などの不測の事態による停電が多いような地域だとそういうわけにもいかないかもしれませんけど。

自分が以前管理に関係してたサーバは、SOHOよりは大きな規模でしたが、UPSの自動断に頼らざるを得ないという事象は全くありませんでした。

2018/02/28 10:01

返信 参考になった

2018/02/28 10:37 はに への返信 はに への返信

私も同じような考えだったのですが案外、停電がある地域でして。多くは瞬断又は数分ですが。

またNAS の方が認証鍵がダメな気がしております。

2018/02/28 10:37

返信 参考になった

2018/02/28 20:16 ni_ki への返信 ni_ki への返信

運用編です。

実際に運用してみたら停電時にLAN からはシャットダウンできません。

最初気づかなかったのですが、LAN が停電と同時に止まります。ルータとハブが商用電源直結ですから。

大***な話です。無知、勘違い、勉強不足のオンパレードです。


それで考え出したのがSynology DS215j のUSB 端子に無線LAN のアダプタをつなぐ方法です。私の使うこのNAS にはその機能がありました。この機能のおかげで普段は有線LAN で使い停電時のシャットダウンは無線LAN からと言うことができます。一旦は、これで問題解決と思ったのですが。

このNAS はブラウザから設定ができるのですが、どうやらログインしていない又は既にサインアウト済みでも、ある程度の時間、LAN からのシャットダウンを拒否するようです。これを回避するにはMac のターミナルからssh でログインしてコマンドを行使するのが有効なようです。

2018/02/28 20:16

返信 参考になった

2018/02/28 22:14 ni_ki への返信 ni_ki への返信

NASって、小型のものの場合、電源オフの時はhddの状態に関係なくオフになっちゃうので、電源切れる場合でもhdd壊れないようにある程度対策してないのかな?

ルータやハブはいきなり電源断でも壊れることはないですね。ランは不通にはなりますけど。

2018/02/28 22:14

返信 参考になった

2018/03/01 11:54 はに への返信 はに への返信

対策しているのではないかと予想していますが確認のしようがない気がしております。

また停電などで電源が落ちたことは次の起動時にメールで通知してきますが、First Aid 的な動作をどの程度やっているかは不明です。

2018/03/01 11:54

返信 参考になった

2018/03/01 11:58 ni_ki への返信 ni_ki への返信

ni_ki による書き込み:


このNAS はブラウザから設定ができるのですが、どうやらログインしていない又は既にサインアウト済みでも、ある程度の時間、LAN からのシャットダウンを拒否するようです。

説明が曖昧でした。シャットダウンを拒否と書きましたがこれはOMRON のユーティリティからのshutdown コマンドを拒否するという意味です。ssh でログインは成功しますがシャットダウンはできません。

ターミナルから試すとできるので何故、OMRON 製からできないかは原因不明です。

2018/03/01 11:58

返信 参考になった

2018/03/01 21:32 ni_ki への返信 ni_ki への返信

諸々、書いきてきましたがどうやら私の能力ではシェルスクリプト(アプリケーション化したとしても、)で無人ログインしてシャットダウンにはたどり着けませんでした。

AppleScript のキーストロークのほうに、望みがあるようです。Mac からの直接実行は成功しました。

ただ一つ、立ちはだかったのがキーストロークを入力中、日本語入力に勝手に切り替わることです。複雑な検証はしていないですが例えば「now」と入力すると「のw」になったりするようです。macOS High Sierra のライブ変換とかが影響しているのかと感じますが、実際に何故かは不明です。

2018/03/01 21:32

返信 参考になった

2018/03/03 11:05 ni_ki への返信 ni_ki への返信

AppleScript 中で半角スペースを入力すると日本語変換するようです。どうやら日本語入力中のスペースキーを押したのと同じ動作になりようです。

直前にキーコードで英数キーを入力して回避できました。事前に英数入力になっていても変換する時があるのは謎です。

2018/03/03 11:05

返信 参考になった
スレッドに付いたマーク 参考になった

2018/04/15 20:02 ni_ki への返信 ni_ki への返信

AppleScriptに移行してしまったようで、もしかしたら見当違いかもしれませんが...


securityコマンドで、キーチェンにアプリケーションパスワードとして追加・表示・削除することができます。

security add-generic-password -a account_name -s service_name -w secret_password security find-generic-password -a account_name -s service_name -w security delete-generic-password -a account_name -s service_name

事前に"security add-generic-password"でマシンに登録しておき、次のスクリプトを叩けばパスワードを書かなくて済みます。

#!/bin/bash -eu PASSWORD=$( security find-generic-password -a account_name -s service_name -w ) expect <<EOD set timeout 1 spawn sudo shutdown -r now expect "Password:" send "$PASSWORD\n" expect eof EOD exit 0

しかし、account_nameかservice_nameかが分かってしまえば(securityコマンドを使える人なら)誰でもsecret_passwordを見れてしまうので、管理者パスワードを登録するのは無謀ですよね...。


ところで、「無停電電源装置(UPS)でシステム終了するまでの時間を設定する」ではダメなのですか?

https://support.apple.com/kb/PH25520?viewlocale=ja_JP&locale=ja_JP

2018/04/15 20:02

返信 参考になった (1)

2018/03/03 21:19 hohokihai への返信 hohokihai への返信

ありがとうございます。

キーチェーンにそのようなコマンドがあったのですね。存じ上げませんでした。記憶させていただきます。


大変申し訳ありません。大事なことを書き込んでいたなかったことに気付きました。expect コマンドがNAS にないようでssh でログイン後、not found が返ってきました。

何か他に応用できないか考えたいと思います。

hohokihai さんによる書き込み:


>ところで、「無停電電源装置(UPS)でシステム終了するまでの時間を設定する」ではダメなのですか?


Mac の方はshutdown コマンドでもOMRON 製ユーティリティーでも、かなりの確率で落とせるので問題少ないのですがNAS の方が高確率でコケております。なのでMac から発するshutdown コマンドとOMRON 製UPS から発するshutdown コマンドで成功率を上げたいと考えております。ちなみに今の所8 回試して3 回コケました。内容は下記です。

以下、初回からの実験結果です。

コケ、成功、コケ、コケ、成功、成功、成功、成功

全部で8 回です。一回目は設定ミスでした。3,4 回目は直接の原因が不明です。ただ、どちらも実験直前(数分くらい。)にNAS の設定画面にSafari でログインしていました。

8 回目の実験はSafari から設定画面にログインしていましたが、正常にシャットダウンされました。

これで何が何やら不明になりした。

2018/03/03 21:19

返信 参考になった

2018/03/07 20:27 ni_ki への返信 ni_ki への返信

とりあえず下記のAppleScript となりました。


-- NAS のIP アドレス

set NASIP to "10.0.1.2"


-- NAS のユーザ名

set NASUser to "niki"


-- NAS で実行したいコマンド

set lsComma to "sudo ls -l"


-- NAS のユーザのパスワード

set NASPass to "apple"


-- ssh コマンドの合成

set sshComma to "ssh -l " & NASUser & " " & NASIP


tell application "Terminal"

delay 1

do script sshComma in front window


activate

delay 5


tell application "System Events"

key code 102

keystroke NASPass

keystroke return

end tell


activate

delay 1


do script lsComma in front window


tell application "System Events"

key code 102

keystroke NASPass

keystroke return


delay 2


key code 102

keystroke "exit"

keystroke return

end tell


delay 5


activate

delay 1

quit


end tell

2018/03/07 20:27

返信 参考になった

2018/03/07 20:39 ni_ki への返信 ni_ki への返信

AppleScript エディタからコピーペーストした、テキストエディットからの「標準テキスト」でのコピー& ペーストが、ここでおかしな表示をするので別で書き込ませていただきます。

素人が書いたスクリプトですから、何が起きるかは不明です。私のところでは、AppleScript としては動きました。

また上記は実験用のls -l コマンドを実行するスクリプトです。ssh でログイン後、sudo コマンド付きでls -l を実行します。NAS 上で管理者パスワードの入力ができるよう試すためにls コマンドに不要なsudo をつけております。

本番ではsudo shutdown -h を実行します。

たぶん他の人が使う場合は、上の方に書き込まれている変数4 個を自分の環境に合わせれば動くと思います。

ちなみにkey code 102(英数キーを押すのと同じらしい。) とdelay がそこら中に入っているのは念のためです。最後の方のexit とquit はしなくても良い気がしますが、OMRON のスクリプトサンプルが何故かexit しているのでつけてみました。quit は気まぐれにつけてみました。

2018/03/07 20:39

返信 参考になった

2018/03/09 22:57 ni_ki への返信 ni_ki への返信

実際にサーバにしているMac から動くかOMRON のユーティリティから試しました。勘違いしていましたが直接アプリケーションを起動するのではなく、シェルスクリプトでopen コマンド起動する方式でした。OMRON のサンプルを参考に下記な感じにしました。

rcv=$

snd=sudo open /Users/Shared/OMRON/PAL/1.0/[作ったアプリケーションを呼び出すアプリケーション]

rcv=$

snd=exit


[作ったアプリケーションを呼び出すアプリケーション]

ですが下記です。

tell application "作ったアプリケーション" to activate

2018/03/09 22:57

返信 参考になった
ユーザのユーザプロフィール: ni_ki

質問: Mac とNAS とUPS と