Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

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

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/02/27 21:22

返信
返信: 43

2018/04/18 15:58 ni_ki への返信

> 今、気付きましたがお書きの状態はタイムアウトによるものですね。


いえ違います。しかしながら大文字で書けば良いだけなので気にする必要はないのでしょう。また、"set timeout 1"だと少ないかもしれません(このサンプルでは"total 0"のみの出力で終わることがありました)

ユーザがアップロードしたファイル

タイムアウトの場合にはこんな感じになります。

ユーザがアップロードしたファイル

私もタイムアウトの挙動を分かっていなかったので、混乱させてしまって申し訳ありませんでした。

2018/04/15 20:02 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 への返信

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


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

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

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

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

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

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

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

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

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

運用編です。

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

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

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


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

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

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

ni_ki による書き込み:


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

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

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

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

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

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

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

2018/03/03 21:19 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/07 20:27 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:39 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/09 22:57 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 23:02 ni_ki への返信

手が滑って入力してしまいました。

どうやら直接先のssh コマンドを実行するアプリケーションを指定すると動きません。なので、ssh を行うアプリケーションを起動するアプリケーションを作成してそちらをOMRON のユーティリティから呼び出します。

また何故か状況によってssh のキーだったかの作成を問い合わせてくることがわかりました。その際にはyes を入力する必要があります。それに対応するために作成したのが下記です。

--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 1
tell application "System Events"
keystroke "yes"
keystroke return
end tell
activate
delay 10
tell application "System Events"
key code 102
keystroke NASPass
keystroke return
end tell
activate
delay 10
do script lsComma in front window
activate
delay 10
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/09 23:11 ni_ki への返信

連書き失礼します。ここのエディタの都合で、小分けにしないと書きにくいためです。

それで、先のスクリプトですがssh コマンドはパスワードを間違っても3 回聞いてくることを利用しております。yes の入力が不要でも二度目のパスワード問い合わせでssh に成功します。ただしパスワードが違う場合に再度パスワードを確認してくるまで数秒かかるようなのでdelay 10 を入れて時間をかせいでいます。



それと本日、13 時前にUPS とMac の通信が切れておりました。切れると自動で復帰しないので毎日夜中にMac を再起動して通信切れに対応していましたが、それでも切れることがあるようです。これは運に任せるしかなさそうです。更にOMRON ユーティリティの設定と作成して保存しておいたスクリプトも消えておりました。原因は不明です。Mac の再起動に10 分近くかかった症状も確認されたのでOMRON とは無関係な可能性もあります。

2018/03/10 22:27 hohokihai への返信

hohokihai さんへ

申し訳ありません。expect コマンドを諸々勘違いしておりました。

それ以外にもOMRON のユーティリティでできないと思っていた、シェルスクリプトの呼び出しが昨日の探索でできるらしいことがわかったので、expect コマンドの探索をして見たいと思います。

ちらりと試したらspawn で躓いてしまいました。私のことですから恐らく、凄まじく幼稚なところで躓いていると思いますので、水深で例えるなら潮干狩りくらいの深さにたどり着けたら、そこら辺について書かせていただきたいと思います。

2018/03/10 22:37 ni_ki への返信

諸般の都合で連書き失礼いたします。

以前にUPS とMac の間の通信が不定期に切れる件を記載いたしました。その対処は今までMac をスケジュール機能で再起動することでした。発生確率が連続起動で一週間に一回くらいと思っていたので、今まではそれで良かったのですが状況によっては、24 時間以内でも発生することがわかりました。

それで一晩たち「もしかしてUPS 側に対処法があるかも」と思い至り、探して見たところ対処機能がありました。

どうやらUPS とMac 間の「通信エラー」の時に動作するようにスクリプトが設定できるようです。

その機能を使ってUPS と通信エラーが起きたらMac をReboot するスクリプトを実行するようにしました。

ただし、設定後にまだ「通信エラー」が起きていないので実戦で動くかは不明です。ここ数日の経験からは動くはずですが。

Mac とNAS とUPS と

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。