SFTPサーバーに接続する自動バックアップタスクを実行する必要があります。最初の段階では、サーバーに接続してサーバー接続をテストします。確実に正しいサーバーに接続していることを確認するために、ssh_configのStrictHostKeyChecking
をyesに設定しています。
したがって、SFTPサーバーへの接続が確立されたときに、サーバーからの応答をスクリプト化する方法を教えてください。擬似コードは次のとおりです。
If connection success
disconnect
initiate backup procedure
Else
log error
exit script
追加情報:
使ってます ForceCommand internal-sftp
バックアップサーバーのsshd_configにあるため、ssh
コマンドを実行することは問題外です。
ほとんどの「SSHファイル転送プロトコル(SFTP)クライアント」は、主に/最初にインタラクティブな使用のために構築されています。
これは、バッチモードオプションなどがないことを意味するわけではありませんが、SSHプロトコルを介したスクリプトベースのファイル転送を探している場合は、代わりにscp
またはlftp
を確認してください。
lftp
(homepage) はすべての自動ファイル転送で使用するものであり、信頼性の高い終了ステータスを備えた優れたエラー処理を備えています。信頼性を考慮して設計されています。
lftp
には多くのオプションがあり、使用する特定の接続プログラムを指定する場合は、-oStrictHostKeyChecking=yes
などの任意のssh
オプションを指定できます。
例:
MYSSHOPTIONS="-oStrichtHostKeyChecking=yes"
CONNPROG="ssh -a -x ${MYSSHOPTIONS}"
cat > ${cmdfile} <<- EOF
set sftp:max-packets-in-flight 16
set sftp:connect-program ${CONNPROG}
open -u ${remoteuser},${password-unless-pubkey-setup} sftp://${remotehost}
put localfile -o remotepathname
EOF
lftp -f ${cmdfile} > ${sendlog} 2>&1
RC=$?
if test $RC -ne 0
then
failed
else
reliably OK
fi
例は少し長いです。いくつかのオプションを設定するコマンドファイルを作成し、1つのファイルlocalfile
をオプションで別のremotepathname
とともにアップロードします。
lftp
を使用したくない場合は、sftpバリアント:Sftpログインアクセスの確認に関心がある場合は、このテンプレートを出発点として使用して、さらに実験することができます。
#!/ bin/sh- mykey =/home/localuser/.ssh/id_rsa remusr = bupuser remhost = server。 destination.domain.com tmpfile =/tmp/sftptest。$$ cleanup(){ rm -f $ {tmpfile} } トラップクリーンアップ0 sftp -i $ mykey -oPubkeyAuthentication = yes -oPasswordAuthentication = no -oKbdInteractiveAuthentication = no -oStrichtHostKeyChecking = yes $ {remusr} @ $ {remhost} $ {tmpfile} 2>&1 dir exit EOF ST = $? if test $ ST -ne 0 次に echo SFTP LOGIN FAILURE。 RC = $ {ST} 1>&2 exit $ ST fi cat $ {tmpfile}#またはいくつかの巧妙なgreppingを実行します $ STを終了
sftp
接続テストを実行するだけで、ssh
接続をテストできます。
if $(ssh -q [email protected] exit)
then
echo yes
fi
サーバーがssh
を許可しない場合は、nmap
を使用できますが、キー認証はテストされません。
nmap myserver.bfworks.com -PN -p ssh | grep 'open'