LADP認証でSTFPサーバを使用するサンプルスクリプト

LDAPサーバのある環境でSFTP通信をバッチかしたい場合のサンプルスクリプトです。

環境(前提条件)
●LDAP認証設定済み
RHEL側でsssdやnslcd等を使い、LDAPアカウントでログインできる状態。
すでにgetent passwd <LDAPユーザ名>で認証確認済み。
●SFTP接続先
ホスト名:sftp.example.com
接続ポート:22
LDAPユーザID:ldapuser
●LDAPパスワード:対話なしで入力できるようsshpassを使用(パスワード認証方式)。
送信するファイル
/data/upload/test.txt をSFTPサーバの /incoming/ にアップロード。
●sshpassがインストールされていること
RHEL9ではEPELリポジトリからインストール可能
参考:)https://nets-tip.com/?p=3454
sudo yum install -y sshpass

以下コードです。
#!/bin/bash
#============================================
# SFTP自動送信スクリプト(LDAP認証)
#============================================

# 接続情報
SFTP_HOST="sftp.example.com"
SFTP_PORT="22"
SFTP_USER="ldapuser" # LDAPのユーザ
SFTP_PASS="YourLdapPassword" # ※パスワード(後述参照:パスワードが平文で記載)

# 転送ファイルとアップロード先ディレクトリ
LOCAL_FILE="/data/upload/test.txt"
REMOTE_DIR="/incoming/"

# sshpassコマンド存在チェック
if ! command -v sshpass >/dev/null 2>&1; then
echo "Error: sshpass がインストールされていません。"
echo "RHELの場合: sudo yum install -y sshpass"
exit 1
fi

# SFTP転送
sshpass -p "$SFTP_PASS" sftp -oPort=$SFTP_PORT -oStrictHostKeyChecking=no "$SFTP_USER@$SFTP_HOST" <<EOF
cd $REMOTE_DIR
put $LOCAL_FILE
bye
EOF

# 結果判定
if [ $? -eq 0 ]; then
echo "SFTP転送が正常に完了しました。"
else
echo "SFTP転送に失敗しました。"
exit 1
fi
ここまで

パスワード平文保存は避ける
上記はサンプルなので変数に直接書いていますが、実運用では以下の対応が望ましい
.netrc や環境変数で渡す
read -s で実行時入力
ssh-keygen+公開鍵認証に切替を検討(LDAPはログイン制御のみ)

サンプルなので通信テストなどでご利用ください。

ご参考まで。

関連記事

TOP