2017-07-30 23 views
-1

Ich habe ein Shell-Skript, wo ich ls Befehl von verschiedenen Hosts innerhalb es ausführen, aber ich habe Schwierigkeiten, dies zu erreichen. Hier ist meine colde unter:SSH von Shell Script

#!/bin/sh  
nodes="hostname1 hostname2" 
cmd="ls -ltrha" 
for node in ${nodes}; do 
    ssh ${node} '`$cmd`' 
done 

Das Problem mit diesem Code ist, dass es perfekt ssh hostname1 kann, aber es nicht einmal den ls Befehl ausführen oder sogar ssh hostname2.

Irgendeine Idee, was ich hier falsch mache?

**** Neu Bearbeiten **** ich auch versucht, die unter einem Liner, aber es nur ausgeführt, die ls ohne ssh

 ssh hostname1 'ls -ltrha' 
+0

Siehe: [Unterschied zwischen einfachen und doppelten Anführungszeichen in bash] (http://Stackoverflow.com/q/6697753/3776858) – Cyrus

+0

Vielen Dank für Ihren Kommentar Cyrus, aber ich glaube nicht, das Problem ist nur mit Anführungszeichen. Ich habe gerade versucht einen One Liner zu fahren und stattdessen hat er nur den $ cmd ausgeführt, ohne den SSH Commend auszuführen. Bitte sehen Sie sich meine Post an –

+0

Bitte aktualisieren Sie Ihr Q, um anzugeben, wie Sie mit der Eingabeaufforderung 'password' vom Remote-Host umgehen. Viel Glück. – shellter

Antwort

-1

Sie können es tun

#!bin/sh 
nodes="hostname1 hostname2" 
for node in ${nodes}; do 
ssh ${node} 
`ls -ltrha` 
done 
0
#!/bin/sh  
nodes="hostname1 hostname2" 
cmd="ls -ltrha" 
for node in $nodes; do 
    ssh "$node" "$cmd" 
done