Linuxでscpコマンドを使用する方法

公開: 2022-06-28
ノートパソコンの画面上のLinux端末。
fatmawati achmad zaenuri / Shutterstock.com

scpコマンドを使用すると、Linuxコンピューター間でファイルを簡単かつ安全にコピーできます。 SSHセキュリティを使用していますが、何よりもシンプルです。 cpを使用できる場合は、 scpを使用できます。

セキュアコピープロトコルとscp

いくつかの用語を定義しましょう:SCPとscpがあります。 大文字のSCPは、セキュアコピープロトコルを表します。 小文字のscpは、セキュアcpを表します。 つまり、SCPはプロトコルであり、 scpはプログラムです。

scpは、リモートのLinuxコンピューター間でファイルをコピーするための安全で安全な手段となるように設計されています。 SSHを使用して安全な接続を確立します。 SSH(セキュアシェル)は、リモートのLinuxコンピューターにアクセスしてログインするためによく使用される暗号化ネットワークプロトコルです。 Linuxディストリビューションでは、SSH機能はOpenSSHによって提供されます。

Ubuntuでリモートデスクトップを設定する方法
関連するUbuntuでリモートデスクトップを設定する方法

SCPは歯の中でやや長く、現在の使用に関して懸念が表明されています。 OpenSSHバージョン8.8以降、SCPは非推奨と見なされています。 scpの最新の実装では、デフォルトでセキュアファイル転送プロトコルが使用されます。 SSHは引き続き安全な接続に使用されますが、ファイル転送はSFTPによって処理されます。 これはすべて目に見えず、内部で魔法のように発生し、 scp構文は同じままです。

rsyncプログラムはscpよりも優先されますが、 rsyncがインストールされておらず、root権限がないため、先に進んでインストールできないコンピューターに遭遇する可能性があります。 自己完結型ネットワーク上のコンピューターからコンピューターにファイルをコピーする場合、 scpは完全に問題ありません。 scpを機能させるには、コピー元とコピー元のすべてのコンピューターでSSHを実行している必要があります。

コンピューターにインストールされているOpenSSHのバージョンを確認するには、次のように入力します。

 ssh -V 

OpenSSHのバージョンを取得する

単一のファイルをコピーする

標準のcpコマンドと同様に、 scpはファイルをソースの場所からターゲットの場所にコピーします。 ファイルをリモートコンピュータにコピーするには、リモートコンピュータのIPアドレスまたはネットワーク名を知っている必要があります。 また、ファイルの送信先の場所に対する書き込み権限を持つユーザーアカウントの資格情報も必要です。

「sample.txt」というファイルをローカルネットワーク上の「fedora-34」というコンピューターに送信するための構文は次のとおりです。

 scp ./sample.txt [email protected]:/home/dave/Downloads/ 

単一のファイルをリモートコンピューターにコピーする

コマンドは次の要素で構成されています。

  • scp :scpコマンド
  • ./sample.txt :送信するファイル。 これは現在のディレクトリにあります。
  • dave @ :ファイルの送信先となるリモートコンピューターのユーザーアカウント。
  • fedora-34.local :リモートコンピューターのネットワーク名。
  • :/ home / dave / Downloads / :リモートコンピューター上のファイルのコピー先の場所。 コンピュータ名とパスを区切るコロン「:」に注意してください。

リモートコンピューターのアカウントのパスワードを入力するように求められたら、ファイルがコピーされます。

リモートコンピューターでファイルに別の名前を付けたい場合は、ターゲットパスにファイル名を追加できます。 同じファイルをコピーして「different-file.txt」という名前を付けるには、次の構文を使用します。

 scp ./sample.txt [email protected]:/home/dave/Downloads/different-file.txt 

単一のファイルを新しい名前でリモートコンピューターにコピーする

scpコマンドは既存のファイルをサイレントに上書きするため、ファイルをコピーするときは注意してください。 コピーしているファイルと同じ名前のファイルがターゲットコンピューターに既に存在する場合、そのファイルは上書きされて失われます。

ターゲットコンピューターがデフォルトのSSHポート22を使用していない場合は、 -P (ポート番号)オプションを使用して適切なポート番号を指定できます。

単一ファイルの取得

リモートサーバーからファイルをコピーするには、リモートサーバーをソースとして配置し、ファイルをコピーする場所のローカルパスをターゲットとして配置します。 「development-plan.md」というファイルをリモートコンピューターからローカルコンピューターの現在のディレクトリにコピーします。

 scp [email protected]:/home/dave/Downloads/development-plan.md。 

リモートサーバーからローカルコンピューターの現在のディレクトリに単一のファイルをコピーする

ローカルパスにファイル名を追加すると、ファイルがコピーされ、その名前が付けられます。

 scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md 

リモートサーバーからローカルコンピューターの現在のディレクトリに新しい名前で単一のファイルをコピーする

ファイルはコピーされますが、指定したファイル名に名前が変更されます。

 ls -hl * .md 

複数のファイルをコピーする

どちらの方向にも複数のファイルをコピーするのは簡単です。 ソースファイルはいくつでもリストできます。 ここでは、2つのマークダウンファイルとCSVファイルをコピーしています。

 scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/ home / dave / Downloads / 

複数の名前付きファイルをリモートコンピューターにコピーする

3つのファイルがリモートコンピューターにコピーされます。 ワイルドカードを使用することもできます。 このコマンドは、最後のコマンドとまったく同じことを行います。

 scp./dp  [email protected]:/home/dave/Downloads/ 

ファイル名にワイルドカードを使用して、複数のファイルをリモートコンピューターにコピーする

ディレクトリを再帰的にコピーする

-r (再帰)オプションを使用すると、1つのコマンドでディレクトリツリー全体をコピーできます。 「data」というディレクトリに2つのファイルを配置し、「data」ディレクトリ内に「CSV」というディレクトリを作成しました。 CSVファイルを「data/CSV」ディレクトリに配置しました。

このコマンドは、ファイルをコピーして、リモートコンピューターにディレクトリ構造を再作成します。

 scp -r ./data [email protected]:/home/dave/Downloads/ 

ディレクトリツリーをリモートコンピュータにコピーする

リモートサーバー間でのファイルのコピー

あるリモートサーバーから別のリモートサーバーにファイルをコピーするようにscpに指示することもできます。 構文は非常に単純です。 ソースサーバーのアカウント名とネットワークアドレス、およびターゲットサーバーのアカウント名とネットワークアドレスを指定します。 ファイルはソースサーバーからコピーされ、ターゲットサーバー上の場所にコピーされます。

構文は単純ですが、他のすべてが適切に配置されていることを確認するには、もう少し考えが必要です。 明らかに、リモートサーバー上でファイルをコピーしようとしている場所には、コマンドラインで指定したユーザーアカウントからアクセスできる必要があります。 また、そのユーザーアカウントには、その場所への書き込み権限が必要です。

より微妙な前提条件は、ローカルコンピューターとソースコンピューター間、およびソースサーバーとターゲットサーバー間でSSHアクセスを設定する必要があることです。 SSHを使用して、ソースサーバーからターゲットサーバーにログインできることを確認します。 それができない場合、 scpは接続できません。

LinuxシェルからSSHキーを作成してインストールする方法
LinuxシェルからSSHキーを作成およびインストールする方法

認証されているがパスワードなしのアクセスを使用できるようにSSHキーを設定することは、はるかに好ましい方法です。 パスワードの使用はすぐに面倒になり、ユーザーアカウントごとにパスワードの入力を求められるため、スクリプトを使用してプロセスを完全に自動化することができなくなります。

各リモートサーバーで使用しているユーザーアカウントにSSHキーを設定します。 これにより、これら2人のユーザーに他のサーバーへのシームレスなSSHアクセスが提供されました。 これにより、これら2つのユーザーアカウントを使用して、どちらの方向にもファイルを転送できます。

ローカルのUbuntuコンピューターから発行されたscpコマンドを使用して、Manjaroコンピューターの「davem」ユーザーアカウントからFedoraコンピューターの「dave」アカウントにファイルをコピーするには、構文は次のとおりです。

 [email protected]:/home/davem/man  [email protected]:/home/dave/ 

あるリモートサーバーから別のリモートサーバーにファイルをコピーする。

静かにコマンドラインに戻ります。 何が起こったのかという兆候はありません。 ニュースは良いニュースではないという前提で作業しているため、 scpはこのリモートからリモートへのコピーのエラーについてのみ報告します。 Fedoraコンピューターをチェックすると、Manjaroコンピューターからのファイルがコピーされて受信されたことがわかります。

Fedoraコンピューターで受信したManjaroコンピューターからのファイル

デフォルトでは、ファイルはソースコンピューターからターゲットコンピューターに直接コピーされます。 -3 (スリーウェイ)オプションを使用してこれをオーバーライドできます。

このオプションを使用すると、ファイルはローカルコンピューターを介してターゲットからソースに転送されます。 そのためには、ローカルコンピューターからターゲットコンピューターへのシームレスなSSHアクセスが必要です。

 scp [email protected]:/home/davem/man  [email protected]:/home/dave/ 

ローカルコンピュータを介して、あるリモートサーバーから別のリモートサーバーにファイルをコピーする

ローカルコンピュータを介してファイルをチャネリングしている場合でも、何も起こらなかったという兆候はまだありません。 もちろん、プリンの証拠は、ターゲットコンピュータをチェックすることです。

その他のオプション

-p (ファイル属性の保持)は、転送されたファイルの元のファイルの作成、所有権、およびアクセスフラグを保持します。 ソースコンピューター上の元のファイルと同じメタデータがあります。

エラーメッセージが表示された場合は、コマンドを繰り返し、 -v (詳細)フラグを使用して、転送の試行に関する詳細情報を確認してください。 出力で障害点を見つけることができるはずです。

-C (圧縮)オプションは、コピー時にファイルを圧縮し、受信時に解凍します。 これは、コンピュータ間のモデム通信が遅い時代にまでさかのぼります。 ペイロードのサイズを小さくすると、送信時間が短縮される可能性があります。

現在、ファイルの圧縮と解凍にかかる時間は、圧縮された送信と圧縮されていない送信の差よりも長くかかる可能性があります。 ただし、 scpは、同じLAN上のコンピューター間でファイルをコピーするために最適に使用されるため、伝送速度はそれほど問題にはなりません。

関連: rsyncを使用してLinuxシステムをバックアップする方法