リモートサーバーに自動的に接続してディレクトリを変更し、そのディレクトリ内のすべてのファイルをローカルに取得するcronジョブをセットアップする方法を知る必要があります。
私はsftpを使用する必要があると思いますが、いくつかのシェルスクリプトで「spawn」と呼ばれるいくつかのコマンドを見つけました。
spawn sftp user@ipaddress
cd xxx/inbox
mget *
これは、ダウンロードするリモートディレクトリのコンテキストで機能しますか?
あなたの場合、spawn
はおそらく expect スクリプト言語のコマンドであり、インタラクティブなプログラム操作の自動化を可能にします。このような場合、spawn
は、expectスクリプトから外部コマンドを実行します。スクリプトの例には、 Shebang シーケンスがありません(#!
で始まる最初の行)、 expect
インタープリターを示すため、直接実行してもexpect
によって解釈されません。
sftp
を使用したパスワード認証は、対話モードに限定されています。対話モードでsftp
を制御するには、次の予期スクリプトの例を使用できます。
#!/usr/bin/env expect
set timeout 20 # max. 20 seconds waiting for the server response
set user username
set pass your-pass
set Host the-Host-address
set dir server-dir
spawn sftp $user@$Host
expect assword:
send "$pass\r"
expect sftp>
send "cd $dir\r"
expect sftp>
send "mget *\r"
expect sftp>
send "exit\r"
expect eof
もう1つの可能性は、より安全な公開鍵認証を使用することです( 公開鍵認証を使用するようにSFTPを設定する を参照)。そのような場合、単純にsftp
をバッチモードで直接使用できます。
#!/bin/sh
user=username
Host=the-Host-address
dir=server-dir
sftp -b - "$user@$Host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++