1 votes

Connectez-vous et exécutez des commandes via SSH en utilisant un script

Je suis en train d'utiliser une série de commandes pour déployer mes fichiers en production. Cela se fait actuellement manuellement.

Est-il possible de transformer ces commandes en un fichier exécutable ? Ainsi, je n'aurais pas à copier-coller ces commandes à chaque fois.

Lorsque la première ligne est exécutée, c'est-à-dire la connexion au serveur root, il demandera le mot de passe et je devrai coller le mot de passe : xxxxxxxxxxxxxx

ssh root@serveur
pwd: xxxxxxxxxxxxxx
ssh-agent bash
ssh-add bi-master
cd /home/trans/bimaster
git status
git pull git@bitbucket.org:xxxxxxxxx/bimaster.git master

Note : Je suis l'administrateur du serveur, Comme le projet est réalisé par différentes équipes jusqu'à présent, nous avons décidé de faire un déploiement manuel (nous ne pouvons pas utiliser Jenkins ou tout autre outil pour automatiser le déploiement), car nous devons vérifier l'état de certains fichiers.

2voto

grg Points 181593

Vous pouvez utiliser ‘expect’ pour entrer le mot de passe SSH lorsque cela est demandé. Les changements apportés à votre script sont en gras.

#!/usr/bin/expect -f spawn ssh root@serveur expect "*: " send "xxxxxxxxxxxxxx expect "$ " send "… commandes

spawn démarre la commande normalement, qui dans ce cas est SSH
expect attend jusqu'à ce que le texte correspondant s'affiche à l'écran
send entre le texte donné, qui peut être un mot de passe ou une commande à exécuter
expect attend que l'invite du shell s'affiche (cela devrait être modifié pour correspondre à votre shell $PS1)

Enregistrez ce fichier, ajoutez le bit exécutable (chmod +x /chemin/vers/fichier) et ouvrez-le pour exécuter les commandes.


Cependant, au lieu de cela, vous devriez utiliser des clés SSH pour vous connecter au serveur sans avoir à entrer de mot de passe, et les commandes que vous souhaitez exécuter via SSH devraient être dans un script sur le serveur qui peut être exécuté. Configurez des clés SSH, puis vous pouvez exécuter un script distant avec ssh -t root@serveur "/chemin/vers/script".

2voto

docgyneco69 Points 41

Je vous suggère d'utiliser ssh-copy-id pour accorder à votre ordinateur un accès ssh automatisé au serveur distant de votre choix. L'utilitaire se trouve sous /usr/bin/ sur la plupart des systèmes (y compris les versions récentes de macOS). Sur les anciennes versions de macOS, vous pouvez exécuter

cat ~/.ssh/id_rsa.pub |
    ssh johnfoo@0.0.0.0 "[ -d ~/.ssh ] || mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

Ensuite, il est trivial d'exécuter un script déjà sur le serveur distant:

ssh -t johnfoo@0.0.0.0 /Users/johnfoo/myscript.sh

Si nécessaire, vous pouvez créer un tel script localement et utiliser scp pour le transférer vers le serveur distant à l'emplacement de votre choix:

scp myscriptscript.sh johnfoo@0.0.0.0:/Users/johnfoo/myscript.sh 

Mais si votre script est relativement court - je le lancerais simplement à partir de la session de terminal en invoquant un document ici après votre commande ssh:

ssh -t johnfoo@0.0.0.0 <<< END_OF_COMMAND
ssh-agent bash
ssh-add bi-master
cd /home/trans/bimaster
git status
git pull git@bitbucket.org:xxxxxxxxx/bimaster.git master
END_OF_COMMAND

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X