SSHキー認証でSCP(セキュアコピー)を使用する方法

SSHキー認証でSCP(セキュアコピー)を使用する方法

Linuxマシンを管理する人なら、セキュアシェル(SSH)についてご存知でしょう。このツールがなければ、これらのサーバーをリモートで管理するのは非常に困難です。また、少なくともある程度のセキュリティを確保した上で、ファイルのやり取りも難しくなります。そこで、セキュアコピー(SCP)が役立ちます。SCPコマンドを使えば、暗号化されたSSHトンネルを介してリモートLinuxサーバーとの間でファイルをコピーできます。

参照: Linux、macOS、WindowsでSSHキーを表示する方法

しかし、SSHキー認証を使えば、さらにセキュリティを高めることができます。セキュアキー認証とSCPを使って、ファイルの安全なやり取りを実現する方法をご紹介します。Elementary OSクライアントとUbuntu 16.04.1サーバーを使用し、セキュアシェルがインストールされ、動作していることを前提としています。

1ニンジャワン

企業規模

企業規模ごとの従業員数

マイクロ(0~49)、スモール(50~249)、ミディアム(250~999)、ラージ(1,000~4,999)、エンタープライズ(5,000以上)

小規模(従業員50~249名)、中規模(従業員250~999名)、大規模(従業員1,000~4,999名)、エンタープライズ(従業員5,000名以上) 小規模、中規模、大規模、エンタープライズ

特徴

監視、パッチ管理

SSHキー

まず最初に、SSHキーペアを作成する必要があります。これを行うには、ターミナルウィンドウを開き、次のコマンドを実行します。

ssh-keygen -t rsa

ファイルに名前を付け(デフォルトを使用)、キーペアにパスフレーズを入力するように求められます。

キーのランダムアートが印刷されると、キーは使用可能になります。

次のステップは、キーをリモートサーバーにコピーすることです。これは次のコマンドで実行できます。

ssh-copy-id USER@SERVER

ここで、USER はリモート サーバーのユーザー名、SERVER はリモート サーバーのアドレスです。

リモートユーザーのパスワードの入力を求められます。認証に成功すると、公開鍵がサーバーにコピーされます。これで準備完了です。

参照: Linux のセキュリティ保護ポリシー (Tech Pro Research)

キーを使ってSCPを使用する

鍵がすべて適切な場所に配置できたので、SCP経由でどのように使用できるか確認してみましょう。SSH鍵の作成時にデフォルトの名前をそのまま使用した場合、SSH鍵を使ってリモートサーバーにファイルを送信するコマンドは以下のとおりです。

scp -i ~/.ssh/id_rsa.pub FILENAME USER@SERVER:/home/USER/FILENAME

ここで、FILENAME はファイル名、USER はリモート マシンのユーザー名、SERVER はリモート サーバーのアドレスです。

SSHキーのパスワード(ユーザーパスワードではありません)の入力を求められます。認証が完了すると、ファイルが転送されます。

リモートサーバーからファイルを取得する場合も同様です。このコマンドの構造は次のようになります。

scp -i ~/.ssh/id_rsa.pub USER@SERVER:/home/USER/FILENAME /home/USER/FILENAME

再度、SSH キーのパスワードの入力が求められ、ファイルがサーバーから取得され、ローカル マシンにコピーされます。

参照: Linux のknown_hosts ファイルに SSH フィンガープリントを追加する方法

パスワードを忘れた場合

サーバーにファイルをコピーする長時間の作業を行うとします。もちろん、すべてのファイルを一つの大きなファイルにtarで圧縮することもできますが、すべてのファイルを別々のディレクトリに配置する必要があるとしたら、入力作業が膨大になります。コマンドssh-agentssh-addコマンドを使えば、この作業を少し効率化できます。

そうです、SCPとSSHキー認証の組み合わせを使うとssh-agentうまくいきます。こうすることで、SCPコマンドを発行するたびにSSHキーのパスワードを入力する必要がなくなります。ただし、エージェントセッションのPIDを覚えておき、終了したら必ず終了させて​​おく必要があります。

あなたがやるべきことは次のとおりです。

  1. SCP コマンドを発行する前に、eval を発行しssh-agentてセッションを開始します。
  2. セッションの開始時に付与されるプロセス ID をメモします。
  3. コマンドを使用して、SSH キーをセッションに追加しますssh-add
  4. SCP を使用してファイルのコピーを開始します。

これで完了です。セッションが終了したら、kill PIDコマンドを実行してください(PIDは、evalでssh-agentセッションを開始したときに割り当てられた実際の番号です)。

参照: Linux ネットワークを簡単にする 20 のクイックヒント (無料 PDF) (TechRepublic)

SCP はまだ安全ですか?

SCP が安全かどうかを尋ねる人は、おそらく OpenSSH 8.0 の 2019 リリース発表を読んだのでしょう。その発表では、SCP プロトコルは「時代遅れで、柔軟性に欠け、簡単に修正できない」と述べられており、ファイル転送の代替として SFTP と Rsync が推奨されています。

OpenSSH 8.0より前のバージョンでは、SCPは転送中にファイルの整合性を検証できなかったため、サーバーが侵害された場合、ユーザーは不正な上書きやインジェクション攻撃の危険にさらされていました(CVE-2019-611)。しかし、今回のアップデートでは、SCPコマンドのデフォルトとしてより厳格なファイル名チェックが導入され、セキュリティが向上しました。また、以前のチェックを行わない動作は コマンドに移行されましたscp -T

その後、2022年にリリースされたOpenSSH 9.0では、従来のSCP/RCPプロトコルではなく、SCPのデフォルトバックエンドとしてSFTPが採用されました。つまり、転送はSSHプロトコルで暗号化され、認証されるようになりました。SFTPは広く安全であると認識されていますが、サーバーの設定ミスやソフトウェアバージョンの古さといったリスクにも注意が必要です。

SCP の代わりに何が使えますか?

  • SFTP: SCP はデフォルトで SFTP プロトコルを使用しますが、ディレクトリの表示やファイルの削除など、より多くの操作が可能なため、高度なファイル管理にはネイティブ SFTP クライアントの使用を検討できます。
  • Rsync:ファイルとディレクトリの同期に最適です。特に増分バックアップや大規模なデータセットに最適です。Rsyncを使ったネットワークバックアップの方法について、TechRepublicのガイドをご覧ください。
  • FTPS: SSL/TLS 暗号化を使用した従来の FTP 転送の安全なオプションですが、構成が複雑になる場合があります。
  • HTTPSベースのツール:curl HTTPS経由の安全なダウンロードには、や などがありますwget。自動化には最適ですが、SFTPのような完全なディレクトリ管理機能は提供されていません。

フィオナ・ジャクソンは2025年1月にこの記事を更新しました。

Tagged: