Comment utiliser Ruby et SCP / SSH pour déterminer si un fichier existe avant de télécharger une copie

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

  •  06-07-2019
  •  | 
  •  

Question

Je télécharge un fichier sur un serveur distant à l'aide de SCP, mais quelle est la bonne façon de voir si ce fichier existe avant de le faire?

Était-ce utile?

La solution

Faites attention à check-then-upload: cela n’est pas atomique et peut conduire à des conditions de concurrence (ou aux vulnérabilités de TOCTOU).

Une meilleure solution de transfert peut être de définir les autorisations de fichier sur le fichier téléchargé de sorte qu'il ne soit pas accessible en écriture (400 ou 444 ou similaire sur des systèmes de type UNIX). Tous les téléchargements ultérieurs vers le même nom de fichier échoueront simplement. (Vous obtiendrez "permission refusée", ce qui peut être sujet à une petite interprétation (par exemple, les autorisations du répertoire de téléchargement ont-elles changé?). Ceci est un inconvénient de cette méthode).

Comment définir les autorisations sur le fichier distant? La méthode la plus simple consiste à les définir dans le fichier local, puis à les conserver lors du téléchargement. Le réseau de Ruby :: SCP README dit que c'est possible bien "préserver les attributs de fichier lors des transferts".

Autres conseils

Vous ne pouvez pas faire cela avec scp. Cependant, vous pouvez le faire avec sftp. Cela ressemblerait à quelque chose comme ça:

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

Cela résout définitivement votre question et vous donnera également des informations supplémentaires. http://ruby.about.com/od/ssh/ss/netscp.htm

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top