« どちらがお得? | トップページ | 見かけない »

2016年1月13日 (水)

WindowsからLinuxをクリックだけで終了させる

基本は曇り空の一日。

寒いけれど、冬っぽく感じないのは僕だけ?

派閥争いってなんかみっともないね。

あそこの事務所を辞めた人達は仕事を干されるらしいけれど、それなりに人気のある彼らは果たしてどうなるのだろう?

本当に干されるのか?

もし、彼らを取るメディアがあれば、あの事務所は傾くことになるだろうね。

いつまでもああいう状態が続くとは思わない。

それをうとましく思っているメディアは一杯あるだろうし。

ほんのちょっとしたほころびから崩れていく。

今後の動向から目が離せない?!

さて、PCネタ。

Vortexboxを終了させるのに、いちいち端末の前に行くのが面倒。

いや、大した距離ではない。ほんの数m先。

ただ、少し障害物があるので、出来れば動きたくない。
また、今は冬だし余計に動きたくない。(苦笑)

なんとかして、Windowsから簡単に終了させられないかな、と考えていた。

いちいちSSHのソフトを起動してshutdownコマンドを打つのも面倒。

調べてみたら、やはり出来るんだねぇ。

調べていた時は、バッチファイルやVB Scriptを作ってみたけれど、最終的にはあっけないやり方だった。
一体この試行錯誤の時間は何だったんだ?っていうくらい。(苦笑)

でも、バッチファイルやVB Scriptのことがわかったので、それはそれでよし。

ここでは、全て書き残しておこうと思う。

まず、用意するもの。

PuTTY

・終了コマンドを記述したスクリプトファイル

PuTTYは、SSHで接続することが出来るフリーソフト。

Windowsには標準でSSHは入っていない。

でも、調べてみると、どうやらMicrosoftの方で、SSHのプログラムを準備しているよう。

OpenSSH for Windowsというもの。

まだ正式ではないようだけれど。

面倒くさそうなので、やはりPuTTYの方が手っ取り早い。

その中にある、PLINK.EXEというファイルを使う。

GUIの方は、PUTTY.EXE。

PLINK.EXEは、コマンドラインで使用するプログラム。
一瞬Windowが出るけれど、PUTTY.EXEも同じことが出来る。

次に、終了コマンドを記述したスクリプトファイルの作成。

#!/bin/bash

/usr/sbin/shutdown now

を記述したファイルを作成しておく。

念のため、UTF-8、BOM無し、改行コードはLF(UNIXのみ)にしておいた。

リブートなら、shutdown -r nowかrebootにすればよい。

Linuxの種類によっては、コマンドファイルの場所が違うかもしれないので、whereisコマンドで調べると良いでしょう。

ここまで出来たら、次は実作業。

【ショートカットの作成】

一番簡単なやり方。

PLINK.EXEのショートカットを作成。

それを右クリックし、プロパティを開く。

引数として、

root@IPアドレス -pw rootのパスワード shutdown now

を記述。

IPアドレスとrootのパスワードは、それぞれで。

たったこれだけ!上記設定ファイルは不要。

リブートの場合は、shutdown -r nowにすればよい。

これをダブルクリックすれば、リモートのLinuxは終了/リブート出来る。

こんなにも簡単なものだったとは・・・(泣)

【バッチファイルの作成】

@echo off

c:

cd "PLINK.EXEのあるパス"

start /b PLINK.EXE -ssh -2 root@IPアドレス -pw rootのパスワード -m 終了させるスクリプトファイルのフルパスとファイル名

exit

上記のものをコピーし、必要な箇所を書き換え、拡張子batで保存する。

c:にしているところは、インストール先のドライブなので、それを指定。

startというコマンドは、次に指定しているプログラムを裏で動かすコマンド。

Linuxで言うところの「コマンド名 &」の「&」と同じ役割。

最初、PLINK.EXEの前に、パスを書いていたけれど、きちんと動いてくれないので、仕方なく前処理として、cdコマンドを使ってPLINK.EXEの場所まで移動している。

""で囲えば、パスの中にスペースがあっても問題なし。

但し、スクリプトファイルのフルパスのところに関しては注意事項があるので、後述。

例:

start /b PLINK.EXE -ssh -2 root@192.168.0.100 -pw rootpasswd -m c:\aaa\shtdwn.sh

【VB Scriptの作成】

Set ws = CreateObject("Wscript.Shell")

Dim sshexe
Dim usrname
Dim passwd
Dim shscript

sshexe = """PLINK.EXEのあるパス\PLINK.EXE"""
usrname = "root@IPアドレス"
passwd = "rootのパスワード"
shscript = "終了させるスクリプトファイルのフルパスとファイル名"

sshexe = sshexe & " -ssh -2 " & usrname & " -pw " & passwd & " -m " & shscript

ws.run "cmd /c " & sshexe, vbhide

以上。

変数はお好きなものをどうぞ。

sshexeの値で、「"""」ダブルコーテーションが3個並んでいる。

これは、パス名にスペースが入っている場合、「"」で囲うのを有効にするために、「""」という感じで2個にしている。「\"」のようなもの。

次に、終了させるスクリプトファイルのフルパスとファイル名の注意事項。

バッチファイルもVB Scriptも同じ動きだったのだけれど、どういう訳か、「"」で囲うのがうまくいかなかった。

DOSプロンプト上で直にコマンドを打った時は問題なかったのに。

そういうことで、もし、フルパスにスペースがなければ、「"」で囲わなくてもOK。そのままでよい。

でも、スペースが入っている場合は、旧式のDOSファイル名8.3形式で記述すると良い。

旧式のDOSファイル名8.3形式の見方。

DOSプロンプトを開き、表示したいフォルダまで移動し、「dir /x」を実行すれば良い。

「Program Files」だったら、こういう感じになる。

Program Files → PROGRA~1

右側の8文字の方を使うのである。

一番最後にあるsshexeの中に入れる値の中にある各オプションはここでは割愛。

変数値の例:

sshexe = """C:\Program Files\PuTTY\PLINK.EXE"""
usrname = "root@192.168.0.100"
passwd = "rootpasswd"
shscript = "C:\PROGRA~1\PuTTY\shtdwn.sh"

と、色々と試行錯誤した結果、こういう形になったのである。

もっとスマートなやり方があるかもしれないけれど、結局は一番簡単な、一番最初のショートカットになってしまっている。(笑)

でも、バッチファイル、VB Scriptとも、応用性はあると思う。

Linux側で実行したいプログラムをシェルスクリプトとして記述しておき、ファイル名を変えるだけだから。

あまり気にしていなかったけれど、一番最初に実行する時、信頼関係がどうのというウインドウが出てくるかもしれない。
その時はYesをクリックし、受け入れておけば良い。
2回目以降からは出てこない。

ということで、これでVortexboxを終了させるためだけに動かなくてすむようになった!

これで、この端末がWake On LANに対応していれば、全く動かずに起動・終了が出来るのになぁ・・・

|

« どちらがお得? | トップページ | 見かけない »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« どちらがお得? | トップページ | 見かけない »