web-dev-qa-db-ja.com

スクリプトでSFTPを使用してリモートホストから非対話的にファイルをプルする方法

シェルスクリプトを使用して別のサーバーからファイルをプルしたいのですが。私はこれを実行できるスクリプトを作成しましたが、スクリプトを非対話的に機能させて、パスワードの入力を求められず、同じコードをハードコーディングしてスクリプトに必要な機能を持たせると自動的に機能するようにします。

以前にFTPについてこれを実行しましたが、新しいサーバーではFTP接続がブロックされ、SCPまたはSFTPのみを使用できます。私の以前のスクリプトは、FTPを使用して、パスワードを要求せずにうまく機能した次のようなものでした:

#!/bin/bash -vx
ftp -in 100.XXX.XXX.XX<<END_SCRIPT
quote USER username
quote PASS password
bin
Prompt off
cd /directory/in/remote/Host
lcd /directory/in/local/machine
mget *
bye
END_SCRIPT

スクリプトでSFTPについても同様のことを試しましたが、インタラクティブモードで機能しますが、FTPのように、SFTPの非インタラクティブオプションを使用できません。以下は、リモートマシンから特定のファイルをフェッチするためのコードです。

#!/bin/bash -vx

path="/tmp/testanks"

sftp [email protected] <<EOT
cd $path
get Bharti*
quit
EOT

このスクリプトにユーザー名とパスワードを提供して非インタラクティブにする方法で、上記のコードをどのように変更できますか?.

ハードコードされたパスワードを提供することはセキュリティ上の問題であることを理解していますが、今はファイルをすぐに取得することについてもっと心配しています。安全な方法と、希望する答えが得られれば幸いです。

6
Ankit Vashistha

解決策はscpを使用することです。ローカルの公開鍵をリモートのauthorized_filesの最後に追加します。

その後

 scp [email protected]:Bharthi/* $path

ローカルホストで、.ssh dir、.pubがない場合は、最初に次の手順を実行します(一度だけ)

ssh-keygen (1)
scp-copy-id [email protected] (2)
  1. すべてデフォルトを受け入れ、プロンプトが表示されたときにパスワードを入力しないでください
  2. ユーザー名@ 100.X.X.Xのパスワードを入力してください
4
Archemar

curl の場合:

curl sftp://example.com/file.Zip -u user:password 

そのため、パスワードの使用よりも 公開鍵認証 の方が好ましいことに注意してください。

curl sftp://example.com/file.Zip -u user

これは、秘密鍵として~/.ssh/id_rsaを使用しようとします。 --keyで別のものを指定できます。

2
Pere