.ssh / config pour démarrer la session à distance dans zsh

11

Je souhaite démarrer une session à distance sans taper la commande suivante

ssh user@remoteserverip -t zsh

Je sais que je peux changer les noms d'hôtes dans le ~/.ssh/configpour utiliser simplement quelque chose comme ceci:

ssh serveralias -t zsh

Mais je veux supprimer le -t zshparamètre.

Existe-t-il un moyen d'y parvenir sans écrire de fonction?

brngp
la source

Réponses:

6

Je ne pense pas que ce soit possible avec ~/.ssh/config. Le -tpeut être couvert en ajoutant un RequestTTY yes, mais il ne semble pas que vous puissiez spécifier la commande à distance dans ~/.ssh/config.

Cependant, avec zsh, vous pouvez ajouter un:

alias -g 'serveralias=serveralias -t zsh'

à votre ~/.zshrc.

Ou créez une fonction comme:

zssh() ssh "$@" -t zsh
Stéphane Chazelas
la source
Est-ce aliasvraiment correct? Vérifiez vos devis.
un CVn du
Je pense que j'irai avec cette solution merci!
brngp
5

Je suis d'accord avec @Stephane qu'il n'y a aucun moyen de le faire en utilisant le ~/.ssh/config file. Une autre approche consisterait à utiliser le ~/.ssh/authorized_keysfichier sur le serveur distant. Si vous ajoutez une ligne comme celle-ci:

command="exec zsh" ssh-dss ..... rest of key ....

Ensuite, vous pouvez simplement ssh comme d'habitude et vous obtiendrez un zsh sur le serveur distant.

Exemple

Sur le serveur, ssh à distance.

$ ssh saml@greeneggs

Sur un serveur distant, confirmant que nous sommes dans un zsh.

[saml@greeneggs]~% ps -eaf|grep $$
saml      1974  1973  1 10:34 pts/3    00:00:00 zsh
saml      2023  1974  0 10:34 pts/3    00:00:00 ps -eaf
saml      2024  1974  0 10:34 pts/3    00:00:00 grep --color=auto 1974

Vous pouvez faire des choses plus élaborées en utilisant ce fichier, voir ce Q&R, intitulé: ssh, démarrer un shell spécifique et exécuter une commande sur la machine distante? .

slm
la source
command="exec zsh"est une mauvaise idée: cela rend impossible d'exécuter ssh avec une commande explicite (donc adieu scp, rsync,…). unix.stackexchange.com/a/20739 montre comment procéder décemment.
Gilles 'SO- arrête d'être méchant'
Je ne savais pas qu'il était possible d'utiliser les clés autorisées pour exécuter des commandes. c'est une assez jolie idée, mais je vais utiliser la solution de stephane car le problème pointé par Gilles. Merci
brngp
@ Gilles - oui, j'ai trouvé votre solution et j'ai juste montré le potentiel ici, je ne voulais pas simplement copier votre solution ici, c'est pourquoi j'ai référencé la vôtre au bas de ma réponse.
slm
4

Pour toute personne arrivant ici des années plus tard, depuis 2017, il est possible de tout mettre dans le fichier de configuration:

Host host_1
    HostName 1.2.3.4
    User root
    Port 22
    RequestTTY yes
    RemoteCommand zsh
Saskia Keil
la source
Meilleure réponse à partir de 2019. Cette réponse a besoin de plus de votes positifs!
geekQ
2
sudo usermod -s /bin/zsh yourusername
Sammitch
la source
0

Vous feriez mieux de modifier le paramètre de shell du système.

  1. Connectez-vous au serveur normalement. ssh serveralias
  2. Exécuter chshpour changer le shell du système
  3. Entrez /bin/zshpour le régler sur zsh
  4. Reconnectez-vous avec ssh serveraliaset cela montrera%

chsh [username] peut être utilisé pour modifier les paramètres d'un autre utilisateur sans se reconnecter.

Ch.Idea
la source