(最終更新月:2022年9月)
✔このような方へ向けて書かれた記事となります
「scpコマンドって何ができるの?」
「scpコマンドの使い方が知りたい」
「scpコマンドを使った実例を教えて!」
✔当記事を通じてお伝えすること
- scpコマンドの基礎知識
- 【実例】scpコマンドでWindowsへファイルコピー
- scpコマンドオプション一覧
当記事では、scpコマンドの基本や使い方だけでなく、筆者が実際に使っているscpコマンドの実例と活用方法も公開しています。
ぜひ最後までご覧ください。
Reactアプリのビルド&デプロイを簡易化するために、以下のようなaliasを設定。
— ITC (@ITC202012) September 9, 2023
alias bdapp='npm run build && scp -r dist ユーザー名@ドメイン名:/home/REACTのdistフォルダがあるディレクトリ/'
npm run build→scpコマンドで自動デプロイ。https://t.co/pbzgqE07X8#react #linux #scp
scpコマンドの基礎知識
まずはscpコマンドの基礎知識をお伝えします。
後述している実例を理解するには、こちらの基礎知識が大切です。
- scpコマンドとは?
- scpコマンドの構成
- scpコマンドでディレクトリごとコピー
- scpコマンドで複数のファイルをコピー
scpコマンドとは?
scpコマンドとは、2台のコンピューター間で、ファイルやディレクトリをコピーするコマンドです。
目の前で利用しているコンピューターを「ローカルコンピューター」、コピー先のコンピューターを「リモートコンピューター」といいます。
SSH接続を使って、ファイルやフォルダを、ローカルコンピューターからリモートコンピューターへ、コピーします。
「SSH接続って何?」という方は以下をご覧ください。
scpコマンドの構成
scpコマンドの構成は以下のとおりです。
scp コピー元のファイルパス コピー先でのユーザー名@コピー先のIPアドレス(ドメイン):コピー先のファイルパス
たとえば私はReactフレームワークで作られた「dist」というフォルダをリモートコンピューターへコピーし、アプリ公開をしています。
以下のようなコマンドです。
scp -r dist username@example.com:/home/yulikepython/www/
「コピー元ファイルパス」の書き方
コピー元ファイルの書き方は2通りです。
- 絶対パスで記述(/home/yulikepython/documents/test.txt)
- 相対パスで記述(test.txtなど)
実行する場所が決まっているなら相対パスで問題ありませんが、どこからでも実行できるようにするなら絶対パスがおすすめです。
コピー先情報の書き方
以下のとおり、コピー先の情報が必要になります。
- ユーザー名
- IPアドレス(ドメイン名)
- ファイルパス
ファイルパスは、保存したいフォルダを指定すればOKです。
ユーザー名は、リモートコンピューターにアクセスする際のユーザー名を入力します。
たとえば、
- ユーザー名「yulikepython」
- IPアドレス「192.168.11.11」
- 保存先フォルダ「/home/user/」
の場合は以下のとおり。
yulikepython@192.168.11.11:/home/user/
今までの内容を合算すると以下のとおりになります。
scp /home/yulikepython/documents/test.txt yulikepython@192.168.11.11:/home/user/
実行すると、ログインパスワードを求められるので、入力すれば完了です。
scpコマンドでディレクトリごとコピー
もしフォルダごとコピーしたいなら、-rオプションを、scpのあとに入力します。
scp -r dir1 yulikepython@192.168.11.11:/home/user/
scpコマンドで複数のファイルをコピー
複数のファイルをコピーするには2通りの方法があります。
- ファイル名をスペースで区切って記述
- 「*」を使う
ファイル名をスペースで区切って記述
ファイル名をスペースで区切れば複数のファイルを指定できます。
以下は「test1.txt」「test2.txt」をコピーする例です。
scp test1.txt test2.txt yulikepython@192.168.11.11:/home/user/
「*」を使う
「*」を使うと、当てはまるもの全てとなります。
たとえばtxtファイルを全てコピーしたいなら以下のとおり。
scp *.txt yulikepython@192.168.11.11:/home/user/
scpコマンドでWindowsコンピューターへファイルをコピー
scpコマンドを使ってWindowsコンピューターへファイルをコピーする方法をお伝えします。
流れとしては以下のとおり。
- WindowsでSSHサーバーを構築する方法
- 別コンピューター(Linux)からscpコマンドでWindowsへコピー
WindowsでSSHサーバーを構築する方法
Windowsコンピューターで、SSHサーバーを構築するには、以下のステップが必要です。
- WindowsでOpenSSH サーバーをインストール
- SSHサーバーのデフォルトターミナルをGit bashへ変更する
- WindowsでSSHサーバーを起動する
WindowsでOpenSSH サーバーをインストール
WindowsではOpenSSH サーバーというアプリをインストールしなければ、SSHでの接続ができません。
以下の手順で進めましょう。
設定 > アプリへ進みます。
オプション機能へ進みます。
Open SSHがあるかどうかを確認し、なければ機能の追加をクリックします。
検索バーに「openssh」と打ち込み、Open SSHをインストールします。
SSHサーバーのデフォルトターミナルをGit bashへ変更する
OpenSSHサーバーの設定を書き換える必要があります。
なぜならこのままSSH接続をしても、コマンドプロンプトが立ち上がることになり、上手くいかないからです。
LinuxやMacで使えるターミナル「Git bash」が立ち上がるように設定しましょう。
Power Shellを右クリックし、管理者権限で立ち上げたら、以下のコマンドを入力してください。
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force
WindowsでSSHサーバーを起動する
設定の変更が完了したら,サーバーを起動します。
サーバーはインストールしただけでは、起動されていないからです。
PS C:\WINDOWS\system32> Start-Service sshd
別コンピューター(Linux)からscpコマンドでWindowsへコピー
WindowsコンピューターでSSHサーバーが起動したら、いよいよファイルのコピーに入ります。
まずはSSH接続で、サーバーが起動しているか試しましょう。
起動できていたら、別のターミナルでscpコマンドを入力します。
パスワードを求められるので、ログイン時のパスワードを入力すればOKです。
確認してみるとコピーされているのがわかりますね。
無事Windowsコンピューターへscpを使ってファイルコピーができました。
scpコマンドのオプション一覧
こちらではscpコマンドで使えるオプションの解説をします。
オプション一覧を知っておけば、できることの選択肢が広がるからです。
- ディレクトリごとコピー:-r
- 通信の圧縮:-C
- 秘密鍵ファイルの指定:-i
- ポート番号の指定:-P
- configファイルの指定:-F
ディレクトリごとコピー:-r
-rオプションを使うと、ディレクトリごとコピーできます。
scp -r ディレクトリ名 保存先情報
通信の圧縮:-C
-Cオプションを使うと通信を圧縮できます。
scp -C *.txt 保存先情報
秘密鍵ファイルの指定:-i
秘密鍵ファイルがデフォルトの「~/.ssh/id_rsa」以外の場合、指定する必要があります。
scp -i /home/yulikepython/.ssh/original_file コピー元ファイル コピー先情報
「/home/yulikepython/.ssh/original_file」が秘密鍵ファイル情報です。
ポート番号の変更:-P
SSHのポート番号を変更している場合、-Pオプションを使って指定します。
scp -P 10000 *.txt 保存先情報
ポート番号が「10000」の例です。
configファイルの指定:-F
-Fオプションを使うと、指定したconfigファイルを読み込めます。
scp -F original_config コピー元ファイル 保存先情報
「original_config」が指定したconfigファイルになります。
scpコマンド|パスワードから秘密鍵へ変更する
ローカルとリモートのコンピューターでとくに設定を済ませてなければ、scpコマンドを実行する度にパスワードの入力が必要です。
もし何度もやりとりをするコンピューターで、パスワードの入力が面倒なら、秘密鍵の設定がおすすめです。
設定方法は以下の記事で解説しています。
まとめ:コンピューター間でコピーしたいならscpコマンドは最適
当記事の内容をまとめます。
- scpコマンドは、コンピューター間でファイルをコピーできるコマンド
- Windowsへファイルコピーするなら、Windows側での設定が必要
- scpコマンドを使えば、追加の機能が追加できる
scpコマンドの構成は、以下のとおり。
scp コピー元ファイル コピー先情報
コピー元ファイルやコピー先情報の書き方だけ気をつければ簡単に実行できます。
✔Linuxの主要コマンド37選