プロが教えるわが家の防犯対策術!

SSHでwindowsサーバに接続して、OSコマンドを自動実行してクライアントにアウトプットを取得したいと思っておりますがうまくコマンドが実行できません。
以下環境とやりたいことです。
<環境>
Windowsサーバ(ssh server): WindowsXP OpenSSHインストール済み
クライアント(ssh client): WindowsXP
※Windowsサーバとクライアントは公開鍵認証でパスワードなしでsshコマンドでクライアントからサーバにログインできるようになっています。

<やりたいこと>
クライアントからsshで定期的にWindowsサーバログインしてサーバ上のファイル情報を取得したいので、以下のようなコマンドとクライアントから定期実行しようと考えてます。
例:
ssh -i id_dsa username@server dir

しかし、sshで一度サーバにログインしてからだと普通どおりにコマンド実行できるのですが、sshでコマンドを渡す場合には、c:\windows\system32\command.comを記述する必要があるようで、実際には、
ssh -i id_dsa username@server c:/windows/system32/command.com dir のように指定しています。

ここからが質問です。
Q.このとき、dirコマンドの引数にファイルを指定しても、"ファイルが見つかりません"のエラーになってしまいます。
コマンド例:
ssh -i id_dsa username@server c:/windows/system32/command.com dir filename
出力例:
--------------------------------------------------
ドライブ C: のボリュームラベルは XXXXXX
ボリュームシリアル番号は XXXXX
ディレクトリは XXXXXX

ファイルが見つかりません.
---------------------------------------------------

SSHサーバがLinux/Unixの場合は特に問題なくコマンドが実行できたのですが、Windowsの場合にはどのようにコマンドを指定すればよいのでしょうか?
よろしくお願いします。

A 回答 (1件)

カレントディレクトリにファイルがないのでしょう。


dirコマンドは内部コマンドなので、command.comかcmd.exeの上で動作します。
SSHで接続した場合に、どこがカレントディレクトリになっているのか不明ですが……
一連の操作(カレントドライブ、カレントディレクトリの変更、dirコマンドの実行)をするbatファイルを作成して、
そのbatファイルをフルパスで指定してみる…というのはどうでしょうか?

# SSHでLinuxに接続したことはありますが、Windowsには接続したことないのでちょっとイメージが…

この回答への補足

回答ありがとうございました。まったく見当がつかずに困っていたのですが前進しました。

テストしているWindowsのOpenSSHではWindowsのsshサーバに接続した場合でもカレントディレクトリは接続したユーザのホームディレクトリになります。(実際には"HKEY_LOCAL_MACHINE\SOFTWARE\Cyguns Solutions\Cygwin\mount v2\/home"で指定されたディレクトリに作成される各ユーザディレクトリです。)
ここに教えて頂いたように"一連の操作(カレントドライブ、カレントディレクトリの変更、dirコマンドの実行)をするbatファイルを作成して、そのbatファイルをフルパスで指定してみる" という手順で動作いたしました。
<例>
ssh -i id_dsa user@sshsever "c:/windows/system32/cmd.exe /c c:/user/test.bat
※test.batの中にdirコマンドとファイル名を記述

しかし、sshクライアントから実行されるコマンドは変更される可能性があるため、本当はWindowsのsshサーバ上にはこのようなファイルを作成して予め配置しなくても実行できるようにしたいと考えています。

Windowsの制限であれば仕方ないのですが、なにかよい方法がございましたらご教授ください。

補足日時:2007/04/22 03:25
    • good
    • 0
この回答へのお礼

私のdirコマンドの引数でのファイルの指定方法に問題があったようです。
以下のようにdirコマンド後のファイル指定で\を3つ続けて\\\にしてみたところうまく動作しました。
<例>
C:\\\directory1\\\filename
sshで指定する際の特殊文字の解釈の問題だったようです。
最終的にはこのような指定になりました。
ssh -i id_dsa user@sshserver c:/windows/system32/cmd.exe /c dir c:\\\directory\\\filename

この方法でうまくいきそうですのでテストしてみます。
どうもありがとうございました。

お礼日時:2007/04/22 04:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!