Problème
Lors de l'exécution apt-get install
dans une session SSH non interactive, la session ne se ferme jamais. Exemple:
ssh user@target "sudo apt-get -y install my_package"
Le my_package
ne s'installe pas correctement, mais la session SSH ne fait que s'ouvrir.
Question
Existe-t-il un drapeau pour passer SSH pour se rendre apt-get
au travail?
Information additionnelle
Le contexte
L'installation à distance est utilisée pour le déploiement automatisé d'un package sur un serveur d'intégration. Dès que nous transmettons des modifications de code à un référentiel, un travail extrait le code, crée le package et le déploie lors de l'intégration pour vérifier que tout fonctionne bien (en ce qui concerne le déploiement).
Déjà essayé et notes
- La même session SSH en cours d'exécution se
apt-get update
ferme proprement. Notez que ceapt-get update
n'est pas interactif, alors que l'apt-get install
est. Cela peut suggérer que l'interactivité est un problème. - Une commande comme
ssh user@target "sudo apt-get install my_package && echo Hello"
n'atteint jamais leecho
. debconf
se plaint qu'il ne peut pas trouver un bon frontend (Display, Readline), et il retombe sur Teletype (bien que Readline soit disponible).- En ce qui concerne le frontend de debconf, passer
-t
pour forcer TTY avec SSH n'aide pas. Ni l'un ni l'autreDEBIAN_FRONTEND=noninteractive
. - Tout a été fait sur Ubuntu 12_04 LTS.
ssh user@target
ensuite les commandes du shell) cela fonctionne-t-il correctement?Réponses:
La réponse suivante sur SF a fait l'affaire:
ssh ne parvient pas à exécuter la commande à distance lors de l'exécution à partir du script cron bash
Le
-t
drapeau force une allocation pseudo-tty, sauf peut-être lorsqu'il n'y a pas de téléscripteur localement. Mais passer le drapeau deux fois comme en-t -t
fait semblant de le faire. Et cela a résolu le problème.Voir la documentation SSH:
Maintenant, pourquoi cela a-t-il fonctionné? Il s'avère que cela
debconf
ne se plaint plus de l'interface dans les journaux. Je crois donc que les doubles-t
sets (leurres?) Audebconf
besoin, ce qui permetapt-get install
de terminer la session SSH proprement.la source
En le parcourant, cela pourrait faire l'affaire. L'appel de n'importe quelle commande doit être suivi de exit et heredoc. J'ai trouvé la solution, mais je ne l'ai pas essayée personnellement.
La réponse originale vient d'ici: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection
la source
ssh user@host free -m
dans mon environnement cible, et cela fonctionne comme un charme. Je vais essayer la recommandation ensuite.Sous debian / jessie, j'ai réussi avec cette commande:
Mais vous devriez peut-être envisager d'utiliser ansible pour cela et d'autres tâches à venir http://docs.ansible.com/ansible/apt_module.html
la source