Solaris のシステム管理 (ネットワークサービス)

第 29 章 リモートシステムへのアクセス (手順)

本章では、リモートシステムにログインし、リモートシステムのファイルを操作するために必要なすべての作業について説明します。この章で説明する手順は次のとおりです。

リモートシステムへのアクセス (作業マップ)

この章では、次の表に示すリモートシステムにログインし、ファイルをコピーするための作業について説明します。

表 29–1 作業マップ : リモートシステムへのアクセス

作業 

説明 

参照先 

リモートシステムにログインする (rlogin)

 

  • .rhosts ファイルを削除する

  • rlogin コマンドを使用してリモートシステムにアクセスする

.rhosts ファイルを検索して削除する方法」

「リモートシステムが動作中かどうかを調べる方法」

「リモートシステムにログインしているユーザーを検索する方法」

「リモートシステムにログインする方法 (rlogin)」

「リモートシステムからログアウトする方法 (exit)」

リモートシステムにログインする (ftp)

 

  • ftp 接続のオープンとクローズを行う

  • リモートファイルから、およびリモートシステムに、ファイルをコピーする

ftp によりリモートシステムへ接続する方法」

「リモートシステムとの ftp 接続を終了する方法」

「リモートシステムからファイルをコピーする方法 (ftp)」

「ファイルをリモートシステムにコピーする方法 (ftp)」

rcp を使用してリモートファイルをコピーする

rcp コマンドを使用して、リモートシステムから、およびリモートシステムに、ファイルをコピーする

「ローカルシステムとリモートシステム間でファイルをコピーする方法 (rcp)」

リモートシステムへのログイン (rlogin)

rlogin コマンドを使用すると、リモートシステムにログインできます。ログインした後は、リモートファイルシステム内で移動し、その内容を (リモートシステムによる承認にしたがって) 操作したり、ファイルをコピーしたり、リモートコマンドを実行したりできます。

ログイン先のシステムがリモートドメインに属している場合は、必ずシステム名にドメイン名を追加してください。次の例では、SOLAR はリモートドメイン名です。

rlogin pluto.SOLAR

また、Control-d と入力すると、リモートログイン処理をいつでも中断できます。

リモートログイン (rlogin) の認証

rlogin 処理の認証 (ログインするユーザーの確認処理) は、リモートシステムまたはネットワーク環境で実行されます。

この 2 つの認証形式の主な違いは、要求される対話操作と、認証の確立方法にあります。リモートシステムがユーザーを認証しようとする場合に、/etc/hosts.equiv または .rhosts ファイルを設定していなければ、パスワードの入力を促すプロンプトが表示されます。ネットワークがユーザーを認証しようとする場合は、ユーザーはすでにネットワークに認識されているので、パスワードプロンプトは表示されません。

リモートシステムがユーザーを認証しようとする場合は、特に次のいずれかに該当する場合は、リモートシステム上のローカルファイル内の情報を使用した認証が行われます。

ネットワークによる認証は、次のどちらかの場合に利用されます。


注 –

通常は、ネットワークによる認証がシステムによる認証より優先されます。


/etc/hosts.equiv ファイル

/etc/hosts.equiv ファイルには、リモートシステムの「信頼されるホスト」が 1 行に 1 つずつ入っています。ユーザーがこのファイルに含まれるホストから (rlogin を使用して) リモートログインしようとする場合、リモートシステムがそのユーザーのパスワードエントリにアクセスできれば、ユーザーはパスワードを入力しなくてもログインできます。

典型的な hosts.equiv ファイルの構造は次のとおりです。


host1
host2 user_a
+@group1
-@group2

上記の host1 のエントリのように、hosts.equiv にホストに対して 1 つのエントリが記述されていれば、そのホストは信頼されているため、そのマシン上のユーザーも信頼できることを意味します。

この例の第 2 のエントリのようにユーザー名も含まれていると、その指定されたユーザーがアクセスしようとする場合にのみ、そのホストが信頼されます。

グループ名の先頭にプラス記号 (+) が付いている場合は、そのネットグループ内のすべてのマシンが信頼されていることを意味します。

グループ名の先頭にマイナス記号 (–) が付いている場合は、そのネットグループ内には信頼できるマシンがないことを意味します。

/etc/hosts.equiv ファイルを使用する場合のセキュリティーの問題

/etc/hosts.equiv ファイルにはセキュリティー上の問題があります。/etc/hosts.equiv ファイルをシステム上で管理する場合は、ネットワーク内で信頼されるホストのみを含めるようにしてください。別のネットワークに所属するホストまたは公共領域にあるマシンを追加しないでください。たとえば、端末室に置かれているホストは追加しないでください。

信頼できないホストを使用すると、重大なセキュリティー上の問題が発生する可能性があります。/etc/hosts.equiv ファイルを正しく構成されたファイルと置き換えるか、ファイルを削除してください。

/etc/hosts.equiv ファイルに + のみの 1 行しか入っていない場合は、認識されているすべてのホストが信頼されることを示します。

.rhosts ファイル

.rhosts ファイルは、/etc/hosts.equiv ファイルに対応するユーザー用のファイルです。このファイルには、通常、ホストとユーザーの組み合わせのリストが入っています。このファイルにホストとユーザーの組み合わせが含まれている場合、そのユーザーには、パスワードを入力しなくても、そのホストからリモートログインする許可が与えられます。

.rhosts ファイルはユーザーのホームディレクトリの一番上のレベルに置かれていなければなりません。サブディレクトリに置かれている .rhosts ファイルは参照されません。

ユーザーは、各自のホームディレクトリ内で .rhosts ファイルを作成できます。.rhosts ファイルを使用することによって、/etc/hosts.equiv ファイルを使用しなくても、異なるシステムのユーザー自身のアカウント間で信頼できるアクセスを行うことができます。

.rhosts ファイルを使用する場合のセキュリティーの問題

.rhosts ファイルにはセキュリティー上、重大な問題があります。/etc/hosts.equiv ファイルはシステム管理者の制御下にあり、効率よく管理できますが、だれでも .rhosts ファイルを作成して、システム管理者が知らないうちに自分が選んだユーザーにアクセス権を与えることができます。

すべてのユーザーのホームディレクトリが 1 台のサーバー上にあって、特定のユーザーだけがそのサーバーに対してスーパーユーザーのアクセス権を持っている場合、ユーザーが .rhosts ファイルを使用できないようにするためには、スーパーユーザーとして、空の .rhosts ファイルを各ユーザーのホームディレクトリに作成します。次に、このファイルのアクセス権を 000 に変更します。こうしておけば、スーパーユーザーでも、そのファイルを変更することが難しくなります。これにより、ユーザーが .rhosts を無責任に使用することによって生じるセキュリティー問題を防ぐことができます。ただし、ユーザーが自分のホームディレクトリへの実効パスを変更できる場合、この方法は何の解決にもなりません。

.rhosts ファイルを確実に管理する唯一の方法は、それを完全に使用できないようにすることです。詳細は、.rhosts ファイルを検索して削除する方法」を参照してください。システム管理者は、システムを頻繁にチェックして、このポリシーに対する違反を調べることができます。このポリシーに対する例外は、root アカウントです。ネットワークのバックアップや他のリモートサービスを実行するには、.rhosts ファイルが必要な場合があります。

リモートログインのリンク

システムが正しく構成されていれば、リモートログインをリンクできます。たとえば、earth 上のユーザーが jupiter にログインし、そこから pluto にログインします。

このユーザーは jupiter からログアウトして pluto に直接ログインすることもできますが、このリンク方法の方が便利です。

パスワードを入力せずにリモートログインをリンクするには、/etc/hosts.equiv または .rhosts ファイルを正しく設定しておく必要があります。

直接リモートログインと間接リモートログイン

rlogin コマンドにより、リモートシステムに直接的または間接的にログインできます。

直接リモートログインは、デフォルトユーザー名、すなわち現在ローカルシステムにログインしている個人のユーザー名を使用します。これは、最も一般的なリモートログイン形式です。

間接リモートログインは、リモートログイン処理中に別のユーザー名を入力することによって行います。これは、一時的に借りているワークステーションから行うタイプのリモートログインです。たとえば、ユーザーが同僚のオフィスにいるときに自分のホームディレクトリに置かれているファイルを確認する必要がある場合、同僚のシステムからリモートで自分のシステムにログインすることができます。この場合、自分のユーザー名を入力して間接リモートログインを実行することになります。

次の表は、直接ログインや間接ログインと認証方式の依存関係を示しています。

表 29–2 ログイン方式と認証方式 (rlogin) の依存関係

ログイン方式 

ユーザー名の提供 

認証 

パスワード 

直接 

システム 

ネットワーク 

なし 

 

 

システム 

必要 

間接 

ユーザー 

ネットワーク 

なし 

 

 

システム 

必要  

リモートログイン後の処理

リモートシステムにログインするときに、rlogin コマンドはホームディレクトリを見つけようとします。ホームディレクトリが見つからなければ、リモートシステムのルートディレクトリ (/) が割り当てられます。次に例を示します。


Unable to find home directory, logging in with / 

ただし、rlogin コマンドがホームディレクトリを見つけると、.cshrc ファイルと .login ファイルを生成します。したがって、リモートログイン後は、プロンプトが標準ログインプロンプトになり、現在のディレクトリはローカルにログインするときと同じになります。

たとえば、通常のプロンプトにシステム名と作業用ディレクトリが表示される場合と、ログイン時の作業用ディレクトリがホームディレクトリの場合、ログインプロンプトは次のようになります。


earth(/home/smith):

リモートシステムにログインすると、同じようなプロンプトが表示され、rlogin コマンドをどのディレクトリから入力したかに関係なく、作業用ディレクトリがホームディレクトリになります。


earth(/home/smith): rlogin pluto
.
.
.
pluto(/home/smith):

唯一の違いは、プロンプトの先頭にローカルシステムではなくリモートシステムの名前が表示されることです。リモートファイルシステムは、ホームディレクトリと並んで存在します。

/home ディレクトリに移動して ls を実行すると、次のように表示されます。


earth(home/smith): cd ..
earth(/home): ls
smith  jones

Procedure.rhosts ファイルを検索して削除する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. find(1) コマンドを使用し、.rhosts ファイルを検索して削除します。


    # find home-directories -name .rhosts -print -exec rm {} \;
    
    home-directories

    ユーザーのホームディレクトリがあるディレクトリへのパス。複数のパスを指定すると、複数のホームディレクトリを一度に検索できる

    -name .rhosts

    ここでは .rhosts を指定する

    -print

    現在のパス名を出力する

    -exec rm {} \;

    指定したファイル名に一致するファイルすべてに、rm コマンドを適用するように find コマンドに伝える

    find コマンドは、指定したディレクトリから始めて .rhosts というファイルを検索します。ファイルが見つかると、find はファイルのパスを画面上に表示し、ファイルを削除します。


例 29–1 .rhosts ファイルを検索して削除する

次の例では、/export/home ディレクトリ内で、すべてのユーザーのホームディレクトリ内の .rhosts ファイルを検索し削除します。


# find /export/home -name .rhosts -print | xargs -i -t rm {} \;

リモートシステムが動作中かどうかを調べる方法

ping コマンドを使用して、リモートシステムが動作中かどうかを調べます。


$ ping system-name | ip-address
system-name

リモートシステム名

ip-address

リモートシステムの IP アドレス

ping コマンドは、次の 3 つのメッセージのどれかを返します。

状態メッセージ 

意味 

system-name is alive

このシステムにはネットワーク経由でアクセスできる 

ping: unktawn host system-name

未知のシステム名 

ping: no answer from system-name

システムは認識されるが、現在は動作していない  

ping を実行した対象のシステムが別のドメイン内にある場合は、出力メッセージにルーティング情報も含まれることがありますが、これは無視してかまいません。

ping コマンドのタイムアウトは 20 秒です。つまり、20 秒以内に応答がなければ、第 3 のメッセージを返します。time-out 値を秒単位で入力すると、ping の待ち時間を増減させることができます。


$ ping system-name | ip-address time-out

詳細は、ping(1M) のマニュアルページを参照してください。

リモートシステムにログインしているユーザーを検索する方法

rusers(1) コマンドを使用して、リモートシステムにログインしているユーザーを検索します。


$ rusers [-l] remote-system-name
rusers

(オプションなし) システム名と、root など現在ログインしているユーザー名を表示する

-l

各ユーザーの詳細な情報を表示する。 ユーザーのログインウィンドウ、ログイン日時、ログインしている時間、ユーザーのログイン元のリモートシステム名など


例 29–2 リモートシステムにログインしているユーザーを検索する

次の例は、rusers の短い形式の出力を示しています。


$ rusers pluto
pluto    smith  jones

次の例では、rusers の長い形式の出力は、2 人のユーザーがリモートシステム starbug にログインしていることを示します。第 1 のユーザーは 9 月 10 日にシステムコンソールからログインし、ログイン時間は 137 時間 15 分でした。第 2 のユーザーはリモートシステム mars から 9 月 14 日にログインしました。


$rusers -l starbug
root         starbug:console           Sep 10 16:13  137:15
rimmer       starbug:pts/0             Sep 14 14:37         (mars)

リモートシステムにログインする方法 (rlogin)

rlogin(1) コマンドを使用してリモートシステムにログインします。


$ rlogin [-l user-name] system-name
rlogin

(オプションなし) 現在のユーザー名を使用して、リモートシステムに直接ログインする

-l user-name

ユーザー名を入力して、リモートシステムに間接的にログインする

ネットワークがユーザーを認証しようとする場合には、パスワードを求めるプロンプトは表示されません。リモートシステムがユーザーを認証しようとする場合は、パスワードの入力を求めるプロンプトが表示されます。

処理が成功すると、rlogin コマンドは、そのシステムへの前回のリモートログイン、リモートシステム上で動作中のオペレーティングシステムのバージョン、ホームディレクトリに未処理のメールがあるかどうかに関して、簡潔な情報を表示します。


例 29–3 リモートシステムにログインする (rlogin)

次の例は、pluto へ直接リモートログインした出力結果を示しています。このユーザーはネットワークから認証されています。


$ rlogin starbug
Last login: Mon Jul 12 09:28:39 from venus
Sun Microsystems Inc.   SunOS 5.8       February 2000
starbug:

次の例は、pluto へ間接リモートログインした出力結果を示しています。この場合、ユーザーはリモートシステムから認証されています。


$ rlogin -l smith pluto
password: user-password
Last login: Mon Jul 12 11:51:58 from venus
Sun Microsystems Inc.   SunOS 5.8       February 2000
starbug: 

リモートシステムからログアウトする方法 (exit)

exit(1) コマンドを使用して、リモートシステムからログアウトします。


$ exit
 

例 29–4 リモートシステムからログアウトする (exit)

次の例は、ユーザー smith がシステム pluto からログアウトする様子を示しています。


$ exit
pluto% logout
Connection closed.
earth% 

リモートシステムへのログイン (ftp)

ftp コマンドは、インターネットのファイルトランスポートプロトコルへのユーザーインタフェースを提供します。このユーザーインタフェースはコマンドインタプリタと呼ばれ、リモートシステムにログインし、そのファイルシステムについて様々な処理を実行できるようにします。基本操作については次の表を参照してください。

rlogin および rcp と比較した場合に ftp が優れている最大のポイントは、ftp はリモートシステムでの UNIX の実行を要求しないことです。ただし、リモートシステムを TCP/IP 通信ができるように構成する必要はあります。逆に、rlogin の優れている点は、ftp よりも豊富なファイル操作コマンドを使用できることです。

リモートログインの認証 (ftp)

ftp によるリモートログインの認証は、次のいずれかの方法により確立できます。

重要な ftp コマンド

表 29–3 重要な ftp コマンド

コマンド 

説明 

ftp

ftp コマンドインタプリタにアクセスする

ftpremote-system

リモートシステムへの ftp 接続を確立する。詳細は、ftp によりリモートシステムへ接続する方法」を参照

open

コマンドインタプリタからリモートシステムにログインする 

close

リモートシステムからログアウトしてコマンドインタプリタに戻る 

bye

ftp コマンドインタプリタを終了する

help

すべての ftp コマンドを表示するか、コマンド名が指定されている場合は、コマンドの機能に関する簡単な説明を表示する

reset

リモートの ftp サーバーとコマンド応答シーケンスの同期をとり直す

ls

リモートの作業用ディレクトリの内容を表示する 

pwd

リモートの作業用ディレクトリ名を表示する 

cd

リモートの作業用ディレクトリを変更する 

lcd

ローカルの作業用ディレクトリを変更する 

mkdir

リモートシステム上でディレクトリを作成する 

rmdir

リモートシステム上でディレクトリを削除する 

get、mget

リモートの作業用ディレクトリからローカルの作業用ディレクトリに 1 つ以上のファイルをコピーする 

put、mput

ローカルの作業用ディレクトリからリモートの作業用ディレクトリに 1 つ以上のファイルをコピーする 

delete、mdelete

リモートの作業用ディレクトリから 1 つ以上のファイルを削除する 

詳細は、ftp(1) のマニュアルページを参照してください。

Procedureftp によりリモートシステムへ接続する方法

  1. ftp 認証を持っていることを確認します。

    「リモートログインの認証 (ftp)」で説明しているように、ftp 認証を持っている必要があります。

  2. ftp コマンドを使用してリモートシステムへ接続します。


    $ ftp remote-system
    

    接続に成功すると、確認メッセージとプロンプトが表示されます。

  3. ユーザー名を入力します。


    Name (remote-system:user-name): user-name
    
  4. プロンプトが表示されたら、パスワードを入力します。


    331 Password required for user-name:
    Password: password
    

    アクセス中のシステムで匿名 ftp アカウントが設定されている場合は、パスワードとして電子メールアドレスの入力を求めるプロンプトが表示されます。ftp インタフェースがパスワードを受け付けると、確認メッセージと (ftp>) プロンプトを表示します。

    これで、help など、ftp インタフェースから提供されるどのコマンドでも使用できます。主なコマンドについては、表 29–3 を参照してください。


例 29–5 ftp によりリモートシステムへ接続する

次の ftp セッションは、リモートシステム pluto 上でユーザー smith によって確立されました。


$ ftp pluto
Connected to pluto.
220 pluto FTP server ready.
Name (pluto:smith): smith
331 Password required for smith:
Password: password
230 User smith logged in.
ftp>

リモートシステムとの ftp 接続を終了する方法

bye コマンドを使用して、リモートシステムとの ftp 接続を終了します。


ftp> bye
221-You have  transferred 0 bytes in 0 files.
221-Total traffic for this sessions was 172 bytes in 0 transfers.
221-Thanks you for using the FTP service on spdev.
221 Goodbye.

接続を終了するメッセージに続いて、通常のシェルプロンプトが表示されます。

Procedureリモートシステムからファイルをコピーする方法 (ftp)

  1. リモートシステムからファイルをコピーする、ローカルシステム上のディレクトリに変更します。


    $ cd target-directory
    
  2. ftp により接続します。

    ftp によりリモートシステムへ接続する方法」を参照してください。

  3. コピー元ディレクトリに変更します。


    ftp> cd source-directory
    

    システムがオートマウンタを使用している場合、リモートシステムのユーザーのホームディレクトリは、/home の下にユーザーのホームディレクトリと並行して表示されます。

  4. コピー元ファイルの読み取り権があることを確認します。


    ftp> ls -l
    
  5. 転送タイプを binary に設定します。


    ftp> binary
    
  6. ファイルを 1 つコピーするには、get コマンドを使用します。


    ftp> get filename 
    
  7. 一度に複数のファイルをコピーするには、mget コマンドを使用します。


    ftp> mget filename [filename ...]

    個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mget コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。

  8. ftp による接続を終了します。


    ftp> bye
    

例 29–6 リモートシステムからファイルをコピーする (ftp)

次の例では、ユーザー kryten は、システム plutoftp 接続し、get コマンドを使用して /tmp ディレクトリから自分のホームディレクトリにファイルを 1 つコピーします。


$ cd $HOME
ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.8) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34344) 
(0 bytes).
dtdbcache_:0
filea
files
ps_data
speckeysd.lock
226 ASCII Transfer complete.
53 bytes received in 0.022 seconds (2.39 Kbytes/s)
ftp> get filea
200 PORT command successful.
150 ASCII data connection for filea (129.152.221.238,34331) 
(0 bytes).
221 Goodbye.

次の例では、同じユーザー krytenmget コマンドを使用して、/tmp ディレクトリから自分のホームディレクトリに複数のファイルをコピーします。kryten は、個々のファイルについてコピーするか、しないかの選択ができることに注意してください。


$ ftp> cd /tmp
250 CWD command successful.
ftp> ls files
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34345) 
(0 bytes).
fileb
filec
filed
remote: files
21 bytes received in 0.015 seconds (1.36 Kbytes/s)
ftp> cd files
250 CWD command successful.
ftp> mget file*
mget fileb? y
200 PORT command successful.
150 ASCII data connection for fileb (129.152.221.238,34347) 
(0 bytes).
226 ASCII Transfer complete.
mget filec? y
200 PORT command successful.
150 ASCII data connection for filec (129.152.221.238,34348) 
(0 bytes).
226 ASCII Transfer complete.
mget filed? y
200 PORT command successful.
150 ASCII data connection for filed (129.152.221.238,34351) 
(0 bytes).
226 ASCII Transfer complete.200 PORT command successful.
ftp> bye
221 Goodbye.

Procedureファイルをリモートシステムにコピーする方法 (ftp)

  1. ローカルシステム上のコピー元ディレクトリに変更します。

    ftp コマンドを入力して接続するディレクトリは、ローカルの作業用ディレクトリ、つまりこの操作のコピー元ディレクトリになります。

  2. ftp により接続します。

    ftp によりリモートシステムへ接続する方法」を参照してください。

  3. コピー先ディレクトリに変更します。


    ftp> cd target-directory
    

    ローカルシステムでオートマウンタを使用中であれば、/home の下に自分のホームディレクトリと並行してリモートシステムのユーザーのホームディレクトリが表示されるので注意してください。

  4. コピー先ディレクトリへの書き込み権があることを確認します。


    ftp> ls -l target-directory
    
  5. 転送タイプを binary に設定します。


    ftp> binary
    
  6. ファイルを 1 つコピーするには、put コマンドを使用します。


    ftp> put filename
    
  7. 一度に複数のファイルをコピーするには、mput コマンドを使用します。


    ftp> mput filename [filename ...]

    個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mput コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。

  8. ftp による接続を終了するには、bye と入力します。


    ftp> bye
    

例 29–7 ファイルをリモートシステムにコピーする (ftp)

次の例では、ユーザー kryten はシステム plutoftp により接続し、put コマンドを使用して自分のシステムからシステム pluto/tmp ディレクトリにファイルをコピーします。


$ cd /tmp
ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.8) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> put filef
200 PORT command successful.
150 ASCII data connection for filef (129.152.221.238,34356).
226 Transfer complete.
ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34357) (0 bytes).
dtdbcache_:0
filea
filef
files
ps_data
speckeysd.lock
226 ASCII Transfer complete.
60 bytes received in 0.058 seconds (1.01 Kbytes/s)
ftp> bye
221 Goodbye.

次の例では、同じユーザー krytenmput コマンドを使用して自分のホームディレクトリから pluto/tmp ディレクトリに複数のファイルをコピーします。kryten は、個々のファイルについてコピーするか、しないかの選択ができることに注意してください。


$ cd $HOME/testdir
$ ls
test1   test2   test3
$ ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.8) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> mput test*
mput test1? y
200 PORT command successful.
150 ASCII data connection for test1 (129.152.221.238,34365).
226 Transfer complete.
mput test2? y
200 PORT command successful.
150 ASCII data connection for test2 (129.152.221.238,34366).
226 Transfer complete.
mput test3? y
200 PORT command successful.
150 ASCII data connection for filef (129.152.221.238,34356).
226 Transfer complete.
ftp> bye
221 Goodbye.

rcp によるリモートコピー

rcp コマンドは、ローカルシステムとリモートシステム間、または 2 台のリモートシステム間でファイルやディレクトリをコピーします。このコマンドは、リモートシステムから (rlogin コマンドでログイン後に)、またはローカルシステムから (リモートシステムにログインせずに) 使用できます。

rcp を使用すると、次のリモートコピー操作を実行できます。

オートマウンタを実行中の場合は、これらのリモート操作を cp コマンドで実行できます。ただし、cp の範囲は、オートマウンタにより作成された仮想ファイルシステムと、ユーザーのホームディレクトリから相対的に指定できる操作に制限されます。rcp はそのような制限を受けずに同じ操作を実行するので、ここでは rcp を使用する場合に限定して説明します。

コピー操作のセキュリティー上の注意事項

システム間でファイルやディレクトリをコピーするには、ログインしてファイルをコピーする許可を持っていなければなりません。


注意 – 注意 –

cp コマンドと rcp コマンドではともに、警告が表示されずにファイルが上書きされることがあります。コマンドを実行する前に、ファイル名が正しいかどうかを確認してください。


コピー元とコピー先の指定

C シェル内で rcp コマンドを使用すると、絶対パス名または相対パス名を使用して、コピー元 (コピーするファイルやディレクトリ) とコピー先 (ファイルやディレクトリをコピーする場所) を指定できます。

 

絶対パス名 

相対パス名 

ローカルシステムから 

mars:/home/jones/myfile.txt

~jones/myfile.txt

リモートログイン後 

/home/jones/myfile.txt

~jones/myfile.txt

絶対パス名は、特定のシステムにマウントされているファイルやディレクトリを表します。上記の例で、第 1 の絶対パス名は mars システム上のファイル (myfile.txt) を表します。相対パス名は、ファイルやディレクトリがある位置を、ユーザーのホームディレクトリからの相対パスで表します。上記の例で、相対パス名は絶対パスと同じ myfile.txt を表しますが、jones のホームディレクトリを示すために「~」(チルド記号) を使用しています。

~ = mars:/home/jones

上記の 2 行目の例は、リモートログイン後の絶対パス名と相対パス名を示しています。相対パス名では明確な違いは見られません。しかし、リモートログイン操作により、jones のホームディレクトリがローカルシステム上にマウントされた (ローカルユーザーのホームディレクトリと並列に存在する) ので、絶対パス名ではシステム名 mars を指定する必要はありません。リモートログイン操作によって別のユーザーのホームディレクトリがどのようにマウントされるかについては、「リモートログイン後の処理」を参照してください。

次の表に、C シェルが認識する絶対パス名と相対パス名の例を示します。このサンプルでは、次の用語を使用します。

表 29–4 ディレクトリ名とファイル名に使用できる構文

ログイン先 

構文 

説明 

ローカルシステム  

.

ローカルの作業用ディレクトリ 

 

path/filename

ローカルの作業用ディレクトリ内の pathfilename

 

~

現在のユーザーのホームディレクトリ 

 

~/path/filename

現在のユーザーのホームディレクトリの下の pathfilename

 

~user

user のホームディレクトリ

 

~user/path/filename

user のホームディレクトリの下の pathfilename

 

remote-system:path/filename

リモートの作業用ディレクトリ内の pathfilename

リモートシステム 

.

リモートの作業用ディレクトリ 

 

filename

リモートの作業用ディレクトリ内の filename

 

path/filename

リモートの作業用ディレクトリ内の pathfilename

 

~

現在のユーザーのホームディレクトリ 

 

~/path/filename

現在のユーザーのホームディレクトリ内の pathfilename

 

~user

user のホームディレクトリ

 

~/user/path/filename

user のホームディレクトリの下の pathfilename

 

local-system:path/filename

ローカルの作業用ディレクトリ内の pathfilename

Procedureローカルシステムとリモートシステム間でファイルをコピーする方法 (rcp)

  1. コピーする許可を持っているかどうかを確認します。

    少なくとも、コピー元システム上で読み取り権を持ち、コピー先システム上で書き込み権を持っているべきです。

  2. コピー元とコピー先の場所を決定します。

    コピー元またはコピー先のパスがわからない場合は、まず rlogin コマンドを使用してリモートシステムにログインします (「リモートシステムにログインする方法 (rlogin)」を参照)。次に、そのパスが見つかるまでリモートシステム上を移動します。その後は、ログアウトしなくても次の手順を実行できます。

  3. ファイルまたはディレクトリをコピーします。


    $ rcp [-r] source-file|directory   target-file|directory
    
    rcp

    (オプションなし) コピー元からコピー先にファイルを 1 つコピーする

    -r

    コピー元からコピー先にディレクトリをコピーする

    この構文は、リモートシステムとローカルシステムのどちらにログインするかに関係なく適用されます。表 29–4 で説明したとおり、ファイルやディレクトリのパス名のみをこのあとで示す例のように変更します。

    ~」と「.」を使用すると、ローカルのファイル名やディレクトリ名のパス部分を指定できます。ただし、「~」はリモートシステムではなく現在のユーザーに適用されることと、「.」はログイン先のシステムに適用されることに注意してください。この 2 つの記号については、表 29–4 を参照してください。


例 29–8 rcp を使用してリモートファイルをローカルシステムにコピーする

次の例では、rcp はファイル letter.doc をリモートシステム pluto/home/jones ディレクトリから、ローカルシステム earth 上の作業用ディレクトリ (/home/smith) にコピーします。


earth(/home/smith): rcp pluto:/home/jones/letter.doc .

この例では、リモートログインをしないで rcp 操作を実行しています。コマンド行の最後にある「.」記号は、リモートシステムではなく、ローカルシステムを表します。

コピー先ディレクトリもローカルユーザーのホームディレクトリなので、「~」記号で指定することもできます。



例 29–9 rloginrcp を使用してリモートファイルをローカルシステムにコピーする

次の例では、rlogin コマンドの実行後に rcp 操作が実行され、リモートシステムからローカルシステムにファイルをコピーしています。操作の流れは前述の例と同じですが、リモートログインによりパスが変更になります。


earth(/home/smith): rlogin pluto
.
.
.
pluto(/home/jones): rcp letter.doc ~

コマンド行の最後に「.」記号を使用するのは、この例では不適切です。リモートログインが行われているので、「.」記号はリモートシステムを指し、実際には rcp に重複したファイルを作成させることになります。ただし、「~」は、リモートシステムにログインするときにも現在のユーザーのホームディレクトリを指します。



例 29–10 rcp を使用してローカルファイルをリモートシステムにコピーする

次の例で、rcp はファイル notice.doc をローカルシステム earth のホームディレクトリ (/home/smith) からリモートシステム pluto/home/jones ディレクトリにコピーします。


earth(/home/smith): rcp notice.doc pluto:/home/jones

リモートファイル名が指定されていないので、ファイル notice.doc/home/jones ディレクトリに同じ名前でコピーされます。

次の例では、前の例と同じように rcp 操作が行われますが、rcp はローカルシステム上の別の作業用ディレクトリ (/tmp) で入力されます。現在のユーザーのホームディレクトリを指すために「~」記号が使われているので注意してください。


earth(/tmp): rcp ~/notice.doc pluto:/home/jones


例 29–11 rloginrcp を使用してローカルファイルをリモートシステムにコピーする

次の例では、rlogin コマンドの実行後に rcp 操作が実行され、ローカルファイルをリモートディレクトリにコピーしています。操作の流れは前に示した例と同じですが、リモートログインによりパスが変更になります。


earth(/home/smith): rlogin pluto
.
.
.
pluto(/home/jones): rcp ~/notice.doc .

現在のユーザーのホームディレクトリはローカルシステム上にありますが、「~」記号によりそのディレクトリが表されます。ユーザーはリモートシステムにログインしているので、「.」記号はリモートシステム上の作業用ディレクトリを表します。次の構文を使用しても同じ操作を実行します。


pluto(/home/jones): rcp earth:/home/smith/notice.doc /home/jones