Linux에서 openSSH SFTP 서버를 설정하는 방법


10

디렉토리를 공유하도록 sftp-server를 구성하고 싶지만 수정하는 방법을 모르겠습니다 /etc/ssh/sshd_config.

내 요구 사항은 다음과 같습니다

1) 로그인은 인증서를 사용하지 않고 비밀번호 만 사용해야합니다 (예 : 인증은 비밀번호 방식을 사용함)

2) 사용자 : ftp, 비밀번호 : foo 및 공유 디렉토리 / home / ftp로 로그인하고 싶습니다.

3) 때때로 서버에서 파일을 다운로드 해야하는 응용 프로그램이 있으며 전체 운영 클라이언트로 로그인 할 필요가 없습니다.

지금까지 / etc / ssh / sshd_config에 다음 줄을 추가했습니다.

Protocol 2
Subsystem sftp /usr/libexec/sftp-server
Match User ftp
   ForceCommand internal-sftp
   ChrootDirectory /home/ftp

다른 모든 것은 주석이 달린다.

/home/ftp 현재 빈 디렉토리입니다.

루트 자격 증명을 사용하여 파일을 다운로드하려고하면 액세스가 작동하지만 ftp 자격 증명을 사용하면 작동하지 않습니다. 로그인 쉘을 설정해야합니까? 어떻게 든 / home / ftp를 채워야합니까?

편집 : 이것은 내 sshd 로그입니다.

subsystem request for sftp
debug1: subsystem: exec() internal-sftp
debug1: Forced command (config) 'internal-sftp '
debug2: fd 3 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 8 setting O_NONBLOCK
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 17613
debug1: session_exit_message: session 0 channel 0 pid 17613
debug2: channel 0: request exit-status confirm 0
debug1: session_exit_message: release channel 0
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
debug2: channel 0: read<=0 rfd 9 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: send close
debug2: notify_done: reading
debug3: channel 0: will not send data after close
debug3: channel 0: will not send data after close
User child is on pid 17611
debug3: mm_request_receive entering

* 클라이언트가 여기에 멈춤

"루트"로 로그인하면 파일이 올바르게 다운로드됩니다. 구성 파일의 마지막 세 줄을 주석 처리하면 올바르게 다운로드됩니다 (즉, Match줄과 다음 2 줄).


일치 옵션 중 하나만 지정해 보셨습니까 ? 실제 SFTP 클라이언트를 사용하면 어떻게됩니까? 일반 SSH 클라이언트 (예 : sshWindows의 PuTTY)를 사용하여 계속 연결할 수 있습니까 ? 어떤 버전의 OpenSSH를 사용하고 있습니까?
Daniel Beck

답변:


7

예를 들어, /home/ftp소유 root하고 해당 그룹 및 기타 그룹에 쓰기 권한이 없는지 확인해야합니다 chmod 0755. ftp파일을 추가하려면 하위 디렉토리 를 추가해야합니다.


internal-sftp서브 시스템 도 필요합니다 . 그렇지 않으면 다음에 적절한 chroot환경 을 제공해야합니다 /home/ftp.

Subsystem sftp internal-sftp

비 암호 종류의 모든 로그인을 허용하지 않으려면 다음을 입력하십시오.

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

기본적으로 활성화되어 있습니다.


서브 시스템 라인을 너의 것으로 교체하고 (디렉토리 권한을 설정하면) 오류 문자열이 사라지지만 클라이언트 프로그램이 "멈추고"필요한 파일을 다운로드하지 않습니다 (루트 자격 증명을 사용하여 다운로드 할 수 있음). sshd 출력을 더 장황하게 만드는 방법이 있습니까?
Emiliano

단일 구성 항목 만 차례로 추가하고 연결하여 결함이있는 옵션을 판별 할 수 있는지 또는 옵션 조합인지 여부를 테스트하십시오. /var/log/secure적어도 출력은 시스템에서 얻을 수있는 곳입니다.
Daniel Beck

LogLevel 지시문을 사용하여 로그인 수준을 올렸습니다. 에서 문자열을 읽을 수 있습니다 /var/log/messages. 나는 다음을 가지고 Failed none for ftp [...]다음 Accepted password for ftp [...]User child is on pid 7658. 클라이언트가 중단 된 다음 시간이 초과 됨
Emiliano

@happy_emi 질문에 해당 정보를 추가하십시오.
Daniel Beck

디렉토리 권한 문제인 것 같습니다. sshd_config그냥 괜찮 았습니다.
Emiliano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.