遅かれ早かれ、SSH経由でリモートサーバーにファイルをアップロードするか、そこからファイルをコピーする必要がある状況に気付くでしょう。
SSH経由でファイルを転送する方法はいくつかあります。ここでは、次の方法について説明します。
- scp:非推奨になっているレガシーコマンド
- rsync:ファイル同期用の一般的なコマンド
- sshfs:SSH経由でリモートディレクトリをマウントする
- sftpクライアント:SFTP経由でファイルにアクセスするためのGUIツール
SSHを介したファイル転送を成功させるには、次のことを行う必要があります
- 2台のマシン間でSSHアクセスできるようにする
- リモートマシンのユーザー名とパスワードを知る
- リモートマシンのIPアドレスまたはホスト名(同じサブネット上)
それはさておき、SSHを介してリモートシステム間でファイルをコピーする方法を見てみましょう。
方法1:scpコマンドを使用してSSH経由でファイルをコピーする
scpは非推奨になることを読みました。それでも、SSHを介してシステム間でファイルを転送するための私のお気に入りのツールです。なんで?その構文はcpコマンドに似ているためです。
scpコマンドの使用方法を見てみましょう。
これがシナリオです。リモートLinuxシステムから現在ログインしているシステムにファイルをコピーしたい。
これは、リモートシステム上のユーザーのホームディレクトリからローカルにログインしているシステムの現在のディレクトリにファイルをコピーする一般的な構文です。
scp [email protected]_address:/home/username/filename .
cpコマンドとの類似点はわかりますか?ユーザー名とIPアドレスをコロン(:)で指定する必要があることを除いて、ほとんど同じです。
ここで、このコマンドの実際の例を示します。
上記の例では、ファイルremote.txt
をコピーしました /home/abhishek/my_file
から リモートシステム上のディレクトリをローカルマシンの現在のディレクトリに移動します。
これにより、リモートシステム上のファイルの正確な場所を知っておく必要があるというヒントが得られます。タブ補完はリモートシステムでは機能しません。
ここではシナリオが少し変更されています。これでは、scpを使用してSSH経由でリモートシステムにローカルファイルを送信しています。
これは、ファイル名をリモートシステムのユーザー名のホームディレクトリにコピーする一般的な構文です。
scp filename [email protected]_address:/home/username
上記の例では、local.txt
をコピーしました 現在のディレクトリからユーザーのホームディレクトリへのファイルabhishek
リモートシステム上。
次に、リモートシステムにログインして、ファイルが実際にコピーされたことを示しました。
cpコマンドと類似しているのでscpが好きだと言ったことを覚えていますか?
cpコマンドと同様に、scpを使用してSSH経由でディレクトリをコピーすることもできます。構文もcpコマンドに似ています。 -r
を使用するだけです オプション。
scp -r source_dir [email protected]_address:/home/username/target_dir
あなたはそれでもっとたくさんのことができます。このチュートリアルでscpコマンドの例をさらに読んでください:
方法2:rsyncを使用してSSH経由でファイルとディレクトリをコピーする
scpは廃止されているため、rsyncはSSHを介してリモートシステム間でファイルをコピーするための次善のツールです。実際、多くの点でscpよりも優れています。
コマンド構文はscpと同じです。古いバージョンのrsyncはrsync -e ssh
を使用する必要がありました しかし、それはもうそうではありません。
リモートシステム上のユーザーのホームディレクトリから、ローカルにログインしているシステムの現在のディレクトリにファイルをコピーするとします。
rsync [email protected]_address:/home/username/filename .
scpで見たのと同じ例を見てみましょう。ファイルremote.txt
をコピーしています /home/abhishek/my_file
から リモートシステム上のディレクトリをローカルマシンの現在のディレクトリに移動します。
これは、ファイルをリモートシステムのusernameのホームディレクトリにコピーする一般的な構文です。
rsync filename [email protected]_address:/home/username
実際の例を見てみましょう。 local.txt
をコピーしています 現在のディレクトリからユーザーのホームディレクトリへのファイルabhishek
リモートシステム上。
rsyncを使用してディレクトリをコピーするのはどうですか?
それは同じだ。 -r
を使用するだけです リモートシステム間でSSH経由でディレクトリ全体をコピーするrsyncのオプション。
rsync -r source_dir [email protected]_address:/home/username/target_dir
この例を見てください。 my_fileディレクトリ全体をリモートシステムからローカルシステムにコピーします。
rsyncは用途の広いツールです。これは本質的に、2つのディレクトリ間でコンテンツを「再帰的に同期」するためのツールであり、自動バックアップを作成するために非常に人気があります。
方法3:SSHFSを使用してSSH経由でリモートシステムからファイルにアクセスする
リモートファイルやディレクトリにアクセスするために使用できるSSHFS(SSHファイルシステム)もあります。ただし、これはファイルをコピーするだけではあまり便利ではありません。
この方法では、リモートディレクトリをローカルシステムにマウントします。マウントすると、マウントされたディレクトリとローカルシステムの間でファイルをコピーできます。
最初にディストリビューションのパッケージマネージャーを使用して、ローカルシステムにsshfsをインストールする必要がある場合があります。
DebianとUbuntuでは、次のコマンドを使用できます:
sudo apt install sshfs
システムにsshfsをインストールしたら、それを使用してリモートディレクトリをマウントできます。マウントポイント専用のディレクトリを作成することをお勧めします。
mkdir mount_dir
次に、次の方法で目的のディレクトリをリモートマシンにマウントします。
sshfs [email protected]_address:path_to_dir mount_dir
マウントされると、ローカルマシン自体にあるかのように、このディレクトリまたはこのディレクトリからファイルをコピーできます。
cp local_file mount_dir
このファイルをマウントしたことを忘れないでください。作業が完了したら、マウントを解除する必要もあります:
umount mount_dir
これは、my_file
をマウントした例です。 リモートシステムからremote_dir
へのディレクトリ ローカルシステム上のディレクトリ。 remote.txt
をコピーしました ファイルをローカルシステムに保存してから、ディレクトリをアンマウントします。
方法4:リモートシステム間でファイルを転送するためにGUIベースのSFTPクライアントを使用する
最後の手段として、FTPクライアントを使用してリモートシステムとローカルシステム間でファイルを転送できます。
FileZillaは、最も人気のあるクロスプラットフォームFTPクライアントの1つです。ローカルシステムに簡単にインストールできます。
インストールしたら、ファイル->サイトマネージャーに移動します IPアドレス、SSHポート番号、ユーザー名、パスワードなどのリモートシステムの詳細を追加します。
接続すると、左側にローカルファイルシステム、右側にリモートファイルシステムを表示する分割ウィンドウビューが表示されます。
ファイルを転送するには、ファイルを左から右または右から左にドラッグアンドドロップします。下部にプログレスバーが表示されます。
どちらの方法が好きですか?
大丈夫! SSH経由でファイルをコピーするために使用できるさまざまなコマンドラインとGUIメソッドを示しました。
ここで使用する方法を決定するのはあなた次第です。 SSH経由でファイルを転送するための好ましい方法をコメントしてください。