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


104

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

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

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


嗨!我可以在服务器上为您提供帮助,我不知道您的SSH有什么问题,因为对我而言,默认配置永远不会拒绝我的连接。您可能会看到man 5 nologin,上面写道,如果/ etc / nologin存在,那么您只能使用root登录。尝试正常登录,然后写入结果。
antivirtel 2010年

用户的外壳是什么?是/ bin / bash吗?在/ etc / password中检查一下。确保它不是/ dev / null或/ bin / false。
LFC_fan 2010年

是LFC_fan,还是/ etc / nologin。使用(sudo)cat / etc / passwd | grep jim
antivirtel 2010年

1
@B。罗兰(Roland)我确实有一个/etc/nologin文件,但是它是空的。我删除它并重新启动SSH,但它仍然只是回应Permission denied, please try again.当我尝试登录。
奥利

@LFC_fan是/ bin / bash
Oli

Answers:


99

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

Port 1234
PermitRootLogin no
AllowUsers jim

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

PermitRootLogin 禁止直接root登录。

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

AllowUsers jim@1.2.3.4

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

sudo service ssh reload

10
+1:注意:这些说明仍然适用于Ubuntu的较新版本(例如13.04)。root但是,如果您确实要登录(也许您仍在设置服务器),则必须将设置PermitRootLoginyes,同时还要添加rootAllowUsers
JRG开发人员

4
该用户的密码是什么?
Wolfpack'08 2013年

我的VPS带有用于在端口22上进行SSH登录的root密码。将答案附加到sshd_config会导致root无法登录。这是因为我也将端口22用作了jim,还是其他原因?
Wolfpack'08 2013年

1
@Lekensteyn我发现只是增加一个新用户到Ubuntu本身为该用户创建一个SSH账户.... useradd -m -G sudo,adm -s /bin/bash mecharokpasswd mecharok
Wolfpack'08

3
@ Wolfpack'08用于AllowUsers username1,username2将SSH登录限制为这些用户。确保sshd已重新加载。如果这样做没有帮助,请创建一个新问题。
Lekensteyn '16

96

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中。


1
我的问题是chown,我~./ssh以root用户身份创建,但从未授予用户所有权。
Gerve 2014年

1
我的问题是我尝试使用/root/.ssh/authorized_keys而不是/home/bob/.ssh/authorized_keys
亚历克斯W

我可以确认:在我们的VPS托管上,无需进行编辑ssh_config。设置该目录和文件就足够了。
2015年

2
对我来说,它必须是chmod 755 /home/username/.ssh,否则它将无法正常工作。
Jim W

以用户(或sudo su --login {user})身份登录并运行ssh-keygen->“ .ssh”文件夹,密钥+证书和权限已容易得多。只需按照您的说明创建authorized_keys。
bshea

13

会有线索/var/log/auth.log说明为什么SSH(或PAM)拒绝登录尝试。通过将-v选项与ssh客户端一起使用,可以找到其他线索。几种常见情况,另一些回答中提到:

  • 用户帐户缺少密码,或者被禁用(请参阅man passwd,尝试重设密码或检查的内容/etc/shadow)。
  • /etc/ssh/sshd_config配置为不允许登录(DenyUsersAllowUsersPasswordAuthenticationPubkeyAuthenticationUsePAM等,见man sshd_config)。
  • 用户的外壳未在中列出/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


非常感谢您提供的出色答案-特别是“ adduser”提供了很多帮助!
vishal.biyani

11

我可能是错的,但是我总是必须先安装服务器守护程序,然后才能连接(至少在台式机上)默认情况下已安装ssh,但这仅是客户端

此命令安装服务器

sudo apt-get install openssh-server

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

/etc/ssh/sshd_config

但是,这需要您重新启动服务。

sudo service ssh restart


这是一个虚拟服务器(VPS),因此默认情况下安装SSH。这是我到服务器的唯一界面。而且,您可以通过重新加载配置sudo /etc/init.d/ssh reload,但是仍然可以提供很好的信息。
奥利(Oli)

8

在您设置密码之前,Jim将无法使用SSH访问。以root身份执行:

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

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

另外,请确保验证jim是否具有登录外壳程序(默认设置)以及存在的主目录。

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


“如果此命令返回一个“!”字符,则该帐户的登录被禁用。“注意,这并不意味着您不能进行SSH;只是您不能使用密码(而使用公用密钥)。
bfontaine

3

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

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

usermod -a -G sshusers jim

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


1
您应该通过参考可以更好地说明您的示例的资源或通过在OP原始问题的基础上添加相关信息来改善答案。例如,指定jim为虚拟用户以帮助提供上下文的用户。这里的文章很好地解释了。

0

在某些情况下,PasswordAuthentication默认情况下会禁用。

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


0

@Lekensteyn我无法对问题答案发表评论,因为我没有声誉-但我尝试附加

AllowUsers existingUser,newUser

到我的/ etc / ssh / sshd_config文件中,现在我再也不能同时使用我的existingUser或newUser了。


我了解您的痛苦:DI曾经遇到过同样的问题。解决方案: AllowUsers existingUser@* newUser@*
伊斯梅尔Atkurt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.