web-dev-qa-db-ja.com

バッチでリモートSSHコマンドをスクリプト化する最良の方法(Windows)

Linuxでリモートsshコマンドを実行する必要があるバッチでスクリプトを作成しようとしています。画面に表示するか、ログに記録できるように、出力を返す必要があります。

PuTTY.exe -ssh user@Host -pw password -m command_runを試しましたが、画面に何も返されません。

誰もこれを前にやった?

22
leeman24

PuTTYの-mスイッチは、コマンドではなく、スクリプトファイルへのパスを引数として使用します

リファレンス: https://the.earth.li/~sgtatham/PuTTY/latest/htmldoc/Chapter3.html#using-cmdline-m

そのため、コマンド(command_run)をプレーンテキストファイル(たとえばc:\path\command.txt)に保存し、PuTTYに渡す必要があります。

PuTTY.exe -ssh user@Host -pw password -m c:\path\command.txt

ただし、Plink(PuTTYスイートのコマンドライン接続ツール)を使用する必要があることに注意してください。これはコンソールアプリケーションなので、出力をファイルにリダイレクトできます(PuTTYではできません)。

コマンドラインの構文は同じですが、出力リダイレクトが追加されます:

plink.exe -ssh user@Host -pw password -m c:\path\command.txt > output.txt

コマンドライン接続ツールPlinkの使用 を参照してください。

Plinkを使用すると、実際にコマンドラインでコマンドを直接提供できます。

plink.exe -ssh user@Host -pw password command > output.txt

同様の質問:
PuTTYを使用したWindowsからLinuxでの実行コマンドの自動化
バッチファイルからPlinkでコマンドを実行

37
Martin Prikryl

Bash on Ubuntu on Windowsを直接使用することもできます。例えば。、

bash -c "ssh -t user@computer 'cd /; Sudo my-command'"

以下のマーティン・プリクリルのコメント:

-tは、端末エミュレーションを有効にします。 Sudoのターミナルエミュレーションが必要かどうかは構成によって異なります(デフォルトでは必要ありませんが、多くのディストリビューションはデフォルトをオーバーライドします)。それどころか、他の多くのコマンドには端末エミュレーションが必要です。

2
Jon49

別のオプションとして、OpenSSH http://www.mls-software.com/opensshd.html をインストールしてから、単にssh user@Host -pw password -m command_run

編集: ser2687375 からの応答後、インストール時に、クライアントのみを選択します。これが完了すると、コマンドからSSHを開始できるはずです。

次に、次のようなsshバッチスクリプトを作成できます。

ECHO OFF
CLS
:MENU
ECHO.
ECHO ........................
ECHO SSH servers
ECHO ........................
ECHO.
ECHO 1 - Web Server 1
ECHO 2 - Web Server 2
ECHO E - EXIT
ECHO.

SET /P M=Type 1 - 2 then press ENTER:
IF %M%==1 GOTO WEB1
IF %M%==2 GOTO WEB2
IF %M%==E GOTO EOF

REM ------------------------------
REM SSH Server details
REM ------------------------------

:WEB1
CLS
call ssh [email protected]
cmd /k

:WEB2
CLS
call ssh [email protected]
cmd /k
1
campervancoder