如何设置用户通过 SSH 连接到服务器时使用的 shell。例如,我无法忍受 BASH 并且需要使用 ZSH,我该如何制作,以便.zsh_profile
在我 ssh 到机器时将 ZSH 与我的配置文件()一起加载。
我也不想用ssh传递一堆参数,我不能设置默认shell吗?
如何设置用户通过 SSH 连接到服务器时使用的 shell。例如,我无法忍受 BASH 并且需要使用 ZSH,我该如何制作,以便.zsh_profile
在我 ssh 到机器时将 ZSH 与我的配置文件()一起加载。
我也不想用ssh传递一堆参数,我不能设置默认shell吗?
假设您在 Linux 上运行,您可以使用该
chsh
命令。如果您无法更改默认外壳,则
ssh -t user@host 'zsh -l'
可以使用。该
-t
标志强制进行伪 tty 分配,并且该-l
标志生成一个登录 shell。man chsh
更改外壳,并不总是有效或者,您可以坚持
exec /bin/zsh
使用您的 bash 登录脚本。这将用您的 shell 替换 bash 实例。或者你可以做
ssh host "zsh -l"
编辑 /etc/passwd(如果您有权限,或询问您的系统管理员)以更改您的默认 shell。
我不确定如何将本地服务器放到
.zshrc
远程服务器上(即没有将其永久存储在那里),这对我来说可以更改远程服务器上的登录 shell。由于它是一个共享帐户,因此我
zsh
只能通过这种方法使用自己。将此添加到
~/.ssh/config
本地计算机中的文件中。可能有一些骇人听闻的方式来完成您正在寻找的东西,如下所示。
警告 这没有任何保证,看起来也不“明智”,但是我确实设法将我的本地文件放到服务器上,并使用它在登录 shell 中获取它。
这个怎么运作?
RemoteCommand
定义需要在远程端运行的内容。LocalCommand
定义需要在本地运行的内容,用于将本地文件复制到远程服务器以获取它。这是一个问题,它仅在“成功”连接到远程主机后才会发生。意义:
sleep
sftp
将您的文件放到远程服务器,远程服务器从您的脚本中唤醒sleep
并获取您的脚本。这是超级hackish,我也想知道是否有更好的方法。
更新:这可以用来代替“长”睡眠时间:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
如果您使用的是 Windows:
ssh -t <username@servername> "powershell"
ssh -t <username@servername> "pwsh"
bash
(Git Bash 或 WSL),使用ssh -t <username@servername> "bash"
关于原始问题:更改由 SSH 会话打开的 shell,我认为它不可配置。您可以更改用户在系统上使用的 shell(
chsh
或编辑 /etc/passwd),甚至可以更改机器的默认 shell,但不能更改 SSH shell(我认为 SSH 只是使用用户的参数打开一个常规会话,包括外壳配置)。