SSH接続とSFTPによるファイル転送
ホスト鍵の指紋、利用者の認証記録、ローカルとリモートのパスを確認します。一つのCSVを取得し、元ファイルと保存後のハッシュが一致するところまで確かめます。
説明
SSHではサーバーの身元を確かめた後、利用者を認証します。その接続上で動くSFTPを使うと、接続先と手元のファイルを転送できます。
ホスト鍵の指紋、利用者の認証記録、ローカルとリモートのパスを確認します。一つのCSVを取得し、元ファイルと保存後のハッシュが一致するところまで確かめます。
1接続先の設定
SSHは接続先サーバーのホスト鍵を確認してから、利用者の認証へ進みます。まずfilesという接続名がどのホスト・利用者・ポートを指すか表示します。
ssh -G files適用される接続設定 | grep -E '^(hostname|user|port|stricthostkeychecking) '接続・照合に関係する項目この設定ではlearnerとして22番へ接続し、ホスト鍵の厳密な照合を行います。接続名filesと実ホスト名は別です。-Gは設定を表示する処理で、認証の成功を示すものではありません。
2管理者から受け取った公開鍵の指紋
server_host.pubは管理者から別経路で受け取ったホスト公開鍵です。SHA-256の指紋を計算し、次の接続記録と照合します。
ssh-keygen -lf公開鍵の指紋を表示 server_host.pub別経路で受け取った鍵指紋は公開鍵を短く表した値です。ネットワークから取得した未知の鍵だけを根拠に登録すると、接続相手の正しさを確認できません。今回は別経路の公開鍵と一致する鍵をknown_hostsへ登録済みです。
3ホスト鍵確認と利用者認証
接続記録の必要な行を抽出します。ホスト鍵の照合後、利用者の公開鍵認証でログインし、接続先の利用者名とホスト名を確認した記録です。
grep -E記録から該当行を抽出 'Server host key:|is known and matches|Authenticated to|^learner$|^files$' ssh-session.logSSH接続と実行の記録ホスト鍵はサーバーを確かめるための鍵、利用者認証の鍵はlearnerとして入るための鍵です。同じ「公開鍵」という語でも役割が異なります。learnerとfilesは接続後に実行したwhoamiとhostnameの出力です。
4SFTP接続
SFTPはSSH接続上でファイル操作を行います。接続先のreportsディレクトリを開きます。利用者の認証鍵はこの演習用環境に設定済みです。
sftpSSH上でファイル操作 files:/home/learner/reports/接続先とリモートディレクトリここからはSFTPの対話コマンドです。シェルとは利用できるコマンドが異なります。SFTPの既定ポートはSSHと同じ22番で、FTPをTLS化したFTPSとは別のプロトコルです。
5ローカルとリモートの位置
リモートの現在位置をpwd、手元の現在位置をlpwdで確認します。
pwd接続先の現在位置
lpwd手元の現在位置同じセッションに二つのファイルシステムがあります。getの転送元はリモート、転送先はローカルです。相対パスがどちらを基準にするかを、転送前に確認します。
6名前を変えてダウンロード
report.csvを手元ではreceived.csvという名前で保存します。
get接続先から取得 report.csv接続先のファイル received.csv手元の保存名リモートのreport.csvを削除・改名する操作ではありません。手元にreceived.csvができ、接続先の元ファイルは残ります。転送の表示だけで内容まで確認済みとはせず、この後ハッシュを比較します。
7SFTPを終了
転送が終わったら対話セッションを閉じ、手元のシェルへ戻ります。
byeSFTP接続を閉じるSFTPの接続を閉じても、保存済みのreceived.csvは手元に残ります。次の操作はSFTPコマンドではなくシェルのコマンドです。
8保存内容とハッシュの照合
同じSSH設定で元ファイルのSHA-256を取得し、手元のファイルと比較します。続けて内容も表示します。
ssh files検証済み接続先で実行 'sha256sum /home/learner/reports/report.csv'元ファイルのSHA-256
sha256sum received.csv手元のSHA-256
cat received.csv取得した内容2行のハッシュが一致し、19バイトの内容もid,statusと42,readyです。ハッシュの一致は転送前後の内容が一致する確認であり、ファイルに書かれた情報そのものが正しいという証明ではありません。
まとめ
ホスト鍵の照合と利用者認証は別の処理です。
転送元・転送先のパスを明示し、保存した内容も照合します。
操作履歴と解説を振り返れます。
シェル / 通信とファイル
ssh -G files | grep -E '^(hostname|user|port|stricthostkeychecking) 'user learner hostname files.example.test port 22 stricthostkeychecking true
ssh-keygen -lf server_host.pub256 SHA256:bbXpuKG6zhzdmnxq256TlqzFBzRl2f6OOg722cYNbU8 files.example.test (ED25519)
grep -E 'Server host key:|is known and matches|Authenticated to|^learner$|^files$' ssh-session.logdebug1: Server host key: ssh-ed25519 SHA256:bbXpuKG6zhzdmnxq256TlqzFBzRl2f6OOg722cYNbU8 debug1: Host 'files.example.test' is known and matches the ED25519 host key. Authenticated to files.example.test ([192.0.2.40]:22) using "publickey". learner files
sftp files:/home/learner/reports/Connected to files. Changing to: /home/learner/reports/
pwd
lpwdRemote working directory: /home/learner/reports Local working directory: /home/learner/downloads
get report.csv received.csvFetching /home/learner/reports/report.csv to received.csv
byessh files 'sha256sum /home/learner/reports/report.csv'
sha256sum received.csv
cat received.csv0d5088e08ea46cecfb994cccd6fecae6f4a7948c4b0a94f5500eec103855bf6e /home/learner/reports/report.csv 0d5088e08ea46cecfb994cccd6fecae6f4a7948c4b0a94f5500eec103855bf6e received.csv id,status 42,ready
演習完了