webdevqa.jp.net

PuTTYを使用してWindowsからLinuxで実行コマンドを自動化する

Windowsからa linux Shellコマンドを(異なるファイル名で)頻繁に実行する必要があるシナリオがあります。 PuTTYとWinSCPを使用してこれを実行しています(ログイン名とパスワードが必要です)。ファイルは、WinSCPを介してLinuxマシンの事前定義フォルダーにコピーされ、コマンドがPuTTYから実行されます。プログラムを介してこれを自動化する方法はありますか。理想的には、Windowsからファイルを右クリックし、コマンドを発行してファイルをリモートマシンにコピーし、ファイル名を引数として定義済みコマンド(PuTTY内)を実行します。

62
Nemo

自動ログインの一般的な方法にはセキュリティ上の問題がある可能性があります。最も簡単な方法の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

要するに、あなたの答えは以下のテキストと同じようになります。

28
Gary Tsui

PuTTY 通常には「plink」ユーティリティが付属しています。
これは基本的に、Windows .exeとして実装される「ssh」コマンドラインコマンドです。
PuTTYマニュアルの「コマンドラインツールplinkの使用」に詳しく説明されています。

次のようなコマンドをラップするだけです。

plink [email protected] /etc/backups/do-backup.sh

.batスクリプトで。

セミコロンなどの一般的なシェル構造を使用して、複数のコマンドを実行することもできます。例えば:

plink [email protected] ls -lrt /home/read/files;/etc/backups/do-backup.sh
111
James Anderson

TCLスクリプトを記述して、そのLinuxマシンへのSSHセッションを確立し、コマンドを自動的に発行できます。 http://wiki.tcl.tk/11542 で短いチュートリアルを確認してください。

4
Himanshu

セッションを開始するときに、PuTTYセッションを作成し、サーバーにスクリプトを自動ロードできます。

PuTTY -load "sessionName" 

リモートコマンドで、リモートスクリプトをポイントします。

3
lwpro2

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の[送信]メニューでエントリを作成する を参照してください。

3
Martin Prikryl

コード:

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 [email protected]"+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

リンク: https://huseyincakir.wordpress.com/2015/08/27/send-commands-to-a-remote-device-over-puttyssh-PuTTY-send-command-from-command-line/

2
huse.ckr

MtPuttyを試してください。その中のsshログインを自動化できます。特に、複数のサーバーに何度もログインする必要がある場合に最適なツールです。試してみてください こちら

試す価値のあるもう1つのツールは、TeraTermです。 sshの自動化に非常に使いやすいです。取得できます こちら 。しかし、私のお気に入りは常にMtPuttyです。

1
Sudheesh.M.S

完全にすぐに使えるソリューションを次に示します。

  1. AutoHotKeyのインストール(ahk)
  2. スクリプトをキーにマップします(例:F9)
  3. 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を押すと、すべての手順が順番に実行されます。

1
Amit

キーベースの認証を使用している場合、保存されたPuTTYセッションを使用すると、たとえばリモートサーバー(私の場合はec2)でシェルスクリプトを実行するなど、うまく機能するようです。保存された構成が認証を処理します。

C:\ Users> plink saved_PuTTY_session_name path_to_Shell_file/filename.sh

セッションを(user @ hostname)のような名前で保存すると、このコマンドはリモートコマンドの一部として扱われるため、機能しません。

0
Alok Garg