如何设置我的 Linux 服务器仅允许 sftp 密码登录,而 ssh 需要公钥私钥?

如何设置我的 Linux 服务器仅允许 sftp 密码登录,而 ssh 需要公钥私钥?

我有一个 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 shell 的一个问题之后发生的。所以我们可能更接近解决方案。还值得注意的是 /usr/sbin/nologin 不包含在 /etc/shells 中,以防万一这是问题的一部分。

欢迎所有想法!

相关内容