Comment définir le shell qui est utilisé lorsqu'un utilisateur SSHs sur un serveur. Par exemple, je ne supporte pas BASH et j'ai besoin d'utiliser ZSH, comment puis-je faire en sorte que ZSH soit chargé avec mon profil ( .zsh_profile
) lorsque je ssh sur la machine.
Je ne veux pas non plus avoir à passer un tas de paramètres avec ssh, ne puis-je pas définir le shell par défaut?
/etc/shells
pour que le shell soit sélectionnable.passwd
package .man chsh
change de shell, ne fonctionne pas toujoursAlternativement, vous pouvez coller
exec /bin/zsh
dans votre script de connexion bash. Cela remplacera l'instance bash par votre shell.Ou vous pouvez faire
ssh host "zsh -l"
la source
L
ssh -t
est requis pour obtenir un ATS pour les dernières options. Par défaut, si une commande (commezsh -l
) est fournie, OpenSSH ferait un shell sans connexion, qui n'allouerait pas de TTY pour vous, et-l
ne changerait pas cela (car il est exécuté après la connexion).Modifiez / etc / passwd (si vous en avez les droits ou demandez à votre administrateur système) de changer votre shell par défaut.
la source
Si vous ne pouvez pas changer votre shell par défaut, ça
ssh -t user@host 'zsh -l'
marche.L'
-t
indicateur force une allocation pseudo-tty, et l'-l
indicateur génère un shell de connexion .la source
Je ne sais pas comment vous pouvez mettre votre local
.zshrc
sur un serveur distant (c'est-à-dire sans le stocker de manière permanente là-bas), cela fonctionne pour moi de changer mon shell de connexion sur le serveur distant.Puisqu'il s'agit d'un compte partagé, je ne peux l'utiliser
zsh
que pour moi avec cette méthode.Ajoutez ceci à votre
~/.ssh/config
fichier sur votre machine locale.Il pourrait y avoir un moyen hackeux d'accomplir ce que vous recherchez, comme ci-dessous.
AVERTISSEMENT Ceci n'est livré avec aucune garantie et ne semble pas «sage», mais j'ai réussi à mettre mon fichier local sur le serveur et à le source dans le shell de connexion en utilisant cela.
Comment ça marche?
RemoteCommand
définit ce qui doit être exécuté sur le côté distant.LocalCommand
définit ce qui doit être exécuté sur local, qui est utilisé pour copier votre fichier local sur un serveur distant pour le sourcer. Voici le hic, cela ne se produit qu'après une connexion «réussie» à l'hôte distant.Sens:
sleep
sftp
pour placer votre fichier sur un serveur distant, le serveur distant se réveillesleep
et source vos scripts.C'est super hackish, j'aimerais savoir s'il y a une meilleure façon aussi.
Mise à jour: Cela peut être utilisé à la place d'un temps de sommeil «long»:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
la source