2013年9月9日月曜日

Windows BacthからUnix/Linxを制御する方法

Puttyに含まれるplinkを使って外部Unix/Linuxサーバーでコマンドを実行する。
事前に公開鍵をサーバー上の~/.sshにいておく。
ダイレクトログインを禁止されていたらplinkでリモート実行出来ないかも知れません。

setlocal
set USER=server_username
set SERVER=server
rem 実行ユーザーが誰でも読める場所に秘密鍵を置く
set RSA_FILE=C:\Windows\SysWOW64\config\systemprofile/.ssh/id_rsa.ppk
set FTP_PATH=/home/hoge
set FTP_FILENAME=serverfile.txt
set FTP_FILE=%FTP_PATH%/%FTP_FILENAME%
set LOCAL_PATH=C:\path\to\file
set LOCAL_FILENAME=localfile.txt
set LOCAL_FILE=%LOCAL_PATH%\%LOCAL_FILENAME%

rem サーバーへファイルを置く。エラーが起きれば中断
rem 接続に必要な情報は全て明記。 実行ユーザーがセッションファイルを読み込めないかも知れない。
pscp -agent -batch -i %RSA_FILE% %LOCAL_FILE% %USER%@%SERVER%:%FTP_PATH% || exit 1



rem サーバーからファイルを取得。エラーが起きれば中断
rem 接続に必要な情報は全て明記。 実行ユーザーがセッションファイルを読み込めないかも知れない。
pscp -agent -batch -i %RSA_FILE%  %USER%@%SERVER%:%FTP_FILE% %LOCAL_PATH% || exit 1



rem サーバー上のスクリプトを実行
set MESSAGE=Success!
set SERVER_COMMAND=echo %MESSAGE%

rem 接続に必要な情報は全て明記。 実行ユーザーがセッションファイルを読み込めないかも知れない。エラーが起きれば中断
set COMMAND=plink -batch -ssh -agent -i %RSA_FILE% %USER%@%SERVER% %SERVER_COMMAND% || exit 1

rem 出力結果を%RESULTS%に入れる
for /f "delims=" %%i in ('%COMMAND%') do @set RESULTS=%%i

rem 出力結果を表示
echo %RESULTS%

rem Jenkinsで失敗と判断する為にShellで正常終了するとSuccess!と出力。
rem 正常終了の出力でない場合にエラーコードを設定
if not %RESULTS%==Success! exit 1

0 件のコメント:

コメントを投稿