仅为您的用户更改 Solaris/SunOS 中的 shell,而无需访问 /etc/passwd

仅为您的用户更改 Solaris/SunOS 中的 shell,而无需访问 /etc/passwd

如何在 Solaris/SunOS 中仅为我的用户设置 shell,而无法访问/etc/passwd或任何其他su内容?

此后,它应该适用于交互ssh(1) 和ssh发送命令 (2)。

uname -aSunOS ... 5.10 Generic_148889-04 i86pc i386 i86pc

编辑回应评论和答案

没有chsh

我不能这样做/usr/bin/passwd -e——许可被拒绝。

默认 shell 是 bash。我想要 zsh。

我已经尝试手动设置SHELL环境变量,并在文件中手动启动 shell .profile,但这对我不起作用第二种情况(2):ssh user@host command将在 bash 中运行command

与登录时获得我喜欢的 shell 相比,这是次要的,因此解决方法当然值得一提,只是,我提出这个问题的目的是以正确的方式得到它。因为它只与一个用户相关,所以我认为在不涉及 SA 的情况下也是可行的,但现在我不太确定。 (但是,任何解决(1)和(2)问题的解决方法都是很酷的,这是肯定的。)

答案1

方法#1:与chsh

通常,您可以使用该命令chsh来更改 shell,而无需访问/etc/passwd.该文件通常列出您的默认 shell,例如:

saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh

普通用户只能更改他/她自己帐户的登录shell,超级用户即root用户可以更改任何帐户的登录shell。您可以使用以下命令查看系统上可用的 shell:

$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh

要更改您的 shell,您可以使用以下命令:

$ chsh -s /bin/zsh saml
Changing shell for saml.
Password: 
Shell changed.

查看文件效果很明显/etc/passwd

$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh

您不会立即看到更改。您必须注销/登录才能看到它:

[saml@grinchy]~% echo $SHELL
/bin/zsh

方法#2:/usr/bin/passwd -e

如果您无权访问该命令chsh,显然您在 Solaris 上没有该命令,并且您没有 root 访问权限来更改它/etc/passwd,您仍然可以使用此命令执行相同的操作:

$ /usr/bin/passwd -e

方法#3:手动设置方法

如果上述方法都不是一个选项,那么您基本上只剩下最后一个选项,即将以下选项之一添加到现有 shell 的登录文件中:

  1. 默认 shell:/bin/csh 或 /bin/tcsh

    将以下行添加到$HOME/.login

    setenv SHELL=/bin/bash
    exec $SHELL
    
  2. 默认外壳:/bin/bash

    将以下内容添加到$HOME/.bash_profile

    export SHELL=/bin/zsh
    exec $SHELL
    

上面需要考虑的一些其他事情,/bin/bash例如,在设置之前,您可以通过执行检查来查看当前的 $SHELL 是否已经存在,从而使它们更加防弹。如果是,则不执行任何操作,否则继续执行exec $SHELL.

参考

答案2

技巧SHELL=newshell; exec "$SHELL"已经被涵盖了。

现在,如果您还希望通过 ssh 运行命令来使用新的 shell。如果当前的登录 shell 是bash,您可以将其添加到您的~/.bashrc

if [ -n "$BASH_EXECUTION_STRING" ]; then
  export SHELL=/bin/zsh
  exec "$SHELL" -c "$BASH_EXECUTION_STRING"
fi

每当启动时都会something使用新的 shell执行bashbash -c something 上面写着~/.bashrc

shell 开头bash -c something一般不读~/.bashrc。一个例外是当它们bashsshdorrshd或 on调用时bash -ic something

[ -n "$SSH_CONNECTION" ]如果您只想支付案件费用,您可以添加一张支票ssh

答案3

您无法通过普通 Solaris 安装来做到这一点。一个简单的解决方法是修改您的配置文件以执行所需的 shell。

例如,假设/etc/passwd您的 shell 是/bin/bash但您更喜欢/bin/ksh

$ tail -2 ~/.bash_profile
export SHELL=/bin/ksh
exec $SHELL

请注意不要因拼写错误而将您拒之门外,也不要因虚假的执行或逻辑而进入无限循环。

相关内容