【ITニュース解説】Using SCP on Windows: Install OpenSSH and Transfer Files
2026年10月05日に「Dev.to」が公開したITニュース「Using SCP on Windows: Install OpenSSH and Transfer Files」について初心者にもわかりやすく解説しています。
ITニュース概要
WindowsからLinuxサーバーへファイルをコピーする際、Windows標準機能のOpenSSH Clientに含まれる`scp`コマンドが便利だ。PowerShell等で`scp [ソース] [宛先]`と入力し、ディレクトリ転送やポート指定も可能。OpenSSHをインストールし、WindowsとLinuxのパス形式に注意して使おう。
ITニュース解説
システムエンジニアを目指す上で、WindowsからLinuxサーバーへファイルを安全に転送する機会は頻繁にある。その際に非常に役立つのが「SCP(Secure CoPy)」コマンドである。SCPは、SSH(Secure Shell)という暗号化された通信プロトコルを利用して、ネットワーク経由でファイルを安全にコピーするためのツールだ。Windowsでは、以前は追加ツールが必要だったが、現在はOpenSSHクライアントが標準機能として提供されているため、追加のソフトウェアをインストールすることなく、PowerShellやコマンドプロンプトから直接SCPを利用できる。
まず、自身のWindows環境でSCPコマンドが利用可能かを確認する必要がある。PowerShellを使っている場合はGet-Command scpと入力し、コマンドプロンプトの場合はwhere scpと入力してみよう。もしコマンドがシステムによって見つかれば、通常はC:\Windows\System32\OpenSSH\scp.exeといったパスが表示されるはずだ。もし見つからない場合は、OpenSSHクライアントがインストールされていない可能性がある。その場合は、Windowsの「設定」アプリを開き、「アプリ」から「オプション機能」を選択し、ここでOpenSSHクライアントをインストールできる。または、管理者権限でPowerShellを開き、Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0というコマンドを実行してインストールすることも可能だ。インストール後は、新しいターミナルウィンドウを開き、再度SCPコマンドの確認を行おう。OpenSSHクライアントをインストールすると、SCPだけでなく、SSH接続を行うsshコマンド、より高機能なファイル転送を行うsftpコマンド、SSHキーペアを生成するssh-keygenコマンドなども利用できるようになる。
ファイルの転送は非常にシンプルで、scp [オプション] ソース デスティネーションという基本形式に従う。ここで「ソース」は転送元のファイルやディレクトリ、「デスティネーション」は転送先の場所を指す。転送元または転送先がリモートのLinuxサーバーである場合、その場所はユーザー名@ホスト名:パスという形式で記述する。例えば、WindowsのローカルにあるファイルをLinuxサーバーへアップロードする場合は、scp C:\Users\dana\report.csv dana@server:/home/dana/のように記述する。この例では、C:\Users\dana\report.csvがローカルのWindows上のファイルであり、dana@server:/home/dana/がリモートのLinuxサーバー上の場所となる。逆に、LinuxサーバーからWindowsへファイルをダウンロードする場合は、ソースとデスティネーションの順序を入れ替えるだけでよい。具体的には、scp dana@server:/home/dana/report.csv C:\Users\dana\Downloads\のように記述する。ここで重要なのは、ローカルのWindowsパスにはバックスラッシュ(\)を、リモートのLinuxサーバーパスにはフォワードスラッシュ(/)を使用するという点だ。
単一のファイルだけでなく、ディレクトリ(フォルダ)とその中身すべてをコピーしたい場合は、-rオプションを追加する。これは「再帰的(recursive)」を意味するオプションで、指定されたディレクトリ内のサブディレクトリやファイルもすべてコピー対象とすることを指示する。例えば、scp -r C:\Users\dana\reports\ dana@server:/home/dana/reports/とすることで、C:\Users\dana\reportsディレクトリとその全コンテンツがLinuxサーバーの/home/dana/reportsにコピーされる。この-rオプションを付け忘れると、SCPはディレクトリの中身をコピーせず、エラーになるか、意図しない動作となるため注意が必要だ。
SSHサーバーが標準のポート番号(22番)以外で動作している場合や、特定のSSH秘密鍵を使って認証したい場合は、追加のオプションを利用する。カスタムポートを指定するには、大文字の-Pオプションを使用し、その後にポート番号を続ける。例えば、ポート2222番を使用する場合は、scp -P 2222 C:\Users\dana\report.csv dana@server:/home/dana/となる。ここで注意が必要なのは、ポート指定のオプションは必ず大文字の-Pを使うという点だ。小文字の-pオプションはファイルの変更時刻やパーミッションを保持するためのもので、ポート指定とは異なる役割を持つ。また、パスワード入力の代わりに秘密鍵を使って認証を行う場合は、-iオプションに続けて秘密鍵ファイルのパスを指定する。例えば、scp -i C:\Users\dana\.ssh\id_ed25519 C:\Users\dana\report.csv dana@server:/home/dana/のように使う。秘密鍵は、通常.pubという拡張子が付いていないファイルの方だ。.pubファイルは公開鍵であり、サーバー側に登録するものである。
Windowsのパスを扱う際には、いくつかの特別な注意点がある。もしパスにスペースが含まれている場合、シェル(PowerShellやコマンドプロンプト)がそれを一つの引数として認識できるように、パス全体をダブルクォーテーション(")で囲む必要がある。例えば、scp "C:\Monthly Reports\summary.csv" dana@server:/home/dana/のように記述する。また、あなたのシステムには複数のSCPプログラムがインストールされている可能性もある。例えば、Windows OpenSSHだけでなく、Git for WindowsやCygwin、WSL(Windows Subsystem for Linux)などもそれぞれ独自のSCP実行ファイルを提供している場合がある。どのSCPが使用されているかを確認するには、PowerShellでGet-Command scp -All、コマンドプロンプトでwhere scpと実行してみるとよい。さらに、一部の古いSCPクライアントや非Windows版のOpenSSHビルドでは、WindowsパスのC:\Users\のようなコロン(:)をリモートホストとパスの区切りとして誤解釈することがある。もしファイルが存在するにもかかわらず「不明なホスト」や「ファイルが見つからない」といったエラーに遭遇した場合は、一度そのファイルのディレクトリに移動し、相対パスでファイルを指定してみると解決することがある。例えば、cd C:\Users\danaと移動してから、scp report.csv dana@server:/home/dana/と実行する、といった方法だ。
ファイル転送がうまくいかないときは、問題を階層的に診断していくと解決しやすい。まず、「scpが認識されない」というエラーが出る場合、OpenSSHクライアントが正しくインストールされていないか、環境変数PATHにSCPの実行ファイルへのパスが通っていない可能性がある。インストールを確認し、必要であれば新しいターミナルを開いてみよう。次に、「そのようなファイルまたはディレクトリはありません」というエラーが出た場合は、指定したローカルのソースファイルが存在するか、リモートのデスティネーションディレクトリが存在するかを確認する。この際、ローカルパスはWindows形式(バックスラッシュ)、リモートパスはLinux形式(フォワードスラッシュ)になっているかを改めてチェックしよう。「パーミッション拒否」のエラーは、リモートサーバーでのユーザー名が間違っている、デスティネーションディレクトリへの書き込み権限がない、あるいは指定した秘密鍵がサーバーに受け入れられていない場合に発生する。秘密鍵を使用している場合は、それがサーバーに登録された公開鍵と対になる正しい秘密鍵かを再確認しよう。最後に、「接続拒否」のエラーは、サーバー名が間違っている、SSHポートが間違っている(-Pオプションで指定する)、SSHサービスがサーバー側で稼働していない、またはネットワークやファイアウォールの設定が接続をブロックしている可能性を意味する。これらのチェックを順に行うことで、問題がローカル環境にあるのか、SSH接続自体にあるのか、あるいはリモートサーバーの設定にあるのかを特定しやすくなる。
最後に、SCPコマンドとSCPプロトコルについて少し触れておく。実は、scpというコマンド自体は、古いSCPプロトコルだけでなく、より新しく安全な「SFTP(SSH File Transfer Protocol)」プロトコルを使ってファイル転送を行うことができる。OpenSSH 9.0以降のscpコマンドは、デフォルトでSFTPプロトコルを使用するようになっているが、コマンドの書式はこれまでと変わらないため、ユーザーは特に意識することなく利用できる。もし、非常に古いサーバーで、レガシーなSCPプロトコルしかサポートしていないような環境に接続する必要がある場合は、-Oオプションを付けてscp -O C:\Users\dana\report.csv dana@server:/home/dana/のように強制的に古いプロトコルを使用させることが可能だ。これにより、互換性の問題にも対応できる。このように、scpコマンドは、そのシンプルながら強力な機能で、WindowsとLinux間での安全なファイル転送を容易にする必須ツールなので、システムエンジニアを目指す上でぜひ習得しておくとよいだろう。