web-dev-qa-db-fra.com

Chargement des alias de shell local à la session SSH de manière dynamique

Lorsque je me connecte à une machine à l'aide de la machine SSH J'aimerais que mes alias et fonctions y soit. En d'autres termes, connectez-vous à une machine que j'aimerais pouvoir utiliser mes raccourcis de commande.

J'en ai besoin que ce soit dynamique, chaque fois que je me connecte, j'aimerais avoir des alias mis à jour.

Notes: Très souvent, c'est la première fois que vous vous connectez, sans connaître la machine et les fichiers. Parfois, c'est une seule connexion. Juste une fois pour cette machine. Il doit être nettoyé après, la configuration précédente doit également être restaurée.

24
Tomek Wyderka

Vous pouvez copier temporairement votre .bashrc Sur votre machine distante avec un autre nom. Par exemple, en utilisant .bashrc_temp:

user@local$ scp .bashrc user@remote:~/.bashrc_temp

Ensuite, vous pouvez vous connecter à la machine distante:

user@local$ ssh user@remote

et source le fichier .bashrc_temp:

user@remote$ source ~/.bashrc_temp

Maintenant, vous êtes capable d'utiliser votre .bashrc Et vos fonctions. Lorsque vous avez terminé votre travail, vous pouvez supprimer le fichier ~/.bashrc_temp sur la machine distante et la déconnexion.

La copie du fichier et la connexion à la machine distante peuvent être obtenues avec une fonction bash:

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

Mise à jour :

Vous pouvez également envisager de copier le .bashrc Sur /tmp Sur votre machine distante et source /tmp/.bashrc_temp.

Mise à jour 2 :

Vous pouvez vous connecter à la machine distante à l'aide de SSH -T . Cela utilisera automatiquement votre TEMP .bashrc. Fonction mise à jour s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}
18
jens-na

Je pense que SSHRC est ce que vous recherchez: https://github.com/russell91/sshrc

le CRSH fonctionne juste comme SSH, mais aussi des sources ~/.SSHRC après l'enregistrement à distance.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Vous pouvez l'utiliser pour définir des variables d'environnement, définir des fonctions et exécuter des commandes post-connexion. C'est aussi simple, et cela n'aura pas d'impact sur les autres utilisateurs sur le serveur - même s'ils utilisent également le CRSH. Pour une configuration plus avancée, poursuivez la lecture.

9
RussellStewart

jens-NA a fourni une excellente réponse. J'ai passé un peu de temps et j'ai rééquipé cela un peu pour travailler un peu mieux. De cette façon, vous pouvez transmettre n'importe quel paramètre de SSH, tels que les numéros de port. La différence est qu'elle utilise la commande ssh pour télécharger le .bashrc Fichier, au lieu de scp, qui utilise différents noms de paramètres de commande.

Vous remarquerez également qu'il télécharge un fichier différent, .bashrc_remote, afin que vous puissiez sélectionner exactement ce que vous voulez chercher sur des serveurs distants, au lieu de tout

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Lancez-le comme suit:

sshs user@server

Le nom 'sshs' est pour "SSH Source". Utilisez ssh lorsque vous ne souhaitez pas sourire et utilisez sshs quand vous le faites.

https://gist.github.com/jonahbron/5549848

9
Jonah

Pas sûr des limitations, mais j'ai pu obtenir cela pour travailler avec quelque chose comme:

function ssh_with_rc() {
   RC_DATA=`cat ${HOME}/.bashrc | base64 -w 0`
   ssh -t $@ "echo \"${RC_DATA}\" | base64 --decode > /tmp/${USER}_bashrc; bash --rcfile /tmp/${USER}_bashrc; rm /tmp/${USER}_bashrc"
}

alias ssh="ssh_with_rc"
5
Brad

Je pense que https://github.com/fsquillace/pearl-ssh Fait ce dont vous avez besoin.

Je l'ai écrit il y a longtemps avant la naissance du CRSH et qu'il a plus d'avantages par rapport au CRSH:

  • Il ne nécessite pas de dépendances sur XXD pour les deux hôtes (qui peut être indisponible sur l'hôte distant)
  • Pearl-SSH utilise un algorithme de codage plus efficace
  • C'est juste environ 20 lignes de code (vraiment facile à comprendre!)

Par exemple:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl [email protected]
myserver.com $> q
exit
2
user967489

Une option pour le faire fonctionner avec une session SSH unique consiste à utiliser une variable pour stocker votre fichier bash dans plutôt que de la copier.

$ mybash=`cat mybash`
$ ssh -t 127.0.0.1 "echo $mybash > /tmp/mybash; bash --rcfile /tmp/mybash ; rm /tmp/mybash"

Semble travailler pour moi.

1
gibsop1