Plink は UNIX の ssh に似たコマンドラインの接続ツールです。よくある用途としてリモートサーバ上の CVS リポジトリへのアクセスのような自動操作への利用があります。
Plink はコンソールウインドウでの対話型セッションを行いたい場合には、おそらく適していません。
Plink はコマンドラインのアプリケーションです。つまりアイコンをダブルクリックして実行できず、代わりにコンソールウインドウを開く必要があります。 “コマンドプロンプト”と呼ばれますが、Windows 95, 98, ME では“MS-DOS プロンプト”と呼ばれていました。スタートメニューのプログラムから起動できます。
Plink を使うには plink.exe が PATH か現在のディレクトリに必要です。 Plink を PATH 環境変数に加えるには、コンソールウインドウに以下をタイプします:
set "PATH=C:\path\to\putty\directory;%PATH%"
これはそのコンソールウインドウを閉じるまで有効です。 PATH をより恒久的に設定するには、システムコントロールパネルの環境変数タブを使います。 Windows 95, 98, ME では、AUTOEXEC.BAT を編集して前述のように set コマンドを記述します。
訳注: インストーラを使ってインストールした場合は不要です。そうではない場合、普段エクスプローラを使っている場合はコントロールパネルで変更するよりも環境変数を設定してからコマンドプロンプトを起動するバッチファイルを作ると手軽でポータブルです。
このセクションでは Plink をどのようにして対話型ログインや自動化した処理で使うかを説明します。
コンソールウインドウを開いたら、plink --help と入力して使い方を表示できます。起動した Plink のバージョンと、使い方の概要が表示されます:
C:\>plink --help
Plink: コマンドライン接続ユーティリティ
Release 0.83
使い方: plink [オプション] [ユーザ@]ホスト [コマンド]
("ホスト" は PuTTY の保存したセッション名でも可)
オプション:
-V バージョン情報を表示して終了する
-pgpfp PGP 鍵の指紋を表示して終了する
-v 冗長(verbose)にメッセージを表示する
-load sessname 保存済みセッションから読み込む
-ssh -telnet -rlogin -raw -serial
特定のプロトコルの使用を強制する
-ssh-connection
Bare SSH 接続プロトコルの使用を強制する
-P port 指定したポートに接続する
-l user 指定したユーザ名で接続する
-batch 対話型プロンプトをすべて無効にする
-proxycmd command
ローカルプロキシとして 'command' を使用する
-sercfg configuration-string (e.g. 19200,8,n,1,X)
シリアル設定を指定する (serial 接続のみ)
以下のオプションは SSH 接続のみに適用される:
-pwfile file ファイルに書かれたパスワードでログイン
-D [listen-IP:]listen-port
SOCKS ベースの動的ポート転送
-L [listen-IP:]listen-port:host:port
ローカルポートをリモートアドレスに転送
-R [listen-IP:]listen-port:host:port
リモートポートをローカルアドレスに転送
-X -x X11 転送の有効化と無効化
-A -a エージェント転送のの有効化と無効化
-t -T pty 割り当てのの有効化と無効化
-1 -2 指定 SSH プロトコルバージョンの使用を強制する
-4 -6 IPv4 / IPv6 の使用を強制する
-C 圧縮を有効にする
-i key ユーザ認証に使用する秘密鍵
-noagent Pageant を使用しない
-agent Pageant を使用する
-no-trivial-auth
認証が瑣末に完了した場合に切断する
-noshare SSH 接続の共有を無効にする
-share SSH 接続の共有を有効にする
-hostkey keyid
ホスト鍵を手動で指定する(繰り返し可)
-sanitise-stderr, -sanitise-stdout, -no-sanitise-stderr, -no-sanitise-stdout
制御文字を標準出力や標準エラー出力から除去しない
-no-antispoof 認証後のスプーフィング防止プロンプトを省略する
-m file リモートコマンドリストをファイルから読み込み
-s リモートコマンドが SSH サブシステム (SSH-2 のみ)
-N シェルやコマンドを開始しない (SSH-2 のみ)
-nc host:port
セッションの代わりにトンネルを開く (SSH-2 のみ)
-sshlog file
-sshrawlog file
プロトコルの詳細をファイルに記録する
-logoverwrite
-logappend
同名のログファイルが存在した場合の処理を指定する
-shareexists
コネクション共有する上流が存在するか確認する
表示されたら、Plink を使う準備ができました。
リモートサーバへの単純なインタラクティブ接続を確立するには、単に plink とホスト名を入力します:
C:\>plink login.example.com
Debian GNU/Linux 2.2 flunky.example.com
flunky login:
そうすると普通にログインでき、セッションが開始します。サーバからの出力は直接コマンドプロンプトウインドウに書き出され、端末コントロールコードはサーバの意図した通りには解釈されないでしょう。そのため例えばフルスクリーンアプリケーションを実行すると変な文字がウインドウを埋め尽くします。このようなインタラクティブ接続は Plink の主な使い方ではありません。
別のプロトコルで接続するには -ssh, -ssh-connection, -telnet, -rlogin, -raw のコマンドラインオプションを使います。
訳注: -ssh-connection は SSH とは異なります。通常は利用する機会のない形式です。
SSH 接続をするには、例えば:
C:\>plink -ssh login.example.com
login as:
PuTTY の保存済みセッションを準備してあるならば、ホスト名の代わりにセッション名を指定できます。これによって公開鍵認証の利用や、ユーザ名の指定、その他ほとんどの PuTTY の機能を利用できます:
C:\>plink my-ssh-session
Sent username "fred"
Authenticating with public key "fred@winbox"
Last login: Thu Dec 6 19:25:33 2001 from :0.0
fred@flunky:~$
(-load コマンドラインオプションでも保存済みセッションを読み込めます (Section 3.11.3.1 を参照してください)。 -load を使った場合でそのセッション名が存在して、それにホスト名が指定されていた場合、host や user@host 引数は指定できません。リモートコマンドの一部として扱われます。)
より典型的な使われ方は、Plink を SSH プロトコルで使い、サーバ上のプログラムと直接やりとりするものです。そのためには Plink が SSH プロトコルを確実に使うようにします。これにはいくつか方法があります:
-ssh オプションを使う (section 7.2.1 参照)。
PLINK_PROTOCOL に ssh を指定する。
通常 Plink はユーザが直接起動せず、他のプロセスによって自動的に実行されます。そのため通常 Plink にはユーザ名やパスワードを尋ねてほしくありません。
次に、Plink が表示し得る様々な対話型プロンプトを回避する必要があるでしょう。接続するサーバのホスト鍵を検証するように要求されたり、ユーザ名を入れたり、パスワードを入れたりです。
Plink を自動化した接続で使っていてホスト鍵を尋ねられないようにするために、最初に同じサーバに手動接続を行うことができます (PuTTY か Plink を使います)。ホスト鍵を検証して (詳しくは section 2.3 を参照)、受け入れる / Accept を選んでレジストリにホスト鍵を追加します。以降は、Plink コマンドでそのサーバに接続してもホスト鍵が変わらない限りは同じように尋ねてはきません。別の方法として、適切なホスト鍵を Plink のコマンドラインに毎回指定することもできます。 Section 3.11.3.22 を参照してください。
ユーザ名のプロンプトを省略するには:
-l オプションを使用してコマンドラインでユーザ名を指定する。例えば、plink login.example.com -l fred。
パスワードのプロンプトを省略するには、まず間違いなく公開鍵認証を設定するべきでしょう。 (一般的な公開鍵認証の紹介は chapter 8 を参照してください。) やはり、2 種類の方法があります:
以上のすべてを終えれば、SSH サーバのリモートコマンドをプロンプトなして自動実行できるようになります:
C:\>plink login.example.com -l fred echo hello, world
hello, world
C:\>
または、保存されたセッションに接続の詳細をすべて設定したならば:
C:\>plink mysession echo hello, world
hello, world
C:\>
そして、他のプログラムがこの Plink のコマンドを、サーバマシン上のプログラムと同じように実行できます。
Plink は PuTTY ツールのサポートする一般的なコマンドラインオプションすべてに対応しています。それらのオプションについては section 3.11.3 を参照してください。
Plink には独自のオプションもいくつかあります。以下のセクションで Plink 特有のコマンドラインオプションについて述べます。
-batch: 対話型プロンプトをすべて無効にする
-batch オプションを使うと、Plink はコネクションを確立する際に対話型プロンプトをまったく表示しません。例えばサーバのホスト鍵が無効ならば (section 2.3 参照)、あなたに対処法を選んでもらう代わりに単に接続が中止されます。
これは自動化したスクリプトで Plink を使うときに役立つはずです。 -batch を使うと、接続時に問題が起きた場合にバッチジョブがハングせずに失敗します。
もし別のプログラムが Plink を起動するならば、そのプログラムが -batch を Plink に渡すようにする必要があるかもしれません。 Section 7.4 のGit に関する例を参照してください。
-s: リモートコマンドが SSH サブシステム
-s オプションを指定すると、Plink は指定したコマンドを、普通のコマンドではなく SSH “サブシステム”の名前として渡します。
(このオプションは SSH-2 プロトコルのみで有効です。)
-share: 既存の接続の共有を試みるこのオプションは既存の接続が共有できるか確認し (SSH 接続の共有について詳しくは section 4.19.5 を参照)、再利用します。
次の Plink の呼び出し形式は:
plink -share <session>
<session>について現在実行可能な“上流”が存在するかを確認します。 <session> は通常の接続を行うときのあらゆるオプション (ホスト/ポート番号、保存済みセッション名、-load 等) です。もし -share が指定されて実行可能な“上流”セッションがない場合は、その接続が以降試行する接続共有のための“上流”となります。
(このオプションは SSH-2 プロトコルのみで有効です。)
-shareexists: コネクション共有する上流が存在するか確認するこのオプションは新たに接続を確立しません。代わりに共有可能な接続があるかどうかを確認できます。 (SSH 接続の共有について詳しくは section 4.19.5 を参照。)
次の Plink の呼び出し形式は:
plink -shareexists <session>
<session>について現在実行可能な“上流”が存在するかを確認します。 <session> は通常の接続を行うときのあらゆるオプション (ホスト/ポート番号、保存済みセッション名、-load 等) です。終了ステータスが 0 の場合は利用可能な“上流”が存在し、それ以外の場合は非 0 になります。
(このオプションは SSH-2 プロトコルのみで有効です。)
-sanitise-stream: 出力のサニタイズを制御するある状況では、Plink はサーバから受け取った出力にサニタイズを行い、バックスペースやエスケープシーケンスのような制御文字を除去します。
この処理の意図は、Plink が git や CVS などの通信経路として使われているときに、リモートプロセスが紛らわしいエスケープシーケンスを標準エラーチャンネルを通じて送るのを防ぐものです。もしサーバが実際にエラーメッセージを送りたいならば、おそらくただのテキスト形式のはずです。もしサーバがチャンネルを濫用してあなたの端末ディスプレイの思いもよらない場所を書き換えようとしたら、Plink は (訳注: 除去処理によって) それを防ごうとします。
デフォルトでは出力が Windows のコンソールデバイスや Unix の端末デバイスの場合にのみ行います。 (別のどこかへ流れる出力ストリームは 8-bit プロトコルによって使われるものである可能性があり、少しも改変されるべきではありません。) また Plink に疑似端末を確保するように指示した場合 (section 3.11.3.12 や section 4.26.1 を参照) も除去を行いません。というのもその状況ではサーバからのエスケープシーケンスを端末に流して欲しいことが多いからです。
ですが除去するべきかどうかの Plink の推測が間違っている場合のために、以下のオプションで処理を上書きできます:
-sanitise-stderr
-no-sanitise-stderr
-sanitise-stdout
-no-sanitise-stdout
SSH では、サーバ認証手段がユーザからの入力を必要とするものがあれば (例えば、パスワード認証や、秘密鍵のパスフレーズ入力) が、必要ないものもあります (例えば、Pageant が読み込んだ秘密鍵)。
Plink で対話型ログインセッションを実行して、Plink がユーザの入力なしに認証した場合、そしてもしサーバに悪意があるかセキュリティが損なわれていた場合、サーバ側があなたをだましてサーバに送るべきでない認証データ (秘密鍵のパスフレーズなど) を漏らすように仕向けます。まるで Plink のローカルプロンプトに見えるものを送って、あたかも Plink がまだ認証していないように見せかけるのです。
それを防ぐための Plink のデフォルトの方針は、認証フェイズの最後を次のような普通のプロンプトで締めることです:
Access granted. Press Return to begin session.
これで、この行の後に認証プロンプトのようなものを見ても、あなたには Plink が出したものではないと判ります。
追加でエンターキーを押すのは不便です。そのため Plink はできるだけ多くの状況で、省略します:
ですが、それでも保護プロンプトが不便だと思うならば、そしてサーバがそんな風にあなたを騙さないと信頼するならば、-no-antispoof オプションで無効にできます。
Plink でリモートサーバに対話型プロンプトなしでログインできるように設定したら (section 7.2.2 参照)、スクリプトやバッチで好きなだけ使えるようになります。例えば、リモートマシン上でバックアップを開始するなら、このようなコマンドでしょう:
plink root@myserver /etc/backups/do-backup.sh
もし特定のウェブ領域に関するシステムログを収集するなら:
plink mysession grep /~fred/ /var/log/httpd/access.log > fredlog
サーバ上で有意義に実行できて対話型でないコマンドであれば何でも、バッチファイル中で Plink を使ってこのように実行できます。
Plink を Git の SSH に関する処理に使う場合、環境変数 GIT_SSH_COMMAND が Plink を指すように設定します:
例えば、PuTTY の インストーラで Plink をデフォルトの場所にインストールした場合、このようにします:
set GIT_SSH_COMMAND="C:/Program Files/PuTTY/plink.exe"
もしくは、別の場所ならば別のパスを指定します。
訳注: パス区切りのバックスラッシュ (\) は二重に書くか、スラッシュを使用する必要があります。スラッシュの方が互換性が高いようです。
この環境変数はプログラムパスではなくコマンドラインを受け付けます。そのため Plink のオプションを末尾に追加できます。例えば、バッチモードの文脈で使っている場合は Git の処理は自動処理され誰もインタラクティブプロンプトに応答できないため、“-batch” オプションを追加してもいいでしょう(section 7.2.3.1):
set GIT_SSH_COMMAND="C:/Program Files/PuTTY/plink.exe" -batch
そうすると、もし Plink が何らかのプロンプトを出すと (例えば、SSH サーバのホスト鍵が変わったため)、バッチジョブはユーザからの入力を延々と待ち続ける代わりにエラーメッセージを出して停止します。
(しかし、必ずしも Git でこのオプションを付けるべきとは限りません。もしコマンドラインから直接 Git を呼び出すなどして Git を使っている場合、Plink にインタラクティブプロンプトで一時停止してeほしいでしょう – 例えば、SSH サーバのパスワードを入力するために。)
訳注: バッチ処理を行う場合は section 7.2.2 の通り、事前にホスト鍵の確認を行っておきます。
古い Git 2.3.0 以前では GIT_SSH を使用しますが、この場合はプログラムのパスを指定します。
set "GIT_SSH=C:\Program Files\PuTTY\plink.exe"
Git のホスティングサービスを使う場合はユーザ名やパスに注意が必要です。例えば GitHub の場合、SSH 接続でのリモートパスは git@github.com:アカウント名/リポジトリ名.git なので plink git@github.com で SSH 接続します。表示されるホスト鍵の指紋が正しいかを公式サイト等で確認し、y を入力してホスト鍵を記憶します。認証プロンプトや Pageant の確認が出たら、Ctrl-C やキャンセルを押して切断します。
※過去に GitHub のホスト鍵が変更されたにも関わらず、翻訳されたページに記載されている鍵の指紋が更新されていない場合がありました。その場合英語版のページを確認します。
Plink を Subversion の SSH 接続で使うには、環境変数 SVN_SSH が Plink を指すように設定します:
set "SVN_SSH=C:/path/to/plink.exe"
パス区切りのバックスラッシュ (\) は二重に書くか、スラッシュを使用する必要があります。 --batch などのパラメータを指定可能です。
Plink を CVS で使うには、環境変数 CVS_RSH が Plink を指すように設定します:
set "CVS_RSH=C:\path\to\plink.exe"
また section 7.2.2 にある通り、対話型プロンプトなしでリモートホストにログインできるように準備する必要があります。
そうすると、以下のコマンドで CVS を利用できます:
cvs -d :ext:user@sessionname:/path/to/repository co module
保存済みセッションでユーザ名を指定している場合、“user” 部分の指定が不要なので、このようにできます:
cvs -d :ext:sessionname:/path/to/repository co module
Plink can also be used with WinCVS. Firstly, arrange for Plink to be able to connect to a remote host non-interactively, as described in section 7.2.2.
Then, in WinCVS, bring up the “Preferences” dialogue box from the Admin menu, and switch to the “Ports” tab. Tick the box there labelled “Check for an alternate rsh name” and in the text entry field to the right enter the full path to plink.exe. Select “OK” on the “Preferences” dialogue box.
Next, select “Command Line” from the WinCVS “Admin” menu, and type a CVS command as in section 7.6, for example:
cvs -d :ext:user@hostname:/path/to/repository co module
or (if you're using a saved session):
cvs -d :ext:user@sessionname:/path/to/repository co module
Select the folder you want to check out to with the “Change Folder” button, and click “OK” to check out your module. Once you've got modules checked out, WinCVS will happily invoke plink from the GUI for CVS operations.
このマニュアルや PuTTY のツールに意見がある場合は、 Feedback page を参照してください。
翻訳についてはフィードバックから送信できます。
©1997-2025 Simon Tatham ©2015-2025 SATO Kentaro
[PuTTY custom build 0.83.ranvis-doc]