Ruby 및 SCP/SSH 사용, 사본 업로드 전에 파일이 있는지 확인하는 방법

StackOverflow https://stackoverflow.com/questions/1625693

  •  06-07-2019
  •  | 
  •  

문제

SCP를 사용하여 원격 서버에 파일을 업로드하고 있지만 해당 파일이 존재하는지 확인하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

확인 확인 : 이는 원자가 아니며 인종 조건 (또는 TOCTOU 취약성)으로 이어질 수 있습니다.

더 나은 방법은 업로드 된 파일에 파일 권한을 설정하여 쓰기가 불가능하도록하는 것일 수 있습니다 (400 또는 444 또는 Unix-like 시스템에서는 유사하지 않음). 그러면 동일한 파일 이름에 대한 후속 업로드가 단순히 실패합니다. (약간의 해석이 적용될 수있는 "허가 거부"를받을 수 있습니다 (예 : 업로드 디렉토리 권한 변경을 수행 했습니까?)이 방법의 단점 중 하나입니다).

원격 파일에 대한 권한을 어떻게 설정합니까? 가장 간단한 방법은 로컬 파일에 설정 한 다음 업로드를 수행 할 때 보존하는 것입니다. 루비의 그물 :: SCP readme 실제로 "전송에 대한 파일 속성을 보존"할 수 있다고 말합니다.

다른 팁

SCP로는 이것을 할 수 없습니다. 그러나 당신은 그것을 할 수 있습니다 SFTP. 다음과 같이 보일 것입니다.

require 'net/sftp'

remote_path = "/path/to/remote/file"
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
  sftp.stat!(remote_path) do |response|
    unless response.ok?
    sftp.upload!("/path/to/local/file", remote_path)
  end
end

이것은 확실히 당신의 질문을 해결하고 추가 정보를 줄 것입니다. http://ruby.about.com/od/ssh/ss/netscp.htm

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top