Script Befehle nutzen wie Eingaben

Status
Für weitere Antworten geschlossen.

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Hallo,

ich probiere jetzt schon eine Weile folgendes aus:


Gerne möchte ich eine Variable die ich nutze als Eingabe in Shell Script nutzen.
Allerdings wird diese dann nicht direkt genutzt.

#!/bin/sh
PW="GeheimBla"

ssh admin@IPNAS
$PW
sudo -i
$PW


Direkt nach dem ssh .. wird ja eine Eingabe erwartet, ist es denn gar nicht ohne expect möglich diese in einem Shell Script zu nutzen?
Echo usw, klappen ja leider auch nicht.

Klar könnte ich dafür auch einen sshkey nutzen, aber für meinen Zweck müsste es schon so gehen :(

Ich dachte auch immer Befehle im Script werden so genutzt, als wenn man sie im Terminal eingibt, dies ist ja hier dann aber nicht der Fall.

Falls einer eine Lösung kennt wäre ich über eine Antwort sehr froh. Danke!
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Moin,

das nützt leider nichts, da es unter DSM 5/6 jedenfalls kein expect gibt.
Auch sshpass gibt es auf der DS nicht, sodass ich dies auch nicht nutzen kann.


Leider fällt mir auch kein Shell Befehl ein mit dem ich eine "Eingabe" simulieren kann, sodass ich den Wert aus der Variable verwenden kann.
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Wenn es sudo gibt, kann man es doch auch so konfigurieren, dass bestimmte Aktionen oder Scripts mit root-Rechten durchgeführt werden. Standardmäßig würde man dazu /etc/sudoers mit visudo bearbeiten. (Unter DSM 5.2 finde ich keins der drei.)

EDIT: Sorry, das geht ja an der Fragestellung vorbei. Es ist nicht besonders sicher, aber du kannst stdin/stdout über den Umweg einer Datei benutzen.

echo 'geheim' | ssh root@diskstation 'cat > /tmp/zwischenlager'
ssh root@diskstation 'cat /tmp/zwischenlager'
 
Zuletzt bearbeitet:

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ja das kann man ist richtig, hilft bei diesem Problem aber leider nicht :(


Ich wollte ein Script schreiben, welches automatisch zwischen zwei DS/Server einen SSH-Key erstellen kann.
Dafür muss dann aber per SSH eine Verbindung hergestellt werden.

Und das PW sollte man einfach in ein Formular eintragen, damit es über eine Variable verwendet werden kann.
Das Problem ist ja aber, dass dieses dann in der Shell nicht genutzt werden kann.

Ohne expect gibt es ja keinen "send" Befehl, sodass ich die Variable verwenden kann.

Auch sshpass geht auf der DS nicht, da dies nicht vorhanden ist.

Wie gesagt es soll auch auf frischen System laufen ohne ipkg usw.

Was fehlt ist eine -pass Option bei ssh, sodass man diesen angeben könnte ohne einen "input" Befehl in der Shell.

Eventuell gibt es ja aber einen, nur leider habe ich bislang keine Möglichkeit gefunden.
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Ich verstehe es irgendwie immer noch nicht. Aber schau dir mal den Parameter -f an.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ja -f hilft mir hier aber auch nicht weiter, das PW kann nicht verwendet werden.

Das Script kann

PW="GeheimBla"
IP="192.168.1.10"
SSH="ssh -f admin@$IP"


HOST=$($SSH "echo \`hostname\`")
sleep 2
$PW


if [ -z "$HOST" ]; then
STOP="Es konnte keine SSH-Verbindung zu aaa aufgebaut werden."
else
STOP="SSH-Verbindung zu $HOST aufgebaut."
fi


Die Shell wartet immer auf eine manuelle Eingabe des PW, das kann doch nicht sein.
Wieso kann dafür nicht eine Variable nutzen. Das kapier ich einfach nicht.
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.165
Punkte für Reaktionen
63
Punkte
68
Das ist ein Sicherheitsfeature. SSH (und einige andere Programme wie passwd) nehmen keine Eingaben über stdin an, wie Du den Threads über Lösungen mit Expect und sshpass schon entnehmen konntest. Wenn es so einfach wäre wie Du es möchtest würde es diese Threads nicht geben.

Aber was hintert Dich, die authorized_keys schon vorher zu verteilen, damit Du beim ersten connect schon nicht mehr nach dem Password gefragt wirst. Das sudo kann man mit einem NOPASSWD Eintrag in /etc/sudouers auch passwordfrei erlauben.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ach so alles klar, das wusste ich halt nicht.

Das ganze sollte als automatischer SSH Key Erstellung dienen und in Ultimate Backup einfließen.
So wird das dann wohl aber nichts.


Hab die ganze manpage von ssh heute schon durchgelesen und dachte es geht evtl. mit ssh_askpass, aber da es bei mir nicht ging habe ich diesen Thread eröffnet.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat