SFTPサーバーの構築とクライアント処理の自動化
鍵認証を使ったSFTP環境を構築します。
環境
- Server OS: Rocky Linux release 8.4
- Client OS: Rocky Linux release 8.4
サーバー側の設定
SFTPサーバー設定
公開鍵認証を有効にする
/etc/ssh/sshd_config
PubkeyAuthentication yes
公開鍵の保存場所を指定する
/etc/ssh/sshd_config
AuthorizedKeysFile .ssh/authorized_keys
OpenSSHでSFTPを有効にする
/etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server
設定ファイルの構文チェック
問題無ければ何も出力されません。異常が見つかった場合はエラーが出力されます。
$ sudo /usr/sbin/sshd -t
SFTP設定を反映するためにサービス再起動
$ sudo systemctl restart sshd
ユーザー
SFTP接続するユーザーをサーバーにて作成します。
ユーザー作成
$ sudo useradd [username]
作成したユーザーに切替
$ sudo su - [username]
鍵作成
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_rsa): このままエンター
Enter passphrase (empty for no passphrase): このままエンター
Enter same passphrase again: このままエンター
※今回は自動化するため、パスフレーズは空にしています
authorized_keysに公開鍵を登録する
$ cd .ssh/
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
作成したユーザーのホームディレクトリ配下にある以下の秘密鍵ファイルをクライアントの同ディレクトリにコピーします
~/.ssh/id_rsa
※SCPなどでファイル転送するか中身はテキストなのでそのまま文字列をコピペします
クライアント
秘密鍵ファイルの権限設定
$ chmod 600 ~/.ssh/id_rsa
バッチファイルの作成
$ vi sftp.bat
cd data
put test.csv
bye
※コマンドをそのまま上から順番に書きます
手動実行
$ sftp -b sftp.bat -i ~/.ssh/id_rsa username@[IPaddress or FQDN]
スケジュール実行用のシェルスクリプト作成
$ cat << EOT >> sftp.sh
#!/bin/bash
sftp -b sftp.bat -i ~/.ssh/id_rsa username@[IPaddress or FQDN]
EOT
$ chmod +x sftp.sh
スケジュール設定
$ crontab -e
30 12 * * * /home/username/sftp.sh
sftpコマンドの注意点
- sftpコマンドはパスワード認証に対応していない → 鍵認証にする必要がある
- sftpコマンドのバッチファイル実行はパスフレーズ有りの鍵認証に対応していない → パスフレーズ無しにする必要がある