質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

1369閲覧

シェルスクリプトのrsyncでディレクトリーを同期したい

maki19

総合スコア10

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2021/04/26 17:11

前提・実現したいこと

一度別のサーバーにSSHで繋いでからrsyncを使ってバックアップを取りたいです。

コード

#!/bin/sh PW="pass" expect -c " set timeout 10 spawn env LANG=C /usr/bin/ssh root@192.168.1.75 expect \"password:\" send \"${PW}\n\" spawn env LANG=C /usr/bin/rsync -av -e ssh root@192.168.1.74:/tmp /root/ expect \"password:\" send \"${PW}\n\" expect \"$\" exit 0 "

実行結果

spawn env LANG=C /usr/bin/ssh root@192.168.1.75 root@192.168.1.75's password: spawn env LANG=C /usr/bin/rsync -av -e ssh root@192.168.1.74:/tmp /root/ root@192.168.1.74's password: receiving incremental file list tmp/ sent 47 bytes received 1,171 bytes 2,436.00 bytes/sec total size is 1,672 speedup is 1.37

一見うまくいったように見えるのですが、実際のrootフォルダーには何もコピーされません。
手動でSSHで繋いでrsyncでやれば問題ないのですが、shellにするとうまくいかないです…

何か解決策ありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

192.168.1.75で rsync を実行するつもりであれば
2つ目の spawn は send になるかと

send \"env LANG=C /usr/bin/rsync -av -e ssh root@192.168.1.74:/tmp /root/\n\"

投稿2021/04/26 22:23

sigsegv

総合スコア895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maki19

2021/04/27 11:38

回答ありがとうございまいます、言われた通りに二つ目変えて expect -c " set timeout 10 spawn env LANG=C /usr/bin/ssh root@192.168.1.75 expect \"password:\" send \"${PW}\n\" send \"env LANG=C /usr/bin/rsync -av -e ssh root@192.168.1.74:/tmp /root/\n\" expect \"password:\" send \"${PW}\n\" expect \"$\" exit 0 " としたのですが、結果は [root@localhost test]# ./shell spawn env LANG=C /usr/bin/ssh root@192.168.1.75 root@192.168.1.75's password: Last login: Tue Apr 27 05:39:19 2021 from centos1 [root@localhost ~]# pass -bash: pass: command not found [root@localhost ~]# [root@localhost test]# と結果が返ってきました、同期するrsyncが実行されてないように思うのですがどこかおかしいかったですか?
sigsegv

2021/04/28 00:55

シェルプロンプトが表示されたあとコマンド実行するよう、expect "$" を追加してください。 (シェルプロンプトの末尾は $ なんですよね) ``` expect -c " set timeout 10 spawn env LANG=C /usr/bin/ssh root@192.168.1.75 expect \"password:\" send \"${PW}\n\" expect \"$\" send \"env LANG=C /usr/bin/rsync -av -e ssh root@192.168.1.74:/tmp /root/\n\" expect \"password:\" send \"${PW}\n\" expect \"$\" exit 0 " ```
maki19

2021/04/28 15:24

できたー!!ありがとうございまいます、調べ方が悪いのか方法が見つからなくてこまってました…本当に助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問