Plink は PuTTY リンクの略です。
Plink は、PuTTY のコンパニオン コマンドライン ユーティリティです。
非常に大まかに:
- Windows から Linux サーバーへのインタラクティブな SSH セッションに PuTTY を使用する
- 非インタラクティブな SSH セッションに Plink を使用して、Windows から自動化のためにリモート Linux コマンドを実行します
このチュートリアルでは、以下について説明します:
まず、ここから 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 オプションを使用してください。