2013-10-07 1 views
1

나는 getput 방법을 paramiko.SFTP 개체로 사용합니다. 저는 get 방법으로 불완전한 파일 내용을 얻었지만 put과 관련된 문제는 전혀 발견하지 못했다는 것을 모호하게 기억할 수 있습니다. 그것은 내 행운입니까, 아니면 원격 측에서 올바른 파일을 얻을 수 있도록 추가 검사를 수행해야합니까? 그렇다면 원격 서버에 대한 SFTP 액세스 만있을 경우 어떻게해야합니까?paramiko 파일 전송 작업은 기본 작업입니까?

SFTP 전용 액세스함으로써

, 내 말은 내가 할 수없는 SSH에서 :

$ ssh [email protected] 
[email protected]'s password: 
PTY allocation request failed on channel 0 
shell request failed on channel 0 
+1

나는'put'을 하루에 여러 번 사용하며 파일이 항상 원격 측에 도착하는 것을 봅니다. 그러나 당신이'ssh.exec_command'를 사용하고 싶다면 (예를 들어 간단한'ls') 원하는 쉘 명령을 보내고 싶다면. – Milo

+0

죄송합니다. 파일 내용을 의미했습니다. 나는 명확하게하기 위해 질문을 갱신했다. 또한 서버에 대한'exec_command' 액세스 권한이 없습니다. – Tshepang

+0

그래서 SSH로 서버에 연결할 수 없습니까? – Milo

답변

1

SFTP 전송 오류 또는 중단없이 완료 경우이 파일이 완전히 이후, 복사 된 것을 상당히 확신 할 수 SFTP 프로토콜은 전송 된 각 청크가 확인 응답을 요구합니다. 따라서 TCP의 안정성, SSH 채널 및 각 청크의 ACK 사이에서 파일이 어떤 식 으로든 잘 렸을 가능성은 거의 없습니다. 만 SFTP를 사용할 때 당신이 할 수

몇 가지 더 :

  • 전송 한 후, 당신은 실제 크기의 확인 파일에 stat()를 호출 할 수 있습니다.
  • 파일의 하나 이상의 청크를 다시 읽어 로컬에서 비교할 수 있습니다.
  • 일부 SFTP 서버에는 체크 파일 확장자가 있습니다 (필자는 openssh가 이것을 지원하지 않는다고 생각합니다). Paramiko SFTP 파일은 check() 메서드를 사용하여 일부 또는 전체 파일의 해시를 가져올 수 있습니다.

귀하의 질문에 직접 대답하기 위해, 이체는 이 아니며 아톰입니다. 파일이 쓰여지면서 시스템에서 파일을 변경할 수 있습니다. 이를 막으려면 파일을 임시 위치에 원격으로 기록하고 확인한 다음 sftp.rename으로 호출하여 최종 대상 (동일한 파일 시스템 내의 Linux에서의 원자 작업)으로 이동할 수 있습니다. 그건 대략 rsync과 비슷합니다. 아마도 "원자력"에 가까이 올 수 있습니다.