Équivalent SSH de .profile / .bashrc

14

Je suis à la recherche d'un moyen de définir automatiquement certains alias à l'intérieur de ma session sur n'importe quel serveur auquel je ssh. Je ne peux pas les mettre dans les .bashrcfichiers sur le serveur car les comptes d'utilisateurs avec lesquels je me connecte sont partagés par d'autres personnes et en plus il y en a des dizaines et maintenir un script sur chaque machine serait pénible. Je sais que je pourrais utiliser expectpour taper les alias automatiquement, mais je me demandais simplement si OpenSSH avait quelque chose de intégré qui pourrait éventuellement être utilisé pour y parvenir?

Ramon
la source

Réponses:

7

Il n'y a rien de mal à le faire dans l'attente. L'autre façon dont je l'ai fait est aussi assez sale, avec un script, scp d'abord le profil que vous voulez exécuter, puis ssh, exécutez-le et restez connecté.

Placez donc tous les paramètres de profil dans un fichier local .<local username>-<hostname>-init.shet exécutez le script ci-dessous pour vous connecter à l'hôte distant.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"
Sirch
la source
J'aime ça car il ne nécessite aucune configuration particulière sur le serveur, sympa!
Ramon
4

Vous pouvez mettre votre configuration .bashrcet ne les laisser s'exécuter que lorsque vous vous connectez. Pour rendre cela possible, vous pouvez passer une variable d'environnement via ssh.

.bashrc modifications

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config modifications:

AcceptEnv ... IAMTHEGREATEST

.ssh/config modifications (côté client):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc modifications (côté client):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(non testé, mais devrait le faire)

krissi
la source
Comment cela remplit-il l'objectif de configurer automatiquement les choses sur n'importe quel serveur auquel l'OP se connecte?
womble
Ce ne est pas. Il résout la partie de la question «les comptes d'utilisateurs avec
lesquels
C'est presque exactement ce que je fais, mais avec une différence - au lieu d'accepter cette variable d'environnement de l'extérieur, je la place dans la clé SSH elle-même. Cela signifie que .ssh / authorized_keys contient des lignes commençant par environment = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana
3

À partir de la page de manuel ssh (1) , si vous créez un fichier ~ / .ssh / rc , il sera exécuté AVANT l'exécution du shell de connexion de l'utilisateur, donnant ainsi la possibilité d'effectuer des tâches de «pré-configuration» avant de vous connecter. l'exemple donné était de monter des partages réseau avant de se connecter.

Si vous ne souhaitez pas utiliser des fichiers ~ / .ssh / rc individuels , vous pouvez faire de même avec / etc / ssh / sshrc . Un test rapide pour vérifier votre nom d'utilisateur particulier ou une méthode d'identification pourrait empêcher les autres de même remarquer qu'il était en place.

/ etc / ssh / sshrc provient UNIQUEMENT si ~ / .ssh / rc n'existe pas, vous pouvez donc atteindre efficacement deux couches de complexité.

lornix
la source
Ding Ding ding, nous avons un gagnant!
pause jusqu'à nouvel ordre.
Manqué celui-là! Bien que cela semble attrayant, cela nécessitera toujours de configurer chaque serveur individuellement, car c'est du côté serveur, non?
Ramon
yup, côté serveur, mais vous n'auriez qu'à scp un fichier, une fois. Il n'y a pas vraiment de moyen facile d'envoyer un flux de commandes à traiter immédiatement après la connexion. {Sourire} Donnez-moi un peu cependant, écrivez peut-être quelque chose ... {pas aujourd'hui!}
lornix
2

Les alias sont définis et interprétés par le shell.

Malheureusement, il n'y a aucun moyen sshde les transmettre au shell distant.

Vous pouvez écrire un sshwrapper côté client qui crée un environnement agréable du côté distant, mais ce ne serait pas joli.

Pierre Carrier
la source
0

Si possible, je voudrais stocker un petit script qui initialise / définit tout ce que vous voulez sur un serveur accessible de partout et l'exécute après la connexion à chaque serveur.

laurent
la source
0

Une solution possible serait de mettre votre script qui configure tout sur un serveur Web auquel tous les autres serveurs peuvent accéder.

Ensuite, chaque serveur devrait simplement avoir besoin d'un petit script pour faire quelque chose comme:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

De cette façon, vous n'avez qu'à le mettre à jour en un seul endroit.

Subvention
la source