trobonarf
Goto Top

Parameter für plink-Aufruf

Hallo,

ich führe via plink ein lokales Skript auf dem Server aus - das klappt soweit.
Beispiel:
.\plink.exe -ssh -t user@server -pw <passwort> -m Test.sh > Error.log 2>&1

Das ganze ist in ein (Windows) Cmd-Skript eingebettet; der Inhalt entspricht dem obigen Text. Test.sh ist hier exemplarisch genannt und seht für ein ganzes set an unterschiedlichen skripten.

Nun möchte ich diesem Skrip (Test.sh) Parameter mitgeben.

folgender Aufruf funktioniert nicht
.\plink.exe -ssh -t user@server -pw <passwort> -m Test.sh parameter1 Parameter2 > Error.log 2>&1
In der Doku und in anderen Einträgen habe ich nicht wirklich etwas zu dem Thema gefunden.

Ich hatte schon daran gedacht, die jeweilige Datei vorher zu ändern und (im aufrufenden cmd) aus zwei Dateien zusammenzusetzen: der originaldatei und davor einem Teil in dem entsprechende Parameter gesetzt werden. Dies geht aber nicht, da den Parametervariablen $1,$2,$3 usw. nichts zugeweisen werden kann.

Kennt jemand einen Trick, wie man die Parameter übergeben kann?

Content-ID: 343057

Url: https://administrator.de/contentid/343057

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

SaschaRD
SaschaRD 11.07.2017 aktualisiert um 16:24:16 Uhr
Goto Top
Hallo @trobonarf,

hier ein Beispiel mit Powershell:
$prog = "C:\Program Files (x86)\PuTTY\plink.exe"  
$command = "-ssh root@maschine -pw passwort sh /root/test.sh $1 hund"  

saps $prog -Argumentlist $command -Wait -NoNewWindow -EA Stop

Auf dem Linux Maschine wird dann das Skript test.sh ausgeführt und übergebt das Wort hund:
echo -e ich bin ein $*

Ergebnis:
ergebnis_plink


Gruß, Sascha
trobonarf
trobonarf 12.07.2017 um 12:20:47 Uhr
Goto Top
Hallo Sascha,

vielen Dank für Deine Antwort.
Der Aufruf über saps (btw:was ist das?) ist mir nicht bekannt. Wenn ich es aber richtig verstehen, dann führst Du ein Skript aus, dass schon auf dem Server liegt - das ist mir zwar auch schon auf ähnlichem Weg gelungen ein solches (auf dem Server liegendes Skript) mit Parametern aufzurufen aber im vorliegenden Fall soll gerade ein Script aufgerufen werden das lokal vorliegt (Option -m) und bekomme ich einfach keine PArameter übergeben.
Hast Du vieleicht eine Idee, wie es in dieser Konstellation funktionieren könnte?
SaschaRD
Lösung SaschaRD 12.07.2017 aktualisiert um 13:53:36 Uhr
Goto Top
Hallo @trobonarf,

saps ist das Kürzel für Start-Process.

Der Parameter -m ist nicht für die Ausführung von lokalen Skripten gedacht (sondern zum Einlesen von Befehlen), da verstehst du wohl etwas falsch.
Hier nochmal die Syntax:
Usage: plink [options] [user@]host [command]
("host" can also be a PuTTY saved session name)
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-v show verbose messages
-load sessname Load settings from saved session
-ssh -telnet -rlogin -raw
force use of a particular protocol
-P port connect to specified port
-l user connect with specified username
-batch disable all interactive prompts
The following options only apply to SSH connections:
-pw passw login with specified password
-D [listen-IP:]listen-port
Dynamic SOCKS-based port forwarding
-L [listen-IP:]listen-port:host:port
Forward local port to remote address
-R [listen-IP:]listen-port:host:port
Forward remote port to local address
-X -x enable / disable X11 forwarding
-A -a enable / disable agent forwarding
-t -T enable / disable pty allocation
-1 -2 force use of particular protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-m file read remote command(s) from file
-s remote command is an SSH subsystem (SSH-2 only)
-N don't start a shell/command (SSH-2 only)
Als workaround könntest du das lokal liegende Skript vor dem Ausführen anpassen.

Oder z.B. auf Powershell umsteigen und darüber die SSH Verbindung aufbauen und die Befehle ausführen. Somit besteht die Möglichkeit der Parameterübergabe. Hier ein schnell zusammen gefrimmeltes Beispiel:
$hostname = "maschine"  

function openSSH($command){
  try {
    Invoke-SshCommand -Computername $hostname -Command $command
  } catch [Exception]{
    Write-Host $('Exception Message: ' + $_.Exception.Message)  
  }
}

$tier = "hund"  
New-SshSession -Computername $hostname -Username "user" -Password "passwort"  
openSSH -command "ls -l /opt/test/ && touch /opt/test/$tier.log && ls -l /opt/test/"  
Remove-SshSession -Computername $hostname
Ergebnis:
ps_beispiel

Gruß, Sascha
trobonarf
trobonarf 13.07.2017 um 08:21:46 Uhr
Goto Top
Hallo Sascha,

da war mein wording wohl etwas unscharf - mir ist schon klar, dass die -t option eine lokale Datei liest und die darin enthaltenen Befehle auf dem Server ausführt.
Dein Beispiel mit Powershell sieht vielversprechend aus, leider kann ich Powershell auf dem Client den ich verwende nicht nutzen.
Dein Hinweis mit dem Ersetzen der Parameter im Skript scheint mir die einzige Möglichkeit zu sein: Ich erzeuge nunmehr eine temporäre Datei die eine Kopie des Oroginals ist und ersetze darin die Parameter ($1,$2,$3 usw.) durch die richtigen Werte und da klappt.

Vielen Dank für Deine Hilfe, Gruß,
trobonarf