web-dev-qa-db-ja.com

SFTPログインステータスをテストするスクリプト?

SFTPサーバーに接続する自動バックアップタスクを実行する必要があります。最初の段階では、サーバーに接続してサーバー接続をテストします。確実に正しいサーバーに接続していることを確認するために、ssh_configのStrictHostKeyCheckingをyesに設定しています。

したがって、SFTPサーバーへの接続が確立されたときに、サーバーからの応答をスクリプト化する方法を教えてください。擬似コードは次のとおりです。

If connection success
  disconnect
  initiate backup procedure

Else
  log error
  exit script

追加情報:

使ってます ForceCommand internal-sftpバックアップサーバーのsshd_configにあるため、sshコマンドを実行することは問題外です。

3

ほとんどの「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を終了
1
MattBianco

sftp接続テストを実行するだけで、ssh接続をテストできます。

if $(ssh -q [email protected] exit)
then
    echo yes
fi

サーバーがsshを許可しない場合は、nmapを使用できますが、キー認証はテストされません。

nmap myserver.bfworks.com -PN -p ssh | grep 'open'
0