• ベストアンサー
  • 困ってます

[bash] rsync データバックアップ

掲題の件で質問させて下さい。 rsync でローカルサーバ(A)のデータをリモートサーバ(B)にコピーしたいのですが、 そのためのシェルを作成でつまづいております。 ▼シェルの中身 ---------------------------------------------------------------------- expect -c " spawn rsync -auvze \"ssh -p 10022\" /tmp/ root@BのIPアドレス:/backup/ expect \"root@BのIPアドレス's password:\" send \"パスワード\" exit 0 " ---------------------------------------------------------------------- ▼実行結果(sh -x /シェルのパス) ---------------------------------------------------------------------- + expect -c ' spawn rsync -auvze "ssh -p 10022" /tmp/ root@BのIPアドレス:/backup/ expect "root@BのIPアドレス'\''s password:" send "パスワード" exit 0 ' spawn rsync -auvze ssh -p 10022 /tmp/ root@192.168.23.44:/backup/ root@192.168.23.44's password:[root@TEST01 scripts]# ---------------------------------------------------------------------- 実行結果を見ると、シングルクォーテーションのエスケープが出来ていない?ようです。 実行結果2行目「expect "root@BのIPアドレス'\''s password:"」 何通りか書き方を変えては見たのですが、どれもうまくいかず、、、 どのように書けば ssh ログインをしてサーバBにデータを送れるようになりますでしょうか。 ※パスワード認証はダメだよ!や、パスワード直書きはダメだよ!といったご指摘は  控えて頂けると助かります。とり急ぎ目の前の問題をクリアしたいので。

共感・応援の気持ちを伝えよう!

  • Linux系OS
  • 回答数2
  • 閲覧数256
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

次の1行のダブルコーテーションをシングルに変更 expect -c " ↓ expect -c ' 次の1行を変更 expect "root@BのIPアドレス'\''s password:" ↓ expect "password:" send "パスワード" に改行を追加し下に interact を追加して シングルコーテーションでしめる まとめるとこんな感じ expect -c ' spawn rsync -auvze "ssh -p 10022" /tmp/ root@BのIPアドレス:/backup/ expect "password:" send "パスワード\n" interact ' exit 0 ちょっと僕のと環境がちがうと動作しないかもしれませんが もう1つこんなやり方もあります which expect で expectを調べておいて1行目に指定 #!/usr/bin/expect set timeout 10 spawn rsync -auvze "ssh -p 10022" /tmp/ root@BのIPアドレス:/backup/ expect "root@BのIPアドレス's password:" send "manage\n" interact これなら expect "root@BのIPアドレス's password:" がそのまま使えると思います それでいてエスケープ処理いらないです 以上参考までに

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます! 早速上の方法でやってみたところ、無事バックアップの取得が出来ました。

その他の回答 (1)

  • 回答No.2

すいません。テスト環境のパスワードはいってました(笑) send "manage\n" ↓ send "パスワード\n"

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • [bash] rsync データバックアップ

    掲題の件で質問させて下さい。 rsync でローカルサーバ(A)のデータをリモートサーバ(B)にコピーしたいのですが、 そのためのシェルを作成でつまづいております。 ====================================================================== ▼シェルの中身 #!/bin/bash LOG=/var/log/backup.log PARAM=/etc/param/backup.param while read line; do echo `date +%Y/%m/%d" "%H:%M:%S`" "$line" のバックアップを取得します。" >> $LOG expect -c ' spawn rsync -auvz --delete -e "ssh -p 10022" '$line' root@BのIPアドレス:/backup/ expect "password:" send "パスワード\n" interact ' done < /etc/param/backup.param ====================================================================== ====================================================================== ▼実行結果 + LOG=/var/log/backup.log + PARAM=/etc/param/backup.param + read line ++ date '+%Y/%m/%d %H:%M:%S' + echo 2016/09/13 '15:05:25 /home/the-key のバックアップを取得します。' + expect -c ' spawn rsync -auvz --delete -e "ssh -p 10022" /home/the-key root@BのIPアドレス:/backup/ expect "password:" send "パスワード\n" interact ' spawn rsync -auvz --delete -e ssh -p 10022 /home/the-key root@BのIPアドレス:/backup/ root@BのIPアドレス's password: + read line ====================================================================== 実行結果を見ると、パラメータファイルの読み込み自体はうまく言っているのですが、 expect 内での変数の参照(とエスケープ文字)が正しくなく、ssh認証でおかしくなって しまっているようです。 変数の表記をどのように記述すればBへのデータ移行が出来るようになるのでしょうか。

  • SSH + rsyncがダメです

    パスワード無しでサーバAの/home,/etcをからサーバBの/tmp/内にrsyncでコピーしたいのですがなかなかうまくできません。今のところrsyncで以下のような記述を実行して動作確認まではできました。 rsync -avz -e ssh /home/ サーバB:/tmp/ 当然ながら実行後パスワードを聞かれてしまいます。 そこでSSHの設定をしなければと思いネットを巡って試したのですが、どうしてもパスワードを聞かれてしまいます。 SSHの設定が分かってないのだと思います。 ずばり!を教えていただけるとうれしいです。 環境Redhat7.3 インストールしたままです。何もいじってません。ご教授お願い致します。

  • expectで複数台にログインしscpする。

    シェルの超初心者です。よろしくお願いします。 下記のようなシェルを作りたいのですがうまくいきません。 3台のパソコンA, B, Cがあるとします。 まず、AからBにssh接続し、シスログをAにscpします。 その後、AからCにssh接続し、シスログをAにscpします。 下記が、作成したものです。 どうぞ、アドバイスよろしくお願いいたします。 #!/usr/bin/expect set timeout 5 spawn ssh B@xxx.xxx.xxx.xxx expect "Enter passphrase for key" send "Password\n" spawn scp /var/log/messages A@xxx.xxx.xxx.xxx:/tmp/log01.log expect "password" send "Password\n" send "exit\n" spawn ssh C@xxx.xxx.xxx.xxx expect "Enter passphrase for key" send "Password\n" spawn scp /var/log/messages A@xxx.xxx.xxx.xxx:/tmp/log02.log expect "password" send "Password\n" send "exit\n" interact

  • CentOS Stream鍵ファイルでrsync

    CentOS Stream release 8 鍵ファイルでrsync CentOS Stream release 8の2台のマシンでAからBにフォルダをコピーするシェルを書きたいです。 com-a:192.168.1.11 com-b:192.168.1.12 com-bのログインは鍵ファイルを作っています。 com-aからcom-bにsshでログインするところまではできています。 <192.168.1.11から> ■通常のログイン ssh -i 鍵ファイル root@192.168.1.11 ここまでできていrます。 パスワードは求められません。 ■rsyncでフォルダーのコピー rsync -auvz --delete -e ssh /dir-from root@192.168.1.12:/dir-to/ しかし、これではパスワードを求められます。 rsyncで鍵ファイルは指定できないですか?

  • rsyncやSSH接続ができません。

    ■rsyncがRSHでなく必ずSSH接続になってしまいます。 環境変数RSYNC_RSHもないのですが何故でしょうか? なおPort番号は22ではなく220をSSHにしています。 rsync -avz /home/test backup-server:/home/backup ssh: connect to host backup-server port 22: Connection refused rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(359) ■仕方なくSSHで接続しようと試みましたが今度はパーミッションエラーでした。 SSHのバージョンはサーバーは2で、クライアントはCentOS4.1ですがSSHの バージョンがわからない状態です。 SSHのバージョンはどう調べれば良いでしょうか? sync -avz -e "ssh -p 220 -oHostKeyAlias=test-server" /home/backup backup-server:/home/backup Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(359) なお、authorized_keysは、id_rsa.pubからコピーしてあり、644。 known_hostsには、test-serverは入っていて、644です。

  • ssh + rsync でパスワードを聞かれなくする方法

    SSH + rsync(rsync -e ssh ・・・で ssh 回線で同期)でファイルをコピーする時に、パスワードを聞かれなくする方法はないでしょうか? http://www.okweb.ne.jp/kotaeru.php3?q=323149 などを参考に、公開鍵を作りログイン先のauthorized_keysに登録しました。(公開鍵を作るときにパスフレーズを入力してません。) こうすると、たしかに"パスフレーズ"は聞かれないのですが、"ログインパスワード"は毎回聞かれます。これは仕方がないのでしょうか? ●ファイルのコピー先がファイアーウォールで ssh のポートくらいしか空いていないので、 ssh + rsync を使おうと思っています。 ●同期したいフォルダは複数あるので、スクリプトを作って rsync -avz -e ssh フォルダAを同期 ・・・ rsync -avz -e ssh フォルダBを同期 ・・・ ・・・ という感じで一気に同期できれば便利だな と思っていました。 ところが今のままでは、rsync コマンド一回ごとに ログインパスワードを入力することになってしまいます。

  • rsyncを使ったバックアップが上手くいきません。

    rsyncをcronで実行してバックアップをとろうと思っているのですが、上手くいきません。 さくらVPSのバックアップをローカルで取ろうと思い、 http://mukaer.com/archives/2012/03/14/vpscentos/ このサイトを参考に設定していたのですが、上手くいきません。 以下のようなエラーが出ます。 Unexpected remote arg: ログインユーザー名@IPアドレス:/var/bkup/ rsync error: syntax or usage error (code 1) at main.c(1232) [sender=3.0.9] 基本的にサイトに書いてある通りに設定しましたし、ローカルからsshでさくらVPSに接続はできています。 なにがいけないのかわかりません。 ひとつだけ、不安な点は、サイトではローカルもCentOSにしているのに対して、私はローカルではUbuntuを使っていることです。 かなり難しい質問だとは思いますが、解答して頂けると大変助かります。 とても困っています。

  • rsyncをPHPで行いたいのですが、

    いつもお世話になっております。 rsyncをPHPのexecコマンドから行いたいと思っているのですが、 現状、コピー元のサーバー、コピー先のサーバーともroot権限が無い状態ですので、 公開鍵、秘密鍵を作ることができない状況です(root権限無かったら作れないですよね?)。 なので、sshでpassを聞かれても良いのでrsyncを実行しようと思うのですが、 passを聞かれる場合でもPHPのexecコマンドからrsyncを実行することはできますでしょうか? 色々サイトを見ても鍵を生成してパスワードを省略することしか記載されていないので。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • レンタルサーバ同士のバックアップ

    レンタルサーバ同士で毎日バックアップを取りたいと考えています。このサイトでいろいろと検索した所、rsync + sshで行うようですが、レンタルサーバ同士でも設定は可能なのでしょうか? 両方ともcrontabは使用可能です。 Aサーバの/home/hoge/backup/内をそのままミラーの形で、 Bサーバの/home/hoge/backup/にバックアップしたい。 ※Aサーバの/home/hoge/backup/には現状10個程あるDBのmysqldumpを毎日取り、1ヶ月後に削除する設定にしています。 ※Bサーバでの運用は考えていません。 Aサーバ:hoge1.com Linux 2.6.9-42.ELsmp Bサーバ:hoge2.com Linux 2.4.34.1-p3-nonsmp-JWH Aサーバのcrontabに見よう見まねで下記をセットした所、 rsync -avz -e ssh --delete /home/hoge/backup/ hoge2.com:/home/hoge/backup/ rsync error: syntax or usage error (code 1) at main.c(891) とエラーになりました。 それとも、rsync + sshは諦めて、ftpコマンドで送った方がよろしいのでしょうか?

  • 複雑なrsync

    WindowsStrageServer2012版テラステーション内に共有フォルダを作成し(home) このテラステーションを同じネットワーク内のWindowsServer2008R2のPCの ActiveDirectoryのドメインに参加して、アクセス制御しています。 このフォルダを、CentOSのディレクトリにcifsでマウントし、(/Backup/home) mount -t cifs -o username=administrator,pass=パスワード //テラステーションサーバーIPアドレス/home /backup/home CentOS PC内の、ユーザーフォルダ/homeのデータをrsyncしようとしているのですが、 コマンドは以下の通りです。 rsync -av /home/ /backup/home >> /backup/home.log rsync: failed to set times on "/backup/home/.": Permission denied (13) と表示されて、同期できません Permission deniedなので、テラステーション側の共有のアクセス権をEveryoneに設定してみたのですが、うまくいきませんでした。(このフォルダはadministratorでも読み書き可に設定されています。) 考えられる原因は何でしょうか? ちょっと複雑な構成なので、参考文献を探しているのですが、見つけることができません。 よろしくお願いします