以非 root 用户身份登录服务器时,无法通过 SSH 获取路径或命令历史记录

以非 root 用户身份登录服务器时,无法通过 SSH 获取路径或命令历史记录

当我以非 root 用户身份通过​​ SSH 进入服务器时,它只显示 $ 而不显示路径。当我不以 root 用户身份通过​​ SSH 进入时,它也不会允许我按向上键并查看命令历史记录。我如何为其他用户提供上述选项?

答案1

实现这一点需要两个步骤。

步骤1)确保您的用户正在使用 bash shell。查看 /etc/passwd 中每个用户的条目,并确保它以 /bin/bash 结尾。例如,如果您看到以下内容:

joeuser:x:1234:1234:Joe User:/home/joeuser:/bin/sh

然后将其改为:

joeuser:x:1234:1234:Joe User:/home/joeuser:/bin/bash

使用 bash 应该可以解决向上箭头问题并启用下一步。

第2步)如果您仍然没有看到带有当前工作目录的提示,请告诉 bash 这就是您想要的。有两种方法可以做到这一点。添加以下行:

export PS1='\w> '

要么

  1. 每个用户的.bash_profile文件;或者
  2. 系统范围的/etc/profile文件

此行分配PS1代表主 shell 提示符的变量。我建议将其放入,/etc/profile因为这样更简单,并为所有用户提供有用的提示符。如果用户希望他们的提示符有其他内容,他们随时可以编辑自己的.bash_profile文件。

注意:如果您的系统有,/etc/bash.bashrc那么将该行放在那里而不是/etc/profile

答案2

我的passwd(5)手册页对条目的最后一个字段/etc/passwd(称为“命令解释器”)进行了这样的说明:

命令解释器字段提供用户的命令语言解释器的名称,或要执行的初始程序的名称。登录程序使用此信息来设置 $SHELL 环境变量的值。如果此字段为空,则默认为该值/bin/sh

因此,您的选择似乎是:

  1. 将您的用户放入/etc/passwd文件中。
  2. 通过 NIS 或其他网络方式获取用户信息。
  3. 链接/bin/sh到其他 shell。我不推荐这样做,因为程序很可能依赖于现有的行为/bin/sh

答案3

这听起来很奇怪,因为默认情况下,任何非 root 用户都应该能够拥有您描述的基本功能。话虽如此,这个问题听起来确实很熟悉。每当我在 Ubuntu (Debian) 上设置用户时,我都会使用adduser效果很好;但我总是遇到问题useradd. 正如官方手册页所述useradd

useradd是用于添加用户的低级实用程序。在 Debian 上,管理员通常应使用adduser(8)。

原因归结为useradd最终是一个低级系统二进制文件,它需要比用户名更多的命令来为新用户添加路径和 shell 信息。相比之下,adduser是一个 Perl 脚本包装器,useradd它提供了更友好、更用户友好的工作流程,无需过多考虑即可在系统中创建新用户。只需将其adduser视为 的“向导”设置useradd

因此,如果您通过 添加了用户,则useradd很有可能您错过了命令行选项中的配置设置。因此从技术上讲,您确实向系统添加了用户,但在系统配置方面没有太多其他内容。相比之下,adduser旨在处理所有杂项基本事务。

知道这一点后,我建议您删除任何已经创建的用户,就像这样;当然,更改[username]为实际的用户名:

sudo deluser --remove-home [username]

然后像adduser这样重新创建该用户:

sudo adduser [username]

相关内容