![以非 root 用户身份登录服务器时,无法通过 SSH 获取路径或命令历史记录](https://linux22.com/image/1447916/%E4%BB%A5%E9%9D%9E%20root%20%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E7%99%BB%E5%BD%95%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%EF%BC%8C%E6%97%A0%E6%B3%95%E9%80%9A%E8%BF%87%20SSH%20%E8%8E%B7%E5%8F%96%E8%B7%AF%E5%BE%84%E6%88%96%E5%91%BD%E4%BB%A4%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95.png)
当我以非 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> '
要么
- 每个用户的
.bash_profile
文件;或者 - 系统范围的
/etc/profile
文件
此行分配PS1
代表主 shell 提示符的变量。我建议将其放入,/etc/profile
因为这样更简单,并为所有用户提供有用的提示符。如果用户希望他们的提示符有其他内容,他们随时可以编辑自己的.bash_profile
文件。
注意:如果您的系统有,/etc/bash.bashrc
那么将该行放在那里而不是/etc/profile
。
答案2
我的passwd(5)
手册页对条目的最后一个字段/etc/passwd
(称为“命令解释器”)进行了这样的说明:
命令解释器字段提供用户的命令语言解释器的名称,或要执行的初始程序的名称。登录程序使用此信息来设置 $SHELL 环境变量的值。如果此字段为空,则默认为该值/bin/sh。
因此,您的选择似乎是:
- 将您的用户放入
/etc/passwd
文件中。 - 通过 NIS 或其他网络方式获取用户信息。
- 链接
/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]