| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
TRAMP は(通常)インストールするだけで完全に機能します。初期状態では、
リモートホストへの接続に rsh と rcp プログラムを使用
するように設定されています。
ホストによっては、接続を確立するのに問題が起きることがあります。これは、 remote shell の振る舞いによるものです。この詳細については See section 6.8 リモートシェルの設定のヒント, を参照してください。
もし、リモートホストとの接続にこれらのコマンドを使用したくない場合は、 TRAMP のデフォルトの接続と転送メソッドを変更してください。リモート マシンに接続しファイルを転送するのに使うことのできる TRAMP のメソッド がいくつかあります (see section 6.1 リモートマシンへの接続の種類)。
6.1 リモートマシンへの接続の種類 6.2 インラインメソッド 6.3 外部転送メソッド 6.4 複数のホップを使いリモートホストに接続する 6.5 デフォルトのメソッドの選択 6.6 非標準のメソッドを使う 6.7 リモートマシン上で TRAMP がプログラムを発見、使用する方法 6.8 リモートシェルの設定のヒント
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
転送メソッドには二つの基本的なタイプがあり、それぞれに長所、短所が
あります。両者ともに、rsh や ssh、telnet
のようなリモートシェルにアクセスするプログラムを使用し、リモートマシン
に接続します。
このコネクションは、TRAMP がローカルマシンからリモートマシンへ透過的 にアクセスするために、さまざまなオペレーションをおこなうために使われます。 ファイルをオープンした時のメソッドが異なるだけです。
リモートファイルを読み込んだり、保存する時には、二つのマシン間でファイル
の内容を転送する必要があります。ファイルの内容は、マシンにログインしたの
と同じコネクションか、rcp や scp、rsync
などのリモートコピープログラムを使用した別のコネクションで転送されます。
前者は インラインメソッド、後者は 外部転送メソッドとよばれます。
外部転送メソッドの性能は、一般にインラインメソッドよりすぐれています。 インライン転送では、データの符号化、復号化をおこなう必要があるからです。
このルールの唯一の例外は、scp を使用する転送メソッドです。
これらのメソッドの実際のファイル転送の性能は高いのですが、転送開始時
の暗号化にかかわるネゴシエーションのオーバーヘッドがファイル転送の性能
を帳消しにします。
外部転送メソッドを使うためには、リモートコピーコマンドが対話的でない、 つまりコマンドがパスワードのためにプロンプトを出力しないことが必要です。 もし、パスワード入力なしのリモートコピーコマンドを使う事ができないので あれば、インラインメソッドを使う必要があります。
インラインメソッドの一種に、マルチホップメソッド があります。 このメソッドを使うと、いくつかのホップを使い、リモートホストへ接続 できます。これは、あなたがセキュアなネットワークの中にいて、要塞ホスト を経由して外部に接続する場合に便利です。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
TRAMP のインラインメソッドは大変強力で、外部転送メソッドを使う事が できない状況でも動作します。インラインメソッドは、telnet 経由でリモート マシンに接続している時に動作する唯一のメソッドです(ホスト間でなく ユーザー 間のファイル転送を可能にする、ちょっと変わったメソッド もあります。以下を参照してください)。
これらのメソッドを使うためには、符号化、復号化のためのコマンドがリモート マシン上に存在しなければなりません。ローカルマシン上では、TRAMP は ファイルを復号化、符号化する Emacs の機能を使うか、外部コマンドを使用 します。
TRAMP は ファイル転送のために uuencode を使うことができます。
しかし、これはあまりお勧め できません。uuencode と
uudecode コマンドは標準化されていません。すくなくともいくつかの
マシン、AIX と IRIX では正しく動作しないでしょう。これらのシステム上では、
uuencode が動作しません(tramp-methods のドキュメントの
AIX に関する注意を見てください)。
まとめると、もし、mimencode を使い base64 で符号化されたデータ
を転送するのであれば、最近の Emacs の組み込みコマンドを使用するほうが
性能面で有利です。
rsh と mimencode
リモートホストに rsh で接続し、マシン間のファイル転送に
base64 符号化を使用します。
このメソッドを使うためには、metamail パッケージに含まれる
mimencode コマンドが必要です。このコマンドはリモートマシン
すべてにインストールされているわけではありません。
ssh と mimencode
リモートホストに ssh で接続し、マシン間のファイル転送に
base64 符号化を使用します。
よりセキュアな接続をおこなうために ssh パッケージを使用する
こと以外は、前のオプションと同じです。
このメソッドにはふたつのバリエーション、`sm1' と `sm2'
が存在します。これらは ssh1 と ssh2 を明示的に
指定します。もし、これらが何か知らない場合は、このオプションを使う
必要はありません。
telnet と mimencode
リモートホストに telnet で接続し、マシン間のファイル転送に
base64 符号化を使用します。
このメソッドを使うためには、metamail パッケージに含まれる
mimencode が必要です。
rsh と uuencode
リモートホストに rsh で接続し、マシン間のファイル転送に
uuencode と uudecode を使用します。
ssh と uuencode
リモートホストに ssh で接続し、マシン間のファイル転送に
uuencode と uudecode を使用します。
上で説明した、ssh と base64 オプションと同様に、
明示的に ssh のバージョンを選択するための `su1' と `su2'
メソッドがあります。
このメソッドは、su プログラムを起動しません。su
を使うメソッドについては下を参照してください。
telnet と uuencode
リモートホストに telnet で接続し、マシン間のファイル転送に
uuencode と uudecode を使用します。
su と mimencode
このメソッドは、まったくリモートホストに接続しません。かわりに、
su プログラムを使い他のユーザーになり、ファイルを編集する
ことができます。ファイルの内容を転送するために base64 符号化を使用
します。
su と uuencode
`sum' と同様に su を使用し、他のユーザーとしてローカル
ホスト上のファイルを編集することができます。ファイルの内容を転送するため
に uudecode と uudecode を使用します。
sudo と mimencode
このメソッドは、`sum' メソッドに似ていますが、違うユーザーになる
ために su でなく sudo を使用します。
そのユーザーでシェルを起動できるように、sudo が設定されていな
ければならないことに注意してください。ls と mimedecode
の起動の許可だけで十分であればよいのですが、そのように実装するのは簡単では
なく、まだ無理です。
sudo と uuencode
このメソッドは、`suu' メソッドによく似ていますが、違うユーザー
になるために su でなく、sudo を使用します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
外部転送メソッドは複数のチャネルを使用します。オペレーションのために リモートシェルのコネクションを使い、ファイル転送には、外部プログラム を使います。
これは、インライン転送時の、ひとつのコネクションを使った多重化転送のため の符号化、復号化のオーバーヘッドを削減します。
外部転送メソッドを使いたい場合は、ファイルをコピーするための転送ユーティ リティが、パスワード入力なしで実行できなければなりません。
つまり、scp を使う場合や、使っている scp がコマンド
ラインでパスワードを受け付けるバージョンの場合には、ssh-agent
を使う必要があるということです。(2)
ssh 経由で rsync を使う場合も同様です。
もし、パスワード入力なしで scp を実行することができないが、
コネクションをセキュアにするために ssh を使いたい場合は、
ssh ベースのインラインメソッドを参照してください。
rsh と rcp
このメソッドは rsh と rcp を使い、リモートマシン
に接続、ファイル転送をおこないます。おそらく最速のメソッドです。
ssh と scp
リモートホストへの接続のための ssh や、マシン間のファイル転送
のための scp は、リモートマシンへのセキュアな接続とファイル
アクセスのためには最良のメソッドです。
このオプションの性能も優れています。しかし、小さいファイルのオープン、
クローズを頻繁に繰り返す場合はインラインメソッドより遅くなります。
scpセッション開始時の暗号化のためのハンドシェークのコストは、
符号化、復号化をおこなわない利点を帳消しにします。
ssh と rsync
リモートホストにセキュアに接続するために ssh コマンドを、
ファイル転送のために rsync を使うのが、`scp'
メソッドの特徴です。
両側のホスト上に存在するファイルを転送する場合、rsync は
scp より高性能です。この利点は、ファイルが片側のホストに
しかない場合には失なわれます。
リモートシステムへ書き込む場合、rsync ベースのメソッドは
rcp ベースのメソッドよりかなり速いでしょう。しかし、ローカル
マシンのファイルを読み込む場合は、直接コピーするより速くありません。
ssh と scp
想像通り、このメソッドは `scp' とよく似ています。`scp' が
リモートホスト上で通常の対話的シェルを起動するのに対して、このオプション
はコネクションをオープンするために ssh -t HOST -l user /bin/sh
を使います。このオプションは、通常のログインシェルがログイン時にいくつか
の質問をおこなうように設定されている場合に役に立ちます。このメソッドは
これらの質問を避け、TRAMP と一緒に動作するより標準的、あるいは非標準的
なログインシェルを起動します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これまでに説明したメソッドでは不十分な事があります。シンプルなメソッドを 使ってリモートホストに接続できないことがあります。たとえば、セキュアな ネットワークの中にいる場合、外部に接続する前にまず要塞ホストにログイン しなければならないでしょう。もちろん、ターゲットホストは要塞ホストも要求 します。マルチホップのファイル名のフォーマットは、通常の TRAMP の メソッドとすこし異なります。
マルチホップのファイル名は、メソッド名、ホップ数、リモートホスト上の パス名を指定します。メソッドは、インラインコネクションでどのように ファイルが転送されるかを指定します。以下のふたつのマルチホップメソッド が存在します。
mimencode を使用した base64 符号化
ファイルは base64 符号化されたコネクションを使い転送されます。
符号化と復号化のために、mimencode プログラムを使用します。
しかし、ローカルホスト上では、可能なら Emacs の内部実装を使用します。
uuencode と uudecode を使用する
ファイルは、`uu' 符号化(encoding)を使用したコネクションを使い転送され
ます。符号化と復号化のために、uuencode と uudecode
プログラムを使用します。しかし、ローカルホスト上では、可能なら復号化の
ために lisp 実装を使います。
それぞれのホップは ホップメソッド名、ユーザー名、ホスト名で構成 されます。以下のホップメソッドが(今、現在)存在します。
ホストへの接続によく知られた telnet プログラムを使用します。
ユーザー名とホスト名はファイル名の中に含まれ、パスワードをたずねられます。
ホストへの接続に rsh を使用します。rsh がパスワード
をたずねる時以外は、パスワードを入力する必要はありません。
このメソッドはホストへの接続のために ssh を使用します。パスワード
かパスフレーズを入力する必要があります。
このメソッドは他のホストへまったくアクセスしません。そのかわり、今いる ホスト上で他のユーザーになることができます。これは、root としてファイル を編集したいが、リモートホストはリモートからの root のログインを許可して いない場合に役に立ちます。このような場合、一般ユーザーでのリモートホスト への接続に `telnet'、`rsh' あるいは `ssh' を使う ことができます。それから、root になるために `su' ホップを使います。 `su' は一連のシークエンス中の最後のホップである必要はありません。 必要であればホップ中のどこででも使うことができます。
`su' ホップと一緒にユーザーとホスト両方を指定しなければなりません。 しかしながら、ホスト名は無視されユーザー名だけが使用されます。
これは `su' ホップに似ています。違うユーザーになるために
su でなく sudo を使用する点が異なります。
ssh を用いてポートフォワードをしたい場合や、標準的でないポートを
使用しなければならない場合があるかもしれません。そのような場合には、
ホスト名ごとに異なるポート番号を指定した記述を `~/.ssh/config' に
書き込むことで実現できます。しかしながら、multi-hop メソッドを使えば
それは Tramp の枠内で実現することもできます。例えば:
(add-to-list 'tramp-multi-connection-function-alist
'("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
|
とすれば、 sshf ホップを用いて、標準的なポートの変わりに 4400 番
ポートへ繋ぐことができます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
普段よく使う適切な転送メソッドを選択するには、変数 tramp-default-method を設定しなければなりません。この変数には TRAMP ファイルパスにメソッドが 指定されなかった時に使用されるデフォルトのメソッドを設定します。 例えば:
(setq tramp-default-method "scp") |
一般的には、インライン転送メソッドよりは外部転送メソッドを選ぶべきです。 外部転送メソッドはインラインより高性能です。しかし、外部転送メソッドは、 パスワード入力なしでログインできないリモートマシンがたくさんある場合は 役に立ちません。
See section 6.2 インラインメソッド. See section 6.3 外部転送メソッド. See section 6.4 複数のホップを使いリモートホストに接続する.
転送メソッドの選択をする時に他に考慮すべき事は、それらを使う環境と、 特にインターネット上で使う場合あなたの選択したメソッドのセキュリティ との関係です。
rsh と telnet メソッドは、リモートマシンにログイン
する時に、パスワードをプレインテキストで送信します。ファイル転送も同じ
方法でおこなうので、他もマシンからファイルの内容を簡単に読むことができます。
インターネットからアクセス可能なリモートシステムに接続する必要がある場合、
接続に ssh ベースのメソッドを使用することを真剣に考えるべきです。
このメソッドは、高いレベルのセキュリティを提供し、誰かがパスワードを入手
したり、編集しているファイルの内容を読んだりすることを困難にします。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
事前に定義されたメソッドだけでは不十分な場合に、それを変更するための
tramp-methods という変数があります。
変更が必要になった時のために、この変数の Lisp ドキュメントについて述べて おきます。ドキュメントは C-h v tramp-methods RET で参照する ことができます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
TRAMP はリモートホスト上のいくつかのプログラム、ls、
test、find そして cat に依存しています。
これらのツールにくわえ、コネクションメソッドのためにいくつかのツールが 必要です。詳細は 6.2 インラインメソッド と 6.3 外部転送メソッド を参照してください。
いくつかの他のツール、perl (あるいは perl5) と
grep が存在すればそれらも使用されます。これは、性能と
リモートファイルアクセスの正確さの向上のためです。
TRAMP はリモートマシンに接続した時に、使用可能プログラムを検索します。 変数 tramp-remote-path は、リモートマシン上で検索されるディレクトリ を制御します。
デフォルトで多くのマシンにとって適切なパスが設定されています。しかし ながら、ローカル(あるいはリモート)システムの管理者が、必要なツールを へんぴなディレクトリにインストールしているかもしれません。
このような場合でも TRAMP を使う事ができます。単に、必要なディレクトリ をリモートパスに追加するコードを `.emacs' に書くだけです。これで 接続時に TRAMP により、追加したディレクトリが検索されプログラムが 発見されます。
リモートサーチパスにディレクトリを追加するためには、以下のような コードを使ってください:
(require 'tramp) ; TRAMP を最初にロードして
; おかなればならない
; |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2. TRAMP の概要 の節で説明したように、TRAMP はリモートホストに接続し、 そこにあるシェルと対話します。もちろんログインする際にはシェルはその 初期化ファイルを実行します。例えばあなたの初期化ファイルがあなたのお母 さんの誕生日を入力させるようになっていたとしましょう; 当然 TRAMP はそのことを知らないので、そのホストへのログインに失敗します。
この問題を追求するために、いくつかの戦略が考えられます。一つは、TRAMP がすべての可能な状況に対応できるようにすることです。これは消耗戦です。 何故なら 全ての 状況を扱うことは不可能だからです。別の手として、 TRAMP の期待通りに振る舞うように、あなたにリモートホストの設定をして いただくということも出来ます。しかしこれは不便かもしれません。何故なら TRAMP を使い始めるより先に、シェルの設定に多くの労力を割く必要がある のですから。
そのことから、このパッケージではそれらを組み合わせた方法をとります。
いくつかのありふれた設定については理解しようとしてくれて、あなたには
本当に特異な設定だけを避けるように求めます。例えば、リモートホスト上で
あるプログラムを見つけるためには、ディレクトリの一覧を調べます。
そしてまた、ファイルが存在するかをどうか調べる方法というのも明らかでは
ないので、いくつかの異なる可能性を試してくれます。
(あるホストとシェルにおいては、test -e コマンドがその役目を果たす。
別のホスト、シェルに対してはシェルの組み込みコマンドは働かないが、
/usr/bin/test -e や /bin/test -e ならうまく働く。
そしてさらに別のホストでは ls -d がその方法として働く。)
以下では、TRAMP が取り扱ってくれない、つまりあなたが正しく設定する必要 のあるいくつかの事柄について述べます。
shell-prompt-pattern
リモートホストにログインした後、TRAMP がリモートシェルに命令を送れる
ようになる前に、リモートシェルのセットアップが終了するのを待つ必要があり
ます。シェルプロンプトを認識する為に、変数 shell-prompt-pattern
をリモートホストのシェルプロンプトを認識出来るように設定しておく必要が
あります。
tset とその他の質問
シェルの起動スクリプトから tset プログラムを呼び出し、
シェルの端末の種類を尋ねるようにしている場合があります。たぶん
シェルによってはその他の質問を起動時にしてくる場合もあるでしょう。
TRAMP はこれらの質問に答える方法を知りません。
(将来のバージョンでこれらの質問に TRAMP が答えられるようにする
ことが計画されていますが、期待しないでください。)
したがってあなたは、シェルが TRAMP から呼び出されたときに何の質問も
しないように面倒を見なければなりません。そのためには、環境変数
TERM を調べて下さい。それは接続時に dumb に設定されます。
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |