2017-04-11 1 views
0

J'ai une machine distante Linux qui exécute un script lors de la tentative de connexion, dans laquelle elle va exécuter le script, et qui nécessite l'entrée de l'utilisateur.Prendre l'entrée de la connexion utilisateur auto-execute à l'aide de la commande ssh execute

L'intention principale est de tester l'utilisateur de connexion, le mot de passe avec la réponse des scripts automatiques à distance lors de la connexion à cet utilisateur.

Informations intérieur de la machine à distance:

$ cat /etc/passwd

remoteuser: dontcare: dontcare: dontcare: dontcare: /usr/bin/somescript.sh

Lorsque la connexion utilisateur dans remoteuser , le somescript.sh va fonctionner.

Le contenu du script qui demandant l'entrée utilisateur

$ read -p '>' tmp et je ne veux pas faire des modifications à ce script.

Exemple de connexion

login: remoteuser 

Password: remoteuserpassword 

Quit Configuration (q, quit) 

moi Est-il possible d'envoyer l'entrée d'utilisateur en utilisant la commande ssh? Actuellement, mon approche utilise ssh paramiko,

connexion

= paramiko.SSHClient() en utilisant exec_command

mais il n'a pas réussi à envoyer l'entrée en séquence droite ou pas transmis à ce script.

$ echo q au paramiko exec connection.exec_command('echo q')

Je ne pas utiliser comme connexion de la racine pour tester cet utilisateur distant car il ne demande pas de mot de passe.

echo q | su - remoteuser

Répondre

0

J'ai fini par utiliser fabric.

from fabric.tasks import execute 
from fabric.api import run, settings, env 

def remoteuser_login(self): 
    env.user = 'remoteuser' 
    env.password = 'remotepassword' 
    with settings(prompts={'>': 'q\n'}): 
     run('exit') 

et d'exécuter cette

execute(remoteuser_login, host='ipaddress') 
0

moi Est-il possible d'envoyer l'entrée d'utilisateur en utilisant la commande ssh?

Non, sauf si vous modifiez le script. gère SSH votre script en tant que utilisateurs shell (sauf si vous avez également une autre configuration dans sshd_config), ce qui signifie qu'il ne fonctionne avec les arguments suivants, si vous fournissez certains:

/usr/bin/somescript.sh -c "command" 

C'est la même manière que exécuterait toute autre commande arbitraire dans le shell des utilisateurs avec /usr/bin/bash -c "commnad". Dans votre cas, il ressemblerait

/usr/bin/somescript.sh -c "echo q" 

mais très probablement les arguments du script sont ignorés. Votre script attend les commandes sur l'entrée standard et je crois que vous pouvez également fournir cette entrée dans Paramiko.

+0

mon intention principale est de tester l'utilisateur de connexion et le mot de passe avec les scripts de réponse automatique lors de l'ouverture de session à cet utilisateur. – sangelion