GNU/Linux >> Linux の 問題 >  >> Linux

Windows バッチ ファイルからのリモート Linux コマンドを自動化する 10 の PuTTY PLINK の例

Plink は PuTTY リンクの略です。

Plink は、PuTTY のコンパニオン コマンドライン ユーティリティです。

非常に大まかに:

  • Windows から Linux サーバーへのインタラクティブな SSH セッションに PuTTY を使用する
  • 非インタラクティブな SSH セッションに Plink を使用して、Windows から自動化のためにリモート Linux コマンドを実行します


このチュートリアルでは、以下について説明します:

<オール>
  • コマンド プロンプトから plink を起動
  • Plink インタラクティブ SSH セッション
  • 非インタラクティブ SSH セッションを Plink してリモート コマンドを実行する
  • Windows ファイルから複数の Linux コマンドを実行する
  • 接続プロトコルを指定
  • SSH パスワードを Plink 引数として指定
  • Plink の問題をデバッグする
  • SSH ポートを Plink オプションとして指定
  • SSH 接続の Plink ログ ファイル
  • SSH プロトコル (SSH-1 または SSH-2) を指定する
  • IP プロトコル (IPv4 または IPv6) を指定する
  • Plink での認証に秘密鍵ファイルを使用する
  • Plink SSH の追加の有効化および無効化オプション
  • Plink によるフィンガープリントとホストキー
  • Windows バッチ ファイルの Plink -batch オプション
  • まず、ここから plink 実行可能ファイルをダウンロードします。

    マシンに PuTTY がまだインストールされていない場合は、plink と一緒に putty 実行可能ファイルもダウンロードしてください。

    32 ビットの Windows ラップトップをお持ちの場合は、必ず 32 ビット バージョンの plink をダウンロードしてください。そうでない場合は、64 ビット版をダウンロードしてください。

    1.コマンドプロンプトから plink を起動

    plink.exe をダブルクリックして起動することはできません。これはコマンドラインのみのユーティリティ (GUI なし) であるため、最初に Windows コマンド プロンプトを起動する必要があります。

    Windows のスタート メニューをクリックし、検索ボックスに「cmd.exe」と入力して Enter キーを押すと、Windows コマンド プロンプトが起動します。

    また、plink.exe をダウンロードした場所によっては、それに応じて Windows の PATH 変数を変更する必要がある場合があります。

    [システム プロパティ] ウィンドウに移動し、[環境変数] をクリックして、[パス変数] を選択し、plink.exe が配置されているディレクトリをここに追加します。

    または、以下に示すように PATH 変数を設定することもできます。次の例では、plink.exe を C:\Downloads ディレクトリにダウンロードしました。

    set PATH=%PATH%;C:\Downloads
    

    次に、コマンド プロンプトで「plink」と入力すると、利用可能なさまざまなオプションが表示されます。

    2. Plink インタラクティブ SSH セッション

    以下は、plink の基本的な構文です:

    plink [options] connection [command]
    

    上記の構文では:

    • options – plink にさまざまなオプションを渡すことができます。これはオプションです。
    • 接続 – これには、接続先の Linux サーバーの接続情報が含まれます。以下の例では、さまざまな接続方法について説明しています。
    • command – これは、リモートの Linux サーバーで実行するコマンドです。これはオプションです。

    このコマンドはオプションですが、指定しないと、未加工の対話型セッションが表示され、画面上に印刷不可能で読み取り不可能な文字が多数表示されます。前に説明したように、plink はインタラクティブなセッションとして使用するためのものではありません。対話型セッションにはパテを使用してください。

    ここでは、接続を使用するさまざまな方法を見てみましょう。

    まず、リモートサーバーの IP アドレスを指定できます。これにより、ログインするためのユーザー名とパスワードが要求されます。

    C:\>plink 192.168.101.1
    login as: root
    [email protected]'s password:
    

    または、以下に示すように @ 記号を使用してユーザー名を使用することもできます。ユーザー名を指定したので、これはパスワードのみを要求します。

    C:\>plink [email protected]
    Using username "root".
    [email protected]'s password:
    

    以下に示すように、-l オプションを使用してユーザー名を渡すこともできます:

    C:\>plink 192.168.101.1 -l mysql
    

    既存のパテ セッションの名前を使用することもできます。この例では、「devdb」という既存の保存されたパテ セッションを使用しています。これは、PuTTY からこの特定の「devdb」セッションのすべての構成情報をここに移動できるため、推奨される使用方法です。

    C:\>plink devdb
    Using username "root".
    [email protected]'s password:
    

    次の -load は上記とまったく同じです。

    C:\>plink -load devdb
    Using username "root".
    [email protected]'s password:
    

    以下に示すように、ログインすると、コマンド プロンプトが表示されます。ただし、ここで何かを行うと、ユーザーフレンドリーでない文字が表示されます。

    C:\>plink devdb
    Using username "root".
    [email protected]'s password:
    ?]0;root@devdb:~[root@devdb ~]#
    ?]0;root@devdb:~[root@devdb ~]#
    ?]0;root@devdb:~[root@devdb ~]# ?[Kls -altr
    total 326432
    drwx------.  2 root root      4096 Jan 23  2016 ?[01;34m.ssh?[0m
    drwxr-xr-x.  2 root root      4096 May  9  2016 ?[01;3Documents?[0m
    drwxr-xr-x.  2 root root      4096 May  8 12:41 ?[01;3Downloads?[0m
    ?[m?]0;root@devdb:~[root@devdb ~]#
    

    繰り返しますが、インタラクティブな SSH セッションには、PuTTY を使用してください。

    これに関連して、しばらく PuTTY を使用している場合でも、ここにある役立つヒントがいくつか見つかるかもしれません:おそらく知らなかった 10 の素晴らしい PuTTY のヒントとコツ

    3.リモート コマンドを実行するための非インタラクティブ SSH セッションの Plink

    Windows から plink を使用すると、ユーザーの操作なしで Linux サーバー上でコマンドを実行し、出力を表示するだけです。

    このためには、以下に示すようにコマンドを最後の引数として plink に渡します。

    次の例では、リモート サーバーで「crontab -l」コマンドを実行し、出力を表示します。

    C:\>plink [email protected] crontab -l
    no crontab for root
    

    複数のコマンドを実行する場合は、以下に示すようにグループ化してください。

    C:\>plink [email protected] (hostname;crontab -l)
    devdb.thegeekstuff.com
    no crontab for root
    

    以下は、リモート Linux サーバーで db-backup.sh シェルスクリプトを実行します。ただし、Windows マシンからこれを開始しています。

    plink [email protected] /root/bin/db-backup.sh
    

    注意点:

    • 上記のコマンドがパスワードを要求する場合で、それを望まない場合は、リモートの Linux サーバーがパスワードを要求しないように、公開鍵と秘密鍵の認証を適切に設定する必要があります。
    • 以下の例の 1 つに示すように、パスワードをコマンドライン オプションとして plink に渡すこともできます。
    • また、上記で無効なプロトコルに関するエラー メッセージが表示された場合は、次の例に示すように適切なプロトコルを渡す必要があります。

    4. Windows ファイルから複数の Linux コマンドを実行する

    plink コマンドラインでリモート Linux サーバー上で実行するすべてのコマンドを指定する代わりに、それらをテキスト ファイルに入れて、そのファイルをパラメータとして plink に指定することもできます。

    たとえば、Windows で commands.txt という名前の次のファイルを作成します。

    C:\>type commands.txt
    hostname
    service mysql stop
    yum -y install httpd
    service mysql start
    service httpd start
    crontab -l
    

    リモート Linux サーバーで上記のすべてのコマンドを 1 つずつ順番に実行するには、Windows ラップトップで次の plink コマンドを実行します。

    C:\>plink [email protected] -m C:\commands.txt
    

    5.接続プロトコルを指定

    Plink は次のプロトコルを許可します:SSH、Telnet、リモート ログイン (rlogin)、Raw、シリアル接続

    最も一般的でデフォルトは SSH です。以下に示すように -ssh を使用してください。

    C:\>plink -ssh [email protected]
    

    Telnet の場合:

    C:\>plink -telnet [email protected]
    

    rlogin を使用したリモート ログインの場合:

    C:\>plink -rlogin [email protected]
    

    生の場合:

    C:\>plink -raw [email protected]
    SSH-2.0-OpenSSH_5.3
    

    特定のプロトコルを指定しようとしていて、「致命的なエラー:ネットワーク エラー:接続が拒否されました」というエラーが表示される場合は、リモート サーバーが指定されたプロトコルをサポートしていないことを意味します。

    コマンドラインでプロトコルを指定したくない場合:

    • 特定のセッション用にプロトコルが定義されている、保存済みの PuTTY セッションを使用できます。
    • または、PLINK_PROTOCOL という Windows 環境変数を使用して、それに応じて値を設定することもできます。これは plink によって使用されます。

    6. SSH パスワードを Plink 引数として指定

    キーベースの認証設定がない場合は、コマンドラインでパスワードをパラメーターとして渡すことができます。言うまでもなく、この方法はお勧めできません。

    これにより、-pw オプションで指定されたパスワードを使用して root としてサーバーに接続し、指定されたすべての Linux コマンドを実行して、Windows コマンド プロンプトに出力を表示します。

    C:\>plink [email protected] -pw SecretRootPwd (date;hostname;ls -l)
    

    もちろん、簡単な方法は、以下に示すようにユーザー名と IP アドレスを指定する代わりに、保存されたパテ セッション (たとえば、devdb) を使用することです。

    C:\>plink devdb -pw SecretRootPwd (date;hostname;ls -l)
    

    7. Plink の問題をデバッグ

    まず、plink が最新バージョンであることを確認してください。以下に示すように、-V オプション (大文字の V) を使用します。現在の安定版リリースは 0.69 です

    C:\>plink -V
    plink: Release 0.69
    Build platform: 64-bit Windows
    Compiler: Visual Studio 2015 / MSVC++ 14.0 (_MSC_VER=1900)
    Source commit: b1829b81b5c0d12dcc91f6b50b0b4d83c3df6a8e
    

    次に、以下に示すように -v オプション (小文字の v) を使用して、より詳細な出力を表示します。

    C:\>plink -v devdb service httpd restart
    Connecting to 192.168.101.1 port 22
    We claim version: SSH-2.0-PuTTY_Release_0.69
    Server version: SSH-2.0-OpenSSH_5.3
    We believe remote version has SSH-2 channel request bug
    Using SSH protocol version 2
    Doing Diffie-Hellman group exchange
    Doing Diffie-Hellman key exchange with hash SHA-256
    Server also has ssh-dss host key, but we don't know it
    Host key fingerprint is:
    ssh-rsa 2048 2f:d2:c1:7f:db:a1:16:21:d2:f4:31:f9:ae:96:be:89
    Initialised AES-256 SDCTR client->server encryption
    Initialised HMAC-SHA1 client->server MAC algorithm
    Initialised AES-256 SDCTR server->client encryption
    Initialised HMAC-SHA1 server->client MAC algorithm
    Using username "root".
    Using SSPI from SECUR32.DLL
    Attempting GSSAPI authentication
    GSSAPI authentication request refused
    Sent password
    Access granted
    Opening session as main channel
    Opened main channel
    Started a shell/command
    ..
    
    Server sent command exit status 0
    Disconnected: All channels closed
    

    8. SSH ポートを Plink オプションとして指定

    SSH のデフォルトでは、ポート 22 に接続します。ただし、Linux サーバーでは、SSH が別のポートで実行するように構成されている場合は、plink で -P オプションを使用してポートを指定します。

    次の例では、plink はポート 25 でリモート Linux サーバーに接続します。

    C:\>plink [email protected] -P 25 crontab -l
    

    保存された PuTTY セッションと -P オプションを使用すると、保存されたセッションのポートを使用する代わりに、指定されたポートが使用されます。

    C:\>plink devdb -P 25 crontab -l
    

    9. SSH 接続の Plink ログ ファイル

    Plink の SSH プロトコルには、便利なロギング オプションがいくつかあります。

    次の –sshlog オプションは、指定されたファイル (sshlog.txt) にログを保存します。

    C:\>plink devdb -sshlog sshlog.txt (date;hostname;ls -l)
    

    これは sshlog.txt 出力の内容の一部です

    =~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2017.05.11 11:40:57 =~=~=~=~=~=~=~=~=~=~=~=
    Event Log: Writing new session log (SSH packets mode) to file: sshlog.txt
    Event Log: Connecting to 192.168.101.1 port 22
    Event Log: We claim version: SSH-2.0-PuTTY_Release_0.69
    Event Log: Server version: SSH-2.0-OpenSSH_5.3
    Event Log: We believe remote version has SSH-2 channel request bug
    Event Log: Using SSH protocol version 2
    Outgoing packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
      00000000  ed 8e ff c9 d3 67 cf 95 0e 8f 1a 4d 6d 65 6f 25  .....g.....Mmeo%
      00000010  00 00 00 f0 63 75 72 76 65 32 35 35 31 39 2d 73  ....curve25519-s
    ......
    
    Outgoing packet #0xc, type 96 / 0x60 (SSH2_MSG_CHANNEL_EOF)
      00000000  00 00 00 00                                      ....
    Outgoing packet #0xd, type 97 / 0x61 (SSH2_MSG_CHANNEL_CLOSE)
      00000000  00 00 00 00                                      ....
    Event Log: Disconnected: All channels closed
    

    より詳細なログについては、-sshrawlog オプションを使用してください。これにより、ログ ファイルにより多くの情報が保存されるため、ファイル サイズが上記よりも大きくなることに注意してください。

    また、sshrawlog オプションは通常の sshlog オプションよりも多くのログ情報を収集するため、上記のコマンドよりも実行に時間がかかります。

    C:\>plink devdb -sshrawlog sshrawlog.txt (date;hostname;ls -l)
    

    10. SSH プロトコル (SSH-1 または SSH-2) を指定

    デフォルトでは、SSH-2 プロトコルを使用します。これは、以下に示すように -2 オプションを使用して指定することもできます。

    C:\>plink devdb -2 (hostname;ls -l)
    devdb.thegeekstuff.com
    total 326380
    

    SSH-1 プロトコルの場合、以下に示すように -1 オプションを使用します。サーバーがサポートしていない場合、次のエラーが表示されます。

    C:\>plink devdb -pw -1 (hostname;ls -l)
    FATAL ERROR: SSH protocol version 1 required by our configuration but not provided by server
    

    11. IP プロトコル (IPv4 または IPv6) を指定

    デフォルトでは IPv4 が使用されますが、以下に示すように -4 オプションを使用して指定することもできます。

    C:\>plink devdb -4 (hostname;ls -l)
    

    IPv6 を使用するには、以下に示すように -6 オプションを使用します。

    C:\>plink devdb -6 (hostname;ls -l)
    

    12. Plink での認証に秘密鍵ファイルを使用する

    -i オプションを使用して、認証に使用する秘密鍵ファイルの場所を指定します。

    次の例では、C:\Downloads ディレクトリの devdb.ppk ファイルを使用します。

    C:\>plink -i "C:\Downloads\devdb.ppk" [email protected] hostname
    

    注:指定されたキーが Linux サーバーで使用できるように適切に構成されていない場合、「サーバーがキーを拒否しました」というメッセージが表示されます。

    キー ファイルが見つからない場合 (たとえば、間違ったディレクトリ名を指定した場合)、次のエラーが発生します:

    C:\>plink -i "D:\Data\devdb.ppk" [email protected] hostname
    Unable to use key file "C:\Users\ramesh\Downloads\devdb.ppk" (unable to open file)
    [email protected]'s password: 
    

    適切な形式ではないキーを指定すると、次のエラー メッセージが表示されます。

    C:\>plink -i "C:\Downloads\devdb.key" [email protected] hostname
    Unable to use key file "C:\Downloads\devdb.key" (OpenSSH SSH-2 private key (old PEM format))
    

    13. Plink SSH の追加の有効化および無効化オプション

    次の plink SSH オプションも使用できます:

    • -X は X11 転送を有効にします
    • -X は X11 転送を無効にします
    • -A はエージェント転送を有効にします
    • エージェント転送を無効にする-a
    • -t で pty の割り当てを有効にする
    • -T は pty 割り当てを無効にします
    • Pageant の使用を無効にする -noagent
    • -Pageant の使用を有効にするエージェント
    • 圧縮を有効にする -C

    14. Plink によるフィンガープリントとホストキー

    PuTTY の PGP フィンガープリントの詳細を表示する -pgpfp オプションを使用します。通常、これを使用して、plink.exe 実行可能ファイルから、接続しようとしている別のプログラムまたは実行可能ファイルへの信頼を確立できます。

    C:\>plink -pgpfp
    PuTTY Master Key as of 2015 (RSA, 4096-bit):
      440D E3B5 B7A1 CA85 B3CC  1718 AB58 5DC6 0467 6F7C
    
    Original PuTTY Master Key (RSA, 1024-bit):
      8F 15 97 DA 25 30 AB 0D  88 D1 92 54 11 CF 0C 4C
    Original PuTTY Master Key (DSA, 1024-bit):
      313C 3E76 4B74 C2C5 F2AE  83A8 4F5E 6DF5 6A93 B34E
    

    また、plink でホストキーを使用して、それに応じて -hostkey オプションを使用してリモート サーバーに接続することもできます。

    C:\>plink devdb -hostkey aa:dd:b1:f1:f8:00:4c:36:63:ec:cf:92:16:e6:df:26 hostname
    

    15. Windows バッチ ファイルの Plink -batch オプション

    Windows バッチ ファイル内で plink を実行している場合は、-batch オプションを使用することをお勧めします。

    C:>plink -batch devdb [complex-linux-command]
    

    上記の例では、complex-linux-command が失敗したり、ユーザーからの入力を要求したり、ハングしたりした場合、Windows バッチ スクリプトは待機しません。代わりに、plink はコマンドを放棄するだけで、バッチ スクリプトは失敗します。

    これはおそらく、Windows バッチ ファイル ジョブが単に待機またはハングアップする代わりに発生すると予想されることです。

    そのため、plink を使用して Windows バッチ スクリプトを作成する場合は、plink で -batch オプションを使用してください。


    Linux
    1. SCP Linuxコマンド–リモートからローカルへのSSHファイル転送方法

    2. Linuxの検索コマンド

    3. Linux での diff コマンドの例

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

    2. パテを使用して Windows から Linux に scp する

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

    1. XRDPを使用してWindowsからLinuxデスクトップにデスクトップをリモート接続する方法

    2. Osx、Linux、WindowsからリモートOsxシステムにアクセスしますか?

    3. リモート Linux からローカル Windows への scp (ローカル パスにスペースを含む)