在 Ubuntu 服务器上创建一个新的 SSH 用户

Oli*_*Oli 128 server ssh users

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

  • 创建一个新用户(让我们jim在其余部分调用他们)。我希望他们有一个/home/目录。
  • 授予jimSSH 访问权限。
  • 允许jimsu根,但不执行sudo操作。
  • 关闭 root SSH 访问。
  • 将 SSHd 移至非标准端口以帮助阻止暴力攻击。

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

小智 123

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
Run Code Online (Sandbox Code Playgroud)

需要添加用户到/ etc / SSH / ssh_config中。

  • 我的问题是 chown,我以 root 身份创建了 `~./ssh`,但从未授予用户所有权。 (3认同)
  • 对我来说它必须是 chmod 755 /home/username/.ssh 否则它不会工作。 (2认同)

Lek*_*eyn 107

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

Port 1234
PermitRootLogin no
AllowUsers jim
Run Code Online (Sandbox Code Playgroud)

Port 1234导致SSH监听1234端口。你可以使用从1到65535的任何未使用的端口。建议选择一个只能被root使用的特权端口(端口1-1024)。如果您的 SSH 守护程序由于某种原因停止工作,则流氓应用程序无法拦截连接。

PermitRootLogin 不允许直接 root 登录。

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

AllowUsers jim@1.2.3.4
Run Code Online (Sandbox Code Playgroud)

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

sudo service ssh reload
Run Code Online (Sandbox Code Playgroud)

  • +1:注意:这些说明仍然适用于较新版本的 Ubuntu(例如 13.04)。但是,如果您确实想要 `root` 登录(也许您仍在设置服务器),则必须将 `PermitRootLogin` 设置为 `yes`,并将 `root` 添加到 `AllowUsers`。 (10认同)
  • 这个用户的密码是什么? (4认同)
  • @Wolfpack'08 使用 `AllowUsers username1,username2` 将 SSH 登录限制为这些用户。确保重新加载 `sshd`。如果这没有帮助,请创建一个新问题。 (3认同)
  • @Lekensteyn 你的命令:`AllowUsers username1,username2` 格式错误,会将你锁定在服务器之外!正确的设置命令是:`AllowUsers username1 username2` (2认同)

Kee*_*ook 13

将会有/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/home/jim/.ssh/home/jim/.ssh/*等。

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

只要用户不属于该admin组,他们就无法sudo到 root。为了让他们使用su,您需要设置一个 root 密码 ( passwd root),之后我建议PermitRootLogin=no/etc/ssh/sshd_config.


小智 11

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

此命令安装服务器

sudo apt-get install openssh-server

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

/etc/ssh/sshd_config

不过,这需要您重新启动服务。

sudo service ssh restart


小智 10

在您设置密码之前,Jim 将无法访问 SSH。作为 root 执行:

grep -i "jim" /etc/shadow | awk -F':' '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)

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

还要确保确认 jim 具有默认设置的登录 shell 和存在的主目录。

请注意 lekensteyn 的帖子,了解有关修改 SSH 服务器设置的信息。


小智 5

就我而言,我有一个允许访问的组,但用户不属于该组。这为我解决了这个问题。

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

usermod -a -G sshusers jim
Run Code Online (Sandbox Code Playgroud)

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