SCPで転送したファイルのパーミッション
なんか、元サーバーのパーミッション設定が維持されるらしく
takuya@rena:~/Desktop$ ls -alt config.ini ----------+ 1 takuya staff 41 7 24 02:56 config.ini
とんでもないパーミッションのファイルが出来てた。
SCPはパーミッションが保持される。。。
WindowsのCygwinにSSHをインストールして、SCPコマンドでコピーした
サーバー側のパーミッションを確認
ssh my-windows: "ls -l ~/Desktop/config.ini" ----------+ 1 takuya None 39 7月 17 20:22 config.ini
これを転送すると、 パーミッションが維持されたファイルが出来る
元のWindowsファイルは 書き込めない?いいえ書き込めます。
書き込めないファイルなら、その時に気づくのですが、書き込めるのです。
takuyaさんは、Administrativeなので、書き込めるのです。
このファイルをSCPで転送すると。。。やばい
takuya@rena:~/Desktop$ scp mine-win:~/Desktop/config.ini . config.ini 100% 41 0.0KB/s 00:00 takuya@rena:~/Desktop$ ls -l config.ini ----------+ 1 takuya staff 41 7 24 01:30 config.ini
パーミッションが保持される。やばい
なんか、良く分からないエラーの温床になって、3時間ほど無駄にした。
ブラウザのファイルアップロードでファイル送ってるのにファイル取得できないので、おかしいと思ったらscp したファイルのパーミッションがおかしく、読み込み不可になっていた。なのでファイルが送信できてなかったというオチ。
ファイルアップロードに失敗するので、さんざんサーバー設定を見なおした私が馬鹿だった
man 見たけど解決法は書いてない
man scp したけど、permission のperm の文字すらない。
諦めるしかない。。。。のか?
とりあえず、解決方法が見つからないので、scp したファイルは 絶対パーミッションチェック を自分に課すことにしました。
SCPをちょっとだけラッパー
#!/usr/bin/env ruby opts = [] args = [] ARGV.each.with_index{| e,i | if e.match /^-/ then opts << e e_next = ARGV[i+1] next unless e_next unless e_next.match(/~-/) then opts << e_next ARGV.delete_at(i+1) next end else args << e end } cmd = "scp #{opts.join(' ')} #{args.join(' ')} > /dev/tty" `#{cmd}` puts `ls -l #{args.last}`
実行後に ls を強制することにした。
なんかもっと解決策いっぱいありそうなんだけど・・・
SCPの標準出力のプログレスもruby のpopen3 じゃ取得できないし。なんか、良く分からないことばかり
参考資料
http://scoop.simplyexcited.co.uk/2012/09/07/realtime-scp-output-with-ruby/