Linux: Der ssh-Befehl funktioniert außerhalb des bash-Skripts, aber nicht innerhalb des Skripts.

3190
FernandoSBS

Ich habe ein Problem mit dem folgenden Befehl:

echo "Pass for router:" read -s pass  /usr/bin/expect - << EXPCT spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt #echo @pass expect -timeout 10000 "password: " send -- "$pass\n"; expect "#" interact EXPCT 

das gibt zurück:

Pass for router: spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt root@192.168.10.1's password:  ash: opkg list-installed: not found spawn_id: spawn id exp6 not open while executing "interact" 

Problem ist, dass, wenn ich ein Handbuch benutze:

ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt 

es funktioniert einwandfrei. Einige andere Punkte:

'opkg list-installed' > list-installed.txt 

Auf diese Weise wird der Befehl opkg list- install in der REMOTE-Maschine erfolgreich ausgeführt und das Ergebnis in der LOCAL-Maschine gespeichert. Nur so funktioniert es. Wenn ich mich mit SSH anmelde und versuche, diesen Befehl auszuführen, funktioniert er nicht, oder wenn er funktioniert, wird er im Remote-Pfad gespeichert.

0

3 Antworten auf die Frage

0
konqui

Versuchen Sie es auf diese Weise, firdt connect und dann den Befehl auf der Fernbedienung. nicht direkt das Weiterleiten der Verbindung übergeben.

echo "Pass for router:" read -s pass  /usr/bin/expect - << EXPCT spawn ssh 192.168.10.1 -l root opkg list-installed > list-installed.txt #echo @pass expect -timeout 10000 "password: " send -- "$pass\n"; expect "#" interact EXPCT 
funktioniert nicht Wahrscheinlich weil: `Wenn ich mich mit SSH anmelde und dann versuche, diesen Befehl auszuführen, funktioniert er nicht, oder wenn er funktioniert, wird er im Remote-Pfad gespeichert.“ FernandoSBS vor 10 Jahren 0
0
Adrien M.

Für so etwas sollten Sie SSH Pass oder SSH-Keys ausprobieren . Dies würde Ihr Problem mit Expect lösen (was für solche Sachen ein Hammer ist).

Auf diese Weise geben Sie einfach Ihren Standardbefehl ssh aus:

sshpass -p $pass ssh root@192.168.10.1 'opkg list-installed' > list-installed.txt 
ja das funktioniert. Ich habe versucht, die Installation von sshpass zu vermeiden, aber nach langer Zeit glaube ich, dass dies der richtige Weg ist. FernandoSBS vor 10 Jahren 0
0
arp

Etwas, das mich immer wieder beißt: Lassen Sie die Option -n von ssh, während Sie eine Liste mit Hostnamen auf stdin durchlaufen

sshopts="-o StrictHostKeyChecking=no -o ConnectTimeout=5 " sshopts+=" -n" # keep it from swallowing stdin  while read remotehostname; do sshpass [...] ssh $ [...] done < $ 

[Fügen Sie eine Standardredaktion ein, warum sshpass inhärent unsicher ist, sofern Sie nicht interaktiv nach der SSHPASS-Variablen fragen und alle kompetenten Systemadministratoren einen Rauschangriff durchführen, bis ihre lokalen Sicherheitsrichtlinien den passwortlosen Zugriff über SSH-Schlüssel zulassen.]