web-dev-qa-db-ja.com

sshpassを使用してリモートホストからローカルにファイルを転送する

40日以上経過したファイルをリモートホストからローカルホストに転送したい。リモートサーバーに接続できますが、リモートサーバーからローカルサーバーにファイルを転送できません。ファイルがないというエラーが発生します。そのようなファイルまたはディレクトリはありませんが、ファイルはリモートホストに存在します。

詳細:

file=`sshpass -p "password" ssh username@server_ip "find /Arch -type f -ctime -40"`
sshpass -p "password" scp -r  username@server_ip:$file /Arch
echo SCP Completed.

エラーの詳細:

cp: cannot stat ‘/Arch/file1.xls’: No such file or directory
1
James

あなたは1つか2つのことを世話する必要があります:

  • 権限:ファイルを読み取るための適切な権限がない可能性があります。
  • 複数行の回答:結果として、検索結果に複数のファイルが含まれる可能性があります。

簡単に言えば、おそらくあなたの問題はsshpassではありません。

これからは、権限に関連する問題は発生しないことを当然のことと考えています。

あなたができることはそのようなものです:

files="$(sshpass -p "passwd" ssh -l username rhost "find /Arch -type f -ctime -40")"
for file in ${files}; do
  if sshpass -p "passwd" scp "username@rhost:${file}" /Arch; then
    printf "SCP Completed\n"
  fi
done

理論的には、$filesには取得できないものは含まれません。findstderrに到達できないファイル(フォルダー)を出力するため、別の方法で管理する必要があります。

すべてのオプションの中で、stderrstdoutとマージして、forサイクルに条件を追加するか、エラーを別のvar(またはファイル)に保存して別々にサイクルすることができます。

1
ingroxd