シェルスクリプトを使用して別のサーバーからファイルをプルしたいのですが。私はこれを実行できるスクリプトを作成しましたが、スクリプトを非対話的に機能させて、パスワードの入力を求められず、同じコードをハードコーディングしてスクリプトに必要な機能を持たせると自動的に機能するようにします。
以前に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
このスクリプトにユーザー名とパスワードを提供して非インタラクティブにする方法で、上記のコードをどのように変更できますか?.
ハードコードされたパスワードを提供することはセキュリティ上の問題であることを理解していますが、今はファイルをすぐに取得することについてもっと心配しています。安全な方法と、希望する答えが得られれば幸いです。
解決策はscp
を使用することです。ローカルの公開鍵をリモートのauthorized_filesの最後に追加します。
その後
scp [email protected]:Bharthi/* $path
ローカルホストで、.ssh
dir、.pubがない場合は、最初に次の手順を実行します(一度だけ)
ssh-keygen (1)
scp-copy-id [email protected] (2)