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.
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"
}
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.
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.
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"
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:
Par exemple:
$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl [email protected]
myserver.com $> q
exit
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.