我正在通过 ssh 作为 user 登录到远程服务器www-data
。www-data
服务器上的用户将其默认 shell 设置为/bin/sh
,当我登录时,我将 dash 作为我的 shell。然后我可以输入bash
并获取bash
shell。
当我通过 ssh 登录时,我想直接登录到 bash。但我不想更改服务器上的默认 shell。我希望我的更改仅影响 ssh 会话。
我尝试将command="/bin/bash"
公钥放在 中.ssh/authorized_keys
,但这有另一个副作用:虽然 bash 在登录时作为默认 shell 工作,但scp
停止工作。我无法再将 scp 文件传入或传出 remore 服务器。
如何设置bash
ssh 会话的默认 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
再次执行。