gulp-rsync でファイルを同期しようとすると、以下のエラーが表示されました。

```

    gulp-rsync: rsync error: error in rsync protocol data stream (code 12)
    
```

不安定なインターネット接続や間違っている接続先の様な簡単な理由でしたら、この質問を伺いするまでではなかったので、自分の努力を報告します。  
尚、接続先 (VPS) は練習用なので、IPアドレス等の情報はそのまま載せています。

```

    import Gulp from "gulp";
    import GulpRSync from "gulp-rsync";
    
    Gulp.task(
      "Deploy",
      (): NodeJS.ReadWriteStream => Gulp.src("03-ProductionBuild/BackEndEntryPoint.js").
          pipe(GulpRSync({
            root: "03-ProductionBuild/",
            hostname: "160.251.43.156",
            port: "22",
            username: "non_root_admin",
            destination: "/var/www/yamatodaiwa.com"
          }))
    );
    
```

## 間違っている接続先原因除外

この原因の可能性があると言われたのは以下のページです。

[バックアップログにエラーが記録される場合の対処方法は |
バッファロー](https://www.buffalo.jp/support/faq/detail/2633.html)

パスワードを聞かれたら、正しいパスワードを入力してみます。

[![画像の説明をここに入力](https://i.stack.imgur.com/nAz8I.png)](https://i.stack.imgur.com/nAz8I.png)

上記のがエラーが発生します。

```

    Message:
        Error: rsync exited with code 12
        at ChildProcess.<anonymous> (D:\IntelliJ IDEA\InHouseDevelopment\yamatodaiwa.com\node_modules\gulp-rsync\rsync.js:121:17)      
        at ChildProcess.emit (node:events:390:28)
        at ChildProcess.emit (node:domain:537:15)
        at maybeClose (node:internal/child_process:1064:16)
        at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5)
        at Process.callbackTrampoline (node:internal/async_hooks:130:17)
    
```

今回はパスワードをわざと間違って入力してみます。  
違うエラーが発生します。

```

    non_root_admin@160.251.43.156's password: [18:36:47] gulp-rsync: Permission denied, please try again. 
    
```

従って、バックエンド側は認証まで正常に動いています。念の為一般のターミナルで接続してみます。

[![画像の説明をここに入力](https://i.stack.imgur.com/37sFd.png)](https://i.stack.imgur.com/37sFd.png)

成功でした。

## サーバー側でrsyncが入っていない原因除外

ターミナルVPSと接続し`rsync -v`で除外完了です。

[![画像の説明をここに入力](https://i.stack.imgur.com/6bJp8.png)](https://i.stack.imgur.com/6bJp8.png)

## サーバー側で容量が足りない原因除外

コードで同期しようとしているファイルの **BackEndEntryPoint.js** はたった92.0
KBです。VPS側のディスク使用量の情報は以下の通りです。

[![画像の説明をここに入力](https://i.stack.imgur.com/P68iD.png)](https://i.stack.imgur.com/P68iD.png)

* * *

### 追記

下記の実験の前にSSH接続の正常性を確認しました。

#### 通常の rsync での実行結果

```

    >  rsync -a "03-ProductionBuild/BackEndEntryPoint.js" non_root_admin@160.251.43.156:/var/www/yamatodaiwa.com     
    non_root_admin@160.251.43.156's password: 
    rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
    rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.3]
    rsync: connection unexpectedly closed (0 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(228) [sender=3.2.3]
    
```

#### `-vvv` オプション付き

```

    PS D:\IntelliJ IDEA\InHouseDevelopment\yamatodaiwa.com>  rsync -a "03-ProductionBuild/BackEndEntryPoint.js" non_root_admin@160.251.43.156:/var/www/yamatodaiwa.com -vvv
    opening connection using: ssh -l non_root_admin 160.251.43.156 rsync --server -vvvlogDtpre.iLsfxCIvu . /var/www/yamatodaiwa.com  (9 args)
    non_root_admin@160.251.43.156's password: 
    rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
    rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.3]
    [Receiver] _exit_cleanup(code=12, file=io.c, line=235): about to call exit(12)
    rsync: connection unexpectedly closed (0 bytes received so far) [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(228) [sender=3.2.3]
    [sender] _exit_cleanup(code=12, file=io.c, line=228): about to call exit(12)
    
```
CC BY-SA 4.0
2022-02-23T09:48:34.770
86533
2022-03-05T07:07:06.930
2022-02-27T06:00:54.543
3060
16876
question
linux ubuntu gulp rsync
gulp-rsync での同期時に error in rsync protocol data stream (code 12) が発生する
同期に伴うファイルやフォルダの作成にも適切な権限が必要です。

コピー先に指定している `non_root_admin@160.251.43.156:/var/www/yamatodaiwa.com` ですが、  
そもそも `/var/www` は一般的に root 以外のユーザーで書き込みができないようになっています。

**例:**

```

    $ ls -ld /var/www
    drwxr-xr-x 4 root root 4096  1月 25 23:09 /var/www/
    
```

実行ユーザーの `non_root_admin` が非 root ユーザーなのであれば、以下いずれかの対応が考えられます。

  * `/var/www` に 対して non_root_admin でも書き込めるようにする
  * `/var/www/yamatodaiwa.com` を事前に作成して non_root_admin でも書き込めるようにする

もしくは、non_root_admin で `sudo` コマンドが許可されているなら、ローカル側での `rsync` コマンドで  
`--rsync-path` オプションを使う方法が手っ取り早いかもしれません。

[rsync でリモート側の実行権限が非 root
ユーザーの場合、ファイルの所有者情報がコピーされない](https://ja.stackoverflow.com/a/86551)

>
```

>     # rsync --rsync-path="sudo rsync" -auvz /path/to/SOURCE
> ec2-user@REMOTE:/path/to/TARGET
>  
```
CC BY-SA 4.0
2022-03-04T12:30:11.897
86687
2022-03-05T07:07:06.930
2022-03-05T07:07:06.930
3060
3060
86533
answer