OpenSSHサーバを使ったSFTP について書きましたが、SSH とSCP について何も書いていなかったので一応書いておきます。
環境について
サーバ側の環境
- Ubuntu
クライアント側の環境
- macOS Monterey
OpenSSHサーバの環境構築
OpenSSHサーバのインストール
sudo apt install openssh-server
ファイアウォール
SSHの標準ポート22/TCPを開ける
sudo ufw allow ssh
コマンドの実行後の状態を確認する
sudo ufw status verbose
→ 下記の2つが追加されている
22/tcp (OpenSSH) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
OpenSSHサーバの設定
設定ファイルの編集
sudo vi /etc/ssh/sshd_config
※ /etc/ssh/ssh_config ではなく/etc/ssh/sshd_config
設定した内容(一部抜粋)※既存の設定の変更やコメントアウトなど
AllowTcpForwarding no
X11Forwarding no
Subsystem sftp /usr/lib/openssh/sftp-server
- Subsystem sftp はSFTP を使えないようにしたい場合は、コメントアウトする
- Chroot でSFTPサーバを構築する場合は、Subsystem sftp に/usr/lib/openssh/sftp-server ではなくinternal-sftp を指定する→「OpenSSHサーバでSFTP」参照
- ちなみに、Subsystem sftp が/usr/lib/openssh/sftp-server でもChroot なSFTPができてしまいましたが、internal-sftp を指定するのが正しいようです
設定の有効化
OpenSSH サーバを再起動
sudo systemctl restart sshd
接続確認(SSH, SCP, SFTP)
ネットワークを経由しない、サーバ内のローカル接続による接続確認です。
ssh ubuntu@localhost
→ 接続に成功
exit
echo "testdata" > testfile.txt
mkdir temp
scp testfile.txt ubuntu@localhost:temp
ls temp
→ testfile.txt が格納されている
rm temp/testfile.txt
sftp ubuntu@localhost
put testfile.txt temp/
ls temp
→ testfile.txt が格納されている
rm temp/testfile.txt
quit
接続確認(クライアントからサーバ)
サーバは、前述のローカル接続による接続確認をした後の状態で行います。
なので、/home/ubuntu にtemp ディレクトリが作られていて、中にファイルがない状態です。
接続確認(SSH)
ssh ubuntu@<hostname またはipaddress>
→ 接続に成功
exit
接続確認(SCP)
echo "testdata" > testfile.txt
scp testfile.txt ubuntu@<hostname またはipaddress>:temp
scp ubuntu@<hostname またはipaddress>:temp/testfile.txt ./testfile1.txt
ls testfile1.txt
→ testfile1.txt が格納されている
rm testfile1.txt
接続確認(SFTP)
sftp sftpuser@<hostname またはipaddress>
put testfile.txt temp/
ls temp
→ testfile.txt が格納されている
rm temp/testfile.txt
quit
あとがき
単にOpenSSHサーバを使ってSSH、SCP、SFTP を使える状態にするのは簡単にできました。
ただ、サーバを安全に管理する上では運用面をしっかりする必要がありそうです。
例えば、開発したコンテンツのアップロードだけを行う要員には、Chroot でアクセスできる範囲を制限したSFTPしか使えないユーザを割り当てるなど。
今回ははじめにのようなことを書きたかったので、この辺にしておきます。