回答:
あなたの質問は簡単には実行できないと思います。基本的なbashスクリプトでは不可能かもしれません。
したがって、以下は実際の質問には答えませんが、問題に対する別のアプローチを提供します。
を使用する代わりにsshpass
、scp
パスワードなしの公開鍵認証でプレーンコマンドを使用できます。それが何かわからない場合は、[1]を参照してください。
ローカルで使用するためにスクリプトで scpを使用する場合、これはIMOの方法です。
ssh-copy-id
公開鍵をサーバーに追加するために使用しますこれで、プロンプトなしでコマンドを実行できるようになりました。
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
以下のために配布することをスクリプト、明確なパスワードを使用してsshpassは確かに良いアイデアではありません、あなたは少なくともsshpassの「-e」フラグを使用して、ユーザーがより良いセキュリティのための環境変数としてパスワードを提供させてください。
その場合、公開鍵アプローチは少し不便ですが、それでも可能です。スクリプトのユーザーに公開キーの作成を依頼する余裕がない場合は、公開キーをその場で作成し、サーバーにコピーして、scp
プロンプトなしで実行できます。
#!/bin/bash
KEY="$HOME/.ssh/id_rsa_example"
if [ ! -e "$KEY" ]; then
ssh-keygen -t rsa -N "" -f "$KEY"
sshpass -e ssh-copy-id -i "${KEY}.pub" me8@host.ca
fi
scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop
最後にrsync
、代わりにプログレスバーを作成するために使用する可能性があります:
$ rsync -P --rsh="sshpass -p $PASSWORD ssh -l me8" host.ca:/cmshome/me/file /home/me/Desktop