web-dev-qa-db-ja.com

bashスクリプトでファイルを送信するSFTP

私はキー認証を使用しているので、パスワードは問題になりません。名前がわかっているファイルがあり、sftp経由で別のマシンに送信したいだけです。

検索を試みましたが、この(一見単純そうな)質問はどこにも見つかりませんでした。たぶん、今日のGoogle-fuは単に私を失敗させているのかもしれません。

要するに、私は自分のローカルマシンでファイル(test.txt)をリモートマシンに送信したいと考えています。承認済みのキーはすでに提供されています。基本的に私はこれらの3つのステップを自動化したいと思います:

sftp root@remote:/root/dropoff
put test.txt
quit

これを自動化するために使用できる簡単なbashコマンドはありますか?私が見た唯一のオプションは、bashスクリプトを使用してput/quitを実行し、-bオプションを使用してそれを実行することです。それ以上にきれいなものはありますか? (他のアプリケーション/ツールの使用には興味がありません。)

ありがとう!

17
Bing

他のツールには興味がないとおっしゃっていましたが、無人ファイル転送にはscpの方がはるかに適しています。 scpの例を次に示します。

scp test.txt root@remote:/root/dropoff
12
jordanm

私はこれが古いものであることを知っていますが、 ここのドキュメント を使用してコマンドに引数を渡すこともできます

以下をスクリプトに追加できます。

# The following is called a HERE document
sftp <user>@<remote> << SOMEDELIMITER 
  put test.txt
  ... # any commands you need to execute via sftp
  quit
SOMEDELIMITER

追加の各コマンドは、<<の前のコマンドに入力され、SOMEDELIMTERは任意の名前にすることができます。

scpは優れたオプションですが、LinuxからWindowsにプッシュするときにsftpが唯一のツールであり、サービスモードでFreeSSHDを使用できません。

40
Mike McMahon

この質問が尋ねられたとき、私はsftpがどのように構成可能であったか知りません。とにかく、6年後、PUTのようなsftp-commandsをファイルに入れて、最初のsftp-callでこのファイルを参照できます。これにより、プロセス全体が完全に非インタラクティブになり、簡単に構成可能になります。

sftp -i /path/to/ssh-key -b /path/to/sftp-commands.txt root@remote:/root/dropoff

.... sftp-commands.txtに含まれるのは

put test.txt; quit
1
user3061675