Linux 講座 / SSH リモート接続と scp・sftp ファイル転送
SSH(Secure Shell)は暗号化された接続でリモートサーバーにログインし、コマンドを実行するプロトコルであり、OpenSSHのscpやsftpを使ってファイルも転送できます。初めて接続する際にはサーバーのホストキーのフィンガープリントを確認し、キー認証が検証される前に既存のログイン手段を削除しないでください。
秘密鍵のファイルモードはファイル権限の読み取り、接続時間のタイムアウトや名前確認の失敗はネットワーク診断とともに確認してください。UbuntuではSSHサービスだけでなく、ソケットの有効化状態もsystemctl status ssh.service ssh.socketで確認します。両方のユニットが常に有効である必要があるわけではありません。
システム設定実習の基準は Ubuntu 26.04 LTS と Rocky Linux 9 系の一般インストール VM です。コンテナ・WSL・別のリリースでは、サービスやパッケージの構成が異なる場合があります。仮想マシン実習環境の作成で、コンソールの復旧とバージョン確認を最初に準備してください。
クライアントとサーバーを区別してインストールする
コマンドを入力するコンピュータがクライアントで、ログインするLinuxがサーバーです。サーバーには接続可能なIPアドレス、実際のユーザーアカウント、実行中のsshdおよびそのポートを許可するネットワークポリシーが必要です。以下のインストールコマンドは、それぞれUbuntuとRocky Linuxサーバー用です。自分のディストリビューションに該当する一つのセットだけ実行してください。Ubuntuのapt updateはパッケージリストを更新します。
sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
sudo dnf install openssh-server
sudo systemctl enable --now sshd
サービス名はUbuntuのssh、Rocky Linuxのsshdが一般的ですが、実際のインストール構成を問い合わせて確認してください。ファイアウォール・クラウドセキュリティグループ・NATポート転送は別です。運用サーバーでSSHポートを変更したり認証を制限する場合は、既存の接続を開いたままコンソール復旧経路を確保します。
初回接続でサーバーの身元を確認する
サーバー管理コンソールなど、すでに信頼している経路からホスト公開鍵のフィンガープリントを確認します。下記の最初のコマンドはサーバーで、二つ目はクライアントで実行します。userとserver.exampleは実際のアカウント・アドレスに置き換えます。Ed25519ホスト鍵がない場合や、該当の暗号ポリシーで許可されていない場合は、実際に使用するホスト鍵を管理者が確認する必要があります。
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
ssh user@server.example
クライアントが表示するSHA256フィンガープリントとサーバーで確認したフィンガープリントが一致するか比較してから承認します。既存サーバーの鍵が変更されたという警告が出た場合は、再インストール・鍵の置き換えなのか攻撃の可能性があるかをまず確認してください。警告を消すためにknown_hosts全体を削除したり、ホスト鍵検証を無効にしてはいけません。サーバーが実際に交換されたことが確認された場合のみ、該当項目を管理します。
鍵ペアを作成し、公開鍵だけを登録する
ssh-keygen -t ed25519 -f ~/.ssh/linux-course-key
ssh-copy-id -i ~/.ssh/linux-course-key.pub user@server.example
ssh -i ~/.ssh/linux-course-key user@server.example
最初のコマンドで既存ファイルの上書き質問が出た場合は中止して、他のファイル名を選択します。秘密鍵にはパスフレーズを設定し、クライアントに保管し、.pub公開鍵のみサーバーに登録します。ssh-copy-idがないクライアントでは、公開鍵1行を対象アカウントの~/.ssh/authorized_keysに管理手順に従って追加します。サーバーの.sshは通常700、authorized_keysは600権限に設定し、所有者も確認します。
新しいターミナルで指定したキーでログインできるかをまず確認します。キー・ファイルを指定してもエージェントの他のキーやパスワードで認証された可能性があるため、必要であればssh -v -o IdentitiesOnly=yes -i ...出力で実際に使用された認証方式を確認してください。暗号ポリシーとFIPS環境では、サポートされるキー形式を管理ポリシーに合わせて選択します。
scpで単一ファイルを送受信してみる
次の例はクライアントで実行します。ローカルの作業フォルダーとリモートホームに、作成・取得するファイルと同名の既存ファイルがないことを先に確認し、演習用のアカウントを使ってください。
printf "SSH transfer test\n" > transfer-test.txt
scp -i ~/.ssh/linux-course-key transfer-test.txt user@server.example:~/transfer-test.txt
scp -i ~/.ssh/linux-course-key user@server.example:~/transfer-test.txt ./transfer-returned.txt
cmp transfer-test.txt transfer-returned.txt
この例はクライアントで実行します。リモートホームの同名ファイルを上書きできるため、演習用アカウントを使用し、ファイルがないか事前に確認してください。最後にcmpが出力なしで終了ステータス0であれば、両方のファイル内容は同じです。最近のOpenSSHのscpは基本伝送にSFTPを使用するため、旧SCP専用サーバーとの互換性はサーバー・クライアントのバージョンに応じて確認する必要があります。
sftpとカスタムポートの使用方法
sftp -i ~/.ssh/linux-course-key user@server.example
sftpプロンプト内で以下のコマンドを入力します。 pwd・lsはリモートの場所を、lpwd・llsはローカルの場所を示します。アップロードやダウンロードの基準となる場所を最初に確認することで、間違ったディレクトリにファイルを保存することを減らせます。
pwd
lpwd
ls
put transfer-test.txt
get transfer-test.txt transfer-sftp.txt
bye
ポートが2222の場合、sshは-p 2222を、scpとsftpは-P 2222を使用します。接続拒否の場合はポート・サービス・ポリシーを、認証失敗の場合はユーザー名・キー・権限をまず確認します。詳細ログssh -vは秘密鍵自体を出力しませんが、アドレスやアカウント・パス情報が含まれる可能性があるため、共有前に隠します。実習後は作成したファイルと不要な公開鍵登録のみを整理します。




