在Ubuntu Server上创建一个新的SSH用户

刚刚创建了一个新的虚拟Ubuntu服务器,我正在加强它以供生产使用。 我目前有一个root帐户。 我想做以下事情:

  • 创建一个新用户(让我们为其余的用户称之为jim )。 我希望他们有一个/home/目录。
  • jim SSH访问权限。
  • 允许jim su到root但不执行sudo操作。
  • 关闭root SSH访问权限。
  • 将SSHd移至非标准端口以帮助阻止暴力攻击。

我的问题在于前两项。 我已经找到了useradd但出于某种原因,我无法以通过SSH创建的用户身份登录。 我是否需要击败SSHd以允许此操作?

编辑(以root身份) /etc/ssh/sshd_config 。 附加以下内容:

 Port 1234 PermitRootLogin no AllowUsers jim 

Port 1234使SSH在端口1234上侦听。您可以使用1到65535之间的任何未使用的端口。建议选择只能由root用户使用的特权端口(端口1-1024)。 如果您的SSH守护程序由于某种原因停止工作,则恶意应用程序无法拦截连接。

PermitRootLogin不允许直接root登录。

AllowUsers jim允许用户jim通过SSH登录。 如果您不必从任何地方登录,可以通过将jim限制为IP地址(将1.2.3.4替换为您的实际IP地址)来使其更加安全:

 AllowUsers jim@1.2.3.4 

对配置文件/etc/ssh/sshd_config更改不会立即应用,要重新加载配置,请运行:

 sudo service ssh reload 

SSH对目录和文件权限非常挑剔。 确保:

  1. 目录/home/username/.ssh具有权限“700”并且由用户拥有(不是root!)
  2. / home / username / ssh / authorized_keys具有权限“600”并且由用户拥有

将您的公钥复制到authorized_keys文件中。

 sudo chown -R username:username /home/username/.ssh sudo chmod 0700 /home/username/.ssh sudo chmod 0600 /home/username/.ssh/authorized_keys 

无需将用户添加到/ etc / ssh / ssh_config。

/var/log/auth.log中将提供有关SSH(或PAM)拒绝登录尝试的原因的线索。 通过在ssh客户端使用-v选项可以找到其他线索。 几种常见情况,其中一些在其他答案中提到:

  • 用户帐户缺少密码,或者被禁用(请参阅man passwd ,尝试重置密码或检查/etc/shadow的内容)。
  • /etc/ssh/sshd_config配置为禁止登录( DenyUsersAllowUsersPasswordAuthenticationPubkeyAuthenticationUsePAM等,请参阅man sshd_config )。
  • 用户的shell未在/etc/shells列出。
  • 与SSH操作相关的目录或文件的各种权限问题: /etc/ssh/etc/ssh /home/jim/.ssh /etc/ssh /home/jim/.ssh /etc/ssh /home/jim/.ssh/etc/ssh /home/jim/.ssh /etc/ssh /home/jim/.ssh /etc/ssh /home/jim/.ssh /etc/ssh

我还建议使用adduser (而不是useradd )来添加新用户; 它对各种默认帐户设置更加友好。

只要用户不是admin组的一部分,他们将无法sudo到root。 要让他们使用su ,你需要设置root密码( passwd root ),之后我建议在/etc/ssh/sshd_config设置PermitRootLogin=no

我可能是错的,但我总是必须安装服务器守护进程才能连接(至少在桌面上)默认安装ssh但这只是客户端

此命令安装服务器

sudo apt-get install openssh-server

您可以通过编辑更改端口并停止root登录

/etc/ssh/sshd_config

这需要您重新启动服务。

sudo service ssh restart

在设置密码之前,Jim不会拥有SSH访问权限。 作为root执行:

 grep -i "jim" /etc/shadow | awk -F':' '{ print $2 }' 

如果此命令返回“!” 角色然后为此帐户禁用登录。 以root身份执行passwd jim会提示您输入一个新的确认密码字符串,之后上面的grep命令应该返回一个表示jim密码的散列字符串。

还要确保validationjim有一个登录shell,默认设置,以及一个存在的主目录。

有关修改SSH服务器设置的信息,请注意lekensteyn的post。

在我的情况下,我有一个允许访问的组,用户不属于它。 这解决了我。

使用上面的示例与用户jim并假设组jim成员,因为它是唯一的组(以jim登录时发出groups命令以查找您所属的组)。 在我的/etc/ssh/sshd_config文件中,我有AllowGroups sshusers条目,因此需要将jim添加到sshusers组。 以下是如何实现这一目标:

 usermod -a -G sshusers jim 

根据您的配置更换您的组和用户。

可能存在默认情况下禁用PasswordAuthentication某些实例。

请检查/etc/ssh/sshd_config并确保将PasswordAuthentication属性设置为yes