現在ssh接続をして接続先でtxtファイルを作成するシェルスクリプトを組んでいて、
作成したファイルをローカル側にダウンロード(転送,コピー)させるためにssh接続での処理を終えた後に、scpで再度接続して作成したファイルを持ってくるような処理になっています。
簡単な記述例
ssh user@host "commnd" ← ファイル作成
scp コピー元 コピー先 ← 作成ファイルローカルへコピー
何が問題かというと接続方法がパスワード認証方式のためsshとscpで二度パスワードをもとめられることです。なのでssh接続中に作成ファイルをローカルに送る方法はありませんか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
リモート側ではメッセージを標準出力でなく標準エラー出力に出して、標準出力にはファイルだけを出します。
また、ファイル名付きで送るために、tar を使います。
Bash
1if [ -e ./$file_name.txt ]; then 2echo >&2 -n “同名のファイルが既に存在します。上書きしてもよろしいですか?[yes/no]” 3read answer 4if [ "$answer" != "yes" ]; then 5echo >&2 "上書きを行いません" 6exit 7fi 8else 9echo >&2 "新規作成" 10fi 11 12echo >&2 "開始" 13 14----- 15ファイル作成 16----- 17 18echo >&2 "終了" 19tar cf - ./保存ファイル名
ローカル側は、標準出力をtarで受けます。
Bash
1ssh user@host "リモートスクリプト名" | tar xf -
投稿2016/11/04 12:32
総合スコア86281
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
ローカルに持ってきたいファイルがテキスト形式なら、sshでcatしてローカルにリダイレクトしてはどうでしょうか?
バイナリの場合はちょっと思いつかないですが...
###2016/11/5 12:00編集
**main.sh** #!/bin/bash REMOTEFILE=`ssh user@host test.sh` ssh user@host "cat ${REMOTEFILE}" > 【適当な書き出し先】
**test.sh** #/bin/bash if [ -e ${FILENAME} ]; then echo >&2 -n "同名のファイルが既に存在します。上書きしてもよろしいですか?[yes/no]" read answer if [ "$answer" != "yes" ]; then echo >&2 "上書きを行いません" exit fi else echo >&2 "新規作成" fi echo >&2 "開始" find ... | awk ... > ${FILENAME} echo >&2 "終了" echo ${FILENAME}
投稿2016/11/04 08:29
編集2016/11/05 03:02総合スコア1894
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/04 08:43

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。