为 ssh 会话指定 shell

为 ssh 会话指定 shell

我正在通过 ssh 作为 user 登录到远程服务器www-datawww-data服务器上的用户将其默认 shell 设置为/bin/sh,当我登录时,我将 dash 作为我的 shell。然后我可以输入bash并获取bashshell。

当我通过 ssh 登录时,我想直接登录到 bash。但我不想更改服务器上的默认 shell。我希望我的更改仅影响 ssh 会话。

我尝试将command="/bin/bash"公钥放在 中.ssh/authorized_keys,但这有另一个副作用:虽然 bash 在登录时作为默认 shell 工作,但scp停止工作。我无法再将 scp 文件传入或传出 remore 服务器。

如何设置bashssh 会话的默认 shell,而不破坏其他应用程序?

答案1

我在使用的一个系统上也有类似的问题(默认 shell 是bash,我想要ksh93,但chsh不起作用)。

我的解决方案适合您的情况,是exec从 中获取所需的 shell ~/.profile,Dash 在启动时读取该 shell。 Bash 不会接触,~/.profile除非它找不到~/.bash_profile~/.bash_login(按照该顺序,请参阅 Bash 手册)。

# in ~/.profile:
if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then
    export SHELL="/usr/bin/bash"
    exec $SHELL -l
fi

SSHSSH_TTY在交互式 SSH 会话中设置,因此我们在确保 Bash 可用并执行它之前检查是否已设置(非空字符串)。我正在设置和导出,SHELL以防任何其他应用程序查看它,并避免 Bash 由于缺少两者而陷入无限循环~/.bash_profile~/.bash_login从而尝试~/.profile再次执行。

相关内容