私は、expect/SH スクリプトで SFTP を実行しているため、かなり長い間このサイトに潜んでいました。リモートサーバーにアクセスできないため、SSH keygen はオプションではありません。そのため、expect を使用して SFTP のパスワード arg を提供することを検討しています。
これが私が取り組んでいるスクリプトです。転送(「mput」)が正常に完了した場合に出力ファイルをキャプチャまたはログすることを除いて、すべてがここで機能しています。「mput」の後にどのコードを配置するかについてのアドバイスは、その後にexpect_out(buffer)を追加すると失敗するためです。
#!/bin/ksh
DIRROOT=/apps/gen/e2k/sys/bpp
COPYDIR=$DIRROOT/SENT
FILEHASH=TEST.SOME.FILE.*
if [ ! -f $COPYDIR/$FILEHASH ]; then
echo "No File"
fi
# New FTP credential from GIC
FTPSERV=**********
FTPUSER=**********
FTPPWD=**********
FTPDIR=/to-scs
/usr/local/bin/expect -f - <<EOFEXPECT1
#exp_internal 1
set timeout -1
set log [open "/dir/dir1/dir2/MIKETEST.txt" w]
spawn sftp -oPort=10022 $FTPUSER@$FTPSERV
expect "password:"
send "$FTPPWD\r";
expect "sftp> "
send "lcd $COPYDIR \r";
expect "sftp> "
send "cd /recipient \r";
expect "sftp> "
send "mput TEST.SOME.FILE.*\r";
put $log $expect_out(buffer)
close $log
expect "sftp> "
send "bye\r";
expect eof
EOFEXPECT1
if [ $? -eq 0 ]
then
echo "success"
else
echo "fail"
fi