Windowsからa linux Shellコマンドを(異なるファイル名で)頻繁に実行する必要があるシナリオがあります。 PuTTYとWinSCPを使用してこれを実行しています(ログイン名とパスワードが必要です)。ファイルは、WinSCPを介してLinuxマシンの事前定義フォルダーにコピーされ、コマンドがPuTTYから実行されます。プログラムを介してこれを自動化する方法はありますか。理想的には、Windowsからファイルを右クリックし、コマンドを発行してファイルをリモートマシンにコピーし、ファイル名を引数として定義済みコマンド(PuTTY内)を実行します。
自動ログインの一般的な方法にはセキュリティ上の問題がある可能性があります。最も簡単な方法の1つを以下に示します。
また、パーツについては、コマンドを実行しますPuTTY UIでは、Connection> SSH>にリモートコマンド用のフィールドがあります。
4.17 SSHパネル
SSHパネルでは、SSHセッションにのみ適用されるオプションを設定できます。
4.17.1サーバーで特定のコマンドを実行する
SSHでは、サーバーで一般的なシェルセッションを実行する必要はありません。代わりに、単一の特定のコマンド(メールユーザーエージェントなど)を実行することを選択できます。これを行うには、[リモートコマンド]ボックスにコマンドを入力します。 http://the.earth.li/~sgtatham/PuTTY/0.53/htmldoc/Chapter4.html
要するに、あなたの答えは以下のテキストと同じようになります。
PuTTY 通常には「plink」ユーティリティが付属しています。
これは基本的に、Windows .exeとして実装される「ssh」コマンドラインコマンドです。
PuTTYマニュアルの「コマンドラインツールplinkの使用」に詳しく説明されています。
次のようなコマンドをラップするだけです。
plink root@myserver /etc/backups/do-backup.sh
.batスクリプトで。
セミコロンなどの一般的なシェル構造を使用して、複数のコマンドを実行することもできます。例えば:
plink read@myhost ls -lrt /home/read/files;/etc/backups/do-backup.sh
TCLスクリプトを記述して、そのLinuxマシンへのSSHセッションを確立し、コマンドを自動的に発行できます。 http://wiki.tcl.tk/11542 で短いチュートリアルを確認してください。
セッションを開始するときに、PuTTYセッションを作成し、サーバーにスクリプトを自動ロードできます。
PuTTY -load "sessionName"
リモートコマンドで、リモートスクリプトをポイントします。
WinSCPを使用して、両方のタスク(アップロードとコマンドの実行)を実行できます。次のようなWinSCPスクリプトを使用します。
option batch abort
option confirm off
open your_session
put %1%
call script.sh
exit
call
コマンドのリファレンス:
https://winscp.net/eng/docs/scriptcommand_call
%1%
構文のリファレンス:
https://winscp.net/eng/docs/scripting#syntax
その後、次のようなスクリプトを実行できます。
winscp.exe /console /script=script_path\upload.txt /parameter file_to_upload.dat
実際には、上記のコマンドへのショートカットをWindowsエクスプローラーのSend Toメニューに配置して、任意のファイルを右クリックして移動することができます「送信先」>「WinSCPを使用してアップロードしてリモートコマンドを実行」(=ショートカットの名前).
そのためには、フォルダー%USERPROFILE%\SendTo
に移動し、次のターゲットを使用してショートカットを作成します。
winscp_path\winscp.exe /console /script=script_path\upload.txt /parameter %1
Explorerの[送信]メニューでエントリを作成する を参照してください。
コード:
using System;
using System.Diagnostics;
namespace playSound
{
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(args[0]);
Process amixerMediaProcess = new Process();
amixerMediaProcess.StartInfo.CreateNoWindow = false;
amixerMediaProcess.StartInfo.UseShellExecute = false;
amixerMediaProcess.StartInfo.ErrorDialog = false;
amixerMediaProcess.StartInfo.RedirectStandardOutput = false;
amixerMediaProcess.StartInfo.RedirectStandardInput = false;
amixerMediaProcess.StartInfo.RedirectStandardError = false;
amixerMediaProcess.EnableRaisingEvents = true;
amixerMediaProcess.StartInfo.Arguments = string.Format("{0}","-ssh username@"+args[0]+" -pw password -m commands.txt");
amixerMediaProcess.StartInfo.FileName = "plink.exe";
amixerMediaProcess.Start();
Console.Write("Presskey to continue . . . ");
Console.ReadKey(true);
}
}
}
サンプルのcommands.txt:
pS
完全にすぐに使えるソリューションを次に示します。
Ahkスクリプトで、a)コマンド(.ksh)ファイルをLinuxマシンにFtpします。
b)以下のようなplinkを使用します。 PuTTYがある場合は、Plinkをインストールする必要があります。
plink sessionname -l username -pw password test.ksh
または
plink -ssh example.com -l username -pw password test.ksh
WindowsでF9を押すと、すべての手順が順番に実行されます。
キーベースの認証を使用している場合、保存されたPuTTYセッションを使用すると、たとえばリモートサーバー(私の場合はec2)でシェルスクリプトを実行するなど、うまく機能するようです。保存された構成が認証を処理します。
C:\ Users> plink saved_PuTTY_session_name path_to_Shell_file/filename.sh
セッションを(user @ hostname)のような名前で保存すると、このコマンドはリモートコマンドの一部として扱われるため、機能しません。