Voici le script.
Je voulais me connecter à plusieurs serveurs et vérifier la version du noyau.
#!/bin/bash
#input server names line by line in server.txt
cat server.txt | while read line
do
sshpass -p password ssh root@$line << EOF
hostname
uname -r
EOF
done
Je m'attendrais à une sortie qui va comme ..
server1_hostname
kernel_version
server2_hostname
kernel_version
etc..
J'ai exécuté ce script avec environ 80 serveurs dans server.txt
Et la sortie que j'ai obtenue était comme .....
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
========================================================================
================================ WARNING ===============================
========================================================================
This system is solely for the use of authorized personnel. Individuals
using this system are subject to having some or all of their activities
monitored and recorded. Anyone using this system expressly consents to
such monitoring and is advised that any unauthorized or improper use of
this system may result in disciplinary action up to and including
termination of employment. Violators may also be subject to civil and/or
criminal penalties.
========================================================================
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
xxxxdev01
2.6.32-431.23.3.el6.x86_64
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Ici, j'ai obtenu la sortie pour seulement 1 hôte, ce qui est xxxxdev01
également le cas avec la bannière ssh et d'autres avertissements.
J'ai besoin de la sortie de tous les autres hôtes et sans bannière ssh .. Qu'est-ce qui ne va pas ici?
bash
shell-script
ssh
Être Gokul
la source
la source
sshpass -p password root@server histname
?ssh -t -t root@
... pour forcer un pseudo-terminal.Réponses:
Je ne peux pas vous dire pourquoi vous n'obtenez pas la sortie attendue des commandes
hostname
etuname
, mais je peux vous aider avec le texte superflu.Les lignes "Pseudo-terminal" sont imprimées par
ssh
car il essaie d'allouer un TTY par défaut lorsqu'aucune commande à exécuter n'a été fournie sur la ligne de commande. Vous pouvez éviter ce message en ajoutant "-T" à la commande ssh:La ligne "Avertissement: aucun accès à tty" provient du shell du système distant.
csh
ettcsh
imprimera ce message dans certaines circonstances. Il est possible qu'il soit déclenché par quelque chose dans le.cshrc
fichier ou similaire sur le système distant, en essayant d'accéder à une fonctionnalité qui nécessite un ATS.la source
Utilisez le code suivant,
la source
Si vos hôtes sont stockés comme suit dans
server.txt
Vous pouvez
la source
Le stdin n'est pas accessible à vos commandes à distance. Ce que vous pouvez faire est d'utiliser l'indicateur "-s" de bash pour lire les commandes depuis stdin:
Du manuel bash:
Donc, cela devrait faire ce que vous voulez:
Voir aussi: /programming/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine
la source
Cela fonctionne très bien pour moi:
notez que l'utilisation
-t -t
au lieu de-T
pour éviter l'erreurla source
Je suppose que le ssh en mange le reste pour stdin. vous pouvez consulter la FAQ 89 de Bash pour plus de détails. Avec un FileDescriptor, les codes suivants devraient fonctionner selon vos attentes.
la source