SSH에는 공개 및 개인 키가 필요한 반면 SFTP 비밀번호 로그인만 허용하도록 Linux 서버를 설정하려면 어떻게 해야 합니까?

SSH에는 공개 및 개인 키가 필요한 반면 SFTP 비밀번호 로그인만 허용하도록 Linux 서버를 설정하려면 어떻게 해야 합니까?

내 계정의 공개 개인 키를 사용하여 로그인하도록 구성한 Linux 서버가 있는데 제대로 작동합니다. 설정한지 오래되어서 어떤 조치를 취했는지 기억이 나지 않지만 비밀번호 로그인을 허용하지 않도록 구성되어 있습니다. 올바른 키(ssh 또는 sftp 사용) 없이 시스템에서 로그인하려고 하면 다음 오류가 발생합니다(예상대로).Permission denied (publickey,password)

이제 웹 서버의 디렉터리에 있는 모든 웹 페이지를 편집할 수 있어야 하는 새 사용자를 시스템에 추가해야 합니다. 액세스해야 하는 디렉터리가 이미 존재합니다. 이 사용자는 SFTP를 통해서만 액세스할 수 있어야 하며 다른 모든 로그인은 비활성화됩니다. 또한 이 사용자가 공개 키가 아닌 비밀번호를 사용하여 로그인할 수 있기를 바랍니다. 다음과 같이 사용자를 설정했습니다.

sudo useradd -g sftpusers -d /home/ethereal/lemp-compose/public/promopages -s /sbin/nologin promoadmin

그런 다음 다음과 같이 새 사용자가 생성되었는지 확인합니다.

grep promoadmin /etc/passwd

다음과 같이 액세스해야 하는 기존 디렉터리의 소유자를 변경했습니다.

sudo chown -R promoadmin:sftpusers /home/ethereal/lemp-compose/public/promopages

그리고 계정의 비밀번호를 설정하세요.

sudo passwd promoadmin

이제 편집했으므로 /etc/ssh/sshd_config상황이 이상해졌습니다. 현재 시스템이 작동하는 방식을 고려하면,예상되는(무엇보다도) 다음을 확인하십시오. (말씀드린 것처럼 몇 년 전에 이 서버를 설정하기 위해 어떤 단계를 밟았는지 기억이 나지 않습니다.)

PermitRootLogin no 
RSAAuthentication yes
PubkeyAuthentication yes

PasswordAuthentication no

난 무엇인가?실제로내가 보는 것은

PermitRootLogin no 
RSAAuthentication yes
PubkeyAuthentication yes

PasswordAuthentication yes 

그런 다음 계속하십시오.

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

AllowUsers etherealadmin promoadmin
AllowGroups sftpusers

KexAlgorithms [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

Match Group sftpusers
  PasswordAuthentication yes

완료되면 SSH를 다시 ​​시작했습니다.

sudo service ssh restart

내 구성에 따르면 비밀번호나 공개/개인 키(ssh 및 sftp 사용)를 사용하여 로그인할 수 있을 것으로 예상했지만 분명히 그렇지 않습니다. 또한 promoadmin 사용자가 sftp를 사용하여 로그인할 수 있기를 바랍니다. 그러나 이것은 작동하지 않습니다. etherealadmin 사용자는 ssh 및 sftp에 공개 개인 키만 사용하므로 promoadmin을 전혀 작동시킬 수 없습니다!

나는 분명히 이것을 망쳤습니다. 문제를 파악하고 이 혼란을 정리하는 데 도움을 줄 수 있는 사람에게 매우 감사할 것입니다!


2부, 지금까지 제안해 주신 모든 분들께 감사드립니다.

-v 옵션을 사용하여 로그인을 시도하면 다음과 같은 결과가 나타납니다(IP 주소는 관련성이 없어 난독화됩니다).

debug1: Trying private key: /Users/headbanger/.ssh/id_dsa
debug1: Trying private key: /Users/headbanger/.ssh/id_ecdsa
debug1: Trying private key: /Users/headbanger/.ssh/id_ed25519
debug1: Trying private key: /Users/headbanger/.ssh/id_xmss
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
Authenticated to xxx.xxx.xxx.xxx ([xxx.xxx.xxx.xxx]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_GB.UTF-8
debug1: Sending env LC_TERMINAL_VERSION = 3.3.9
debug1: Sending env LC_TERMINAL = iTerm2
debug1: Sending subsystem: sftp
Received message too long 1416128883
Ensure the remote shell produces no output for non-interactive sessions.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 2412, received 2712 bytes, in 0.8 seconds
Bytes per second: sent 3002.2, received 3375.6
debug1: Exit status 1

이는 /usr/sbin/nologin 쉘이 원래 잘못 지정되었던 문제를 해결한 후에 발생합니다. 그래서 우리는 해결책에 더 가까워질 수 있습니다. /usr/sbin/nologin이 문제의 일부인 경우를 대비해 /etc/shells에 포함되어 있지 않다는 점도 주목할 가치가 있습니다.

모든 아이디어를 환영합니다!

관련 정보