为 ssh 会话指定 shell

Mar*_*ter 4 shell bash ssh scp

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

我想在 ssh 登录时直接登录 bash。但我不想更改服务器上的默认 shell。我希望我的更改只影响 ssh 会话。

我试图把command="/bin/bash"我的公钥的盈方.ssh/authorized_keys,但还有另外一个副作用:虽然庆典在登录时,可以作为默认的shellscp停止工作。我无法再向 remore 服务器发送 scp 文件或从 remore 服务器发送 scp 文件。

如何在bash不破坏其他应用程序的情况下将 ssh 会话设置为默认 shell?

Kus*_*nda 5

我在我使用的一个系统上遇到了类似的问题(默认 shell 是bash,我想要ksh93chsh但不起作用)。

我的解决方案适用于您的情况,是exec~/.profileDash 读取所需的 shell 。~/.profile除非找不到~/.bash_profile~/.bash_login(按此顺序,请参阅 Bash 手册),否则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
Run Code Online (Sandbox Code Playgroud)

SSHSSH_TTY在交互式 SSH 会话中设置,因此在确保 Bash 可用并执行它之前,我们会检查它是否已设置(非空字符串)。我设置和导出SHELL它的情况下,任何其他应用程序的外观,并避免猛砸运行到一个无限循环,由于缺少既~/.bash_profile~/.bash_login,从而试图执行~/.profile一次。