Answers:
假设您正在Linux上运行,则可以使用该chsh
命令。
chsh -s /bin/ksh foo
chsh -s /bin/bash username
编辑/ etc / passwd(如果拥有权限,或询问系统管理员)以更改默认外壳程序。
我不确定如何将本地.zshrc
服务器放到远程服务器上(这并不需要将其永久存储在远程服务器上),这对我来说可以更改远程服务器上的登录shell。
由于它是一个共享帐户,因此我只能使用zsh
此方法自己使用。
将此添加到~/.ssh/config
本地计算机上的文件中。
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
可能有骇人听闻的方式来完成您想要的内容,如下所示。
警告 这没有保证,看起来也不是“明智的”,但是我确实设法将本地文件放到服务器上,并使用此文件将其发送到登录shell中。
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
怎么运行的?
RemoteCommand
定义需要在远程运行的内容。LocalCommand
定义需要在本地上运行的内容,该内容用于将本地文件复制到远程服务器以进行采购。这就是问题,它仅在“成功”连接到远程主机之后发生。含义:
sleep
sftp
将文件放置到远程服务器,远程服务器从sleep
您的脚本中唤醒并获取您的脚本。这是超级骇客的,我也想知道是否还有更好的方法。
更新:可以使用它代替“漫长的”睡眠时间:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
/etc/shells
,以便外壳可以选择。