[Plink] automatisch aanvaarden ssh hostkeys en script issues

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • timberleek
  • Registratie: Juli 2009
  • Laatst online: 08-09 22:13
Hallo,

Ik wil een aantal commando's uitvoeren op een remote (embedded linux) systeem via SSH. Denk aan commando's aan iostat, uptime etc. Het resultaat hiervan moet naar een bestand geschreven worden. Tot zover niet zo spannend.

Dit wil ik echter geautomatiseerd laten doen, bij diverse apparaten in hetzelfde netwerk. Hostname lijst is aanwezig.

De eerste issue daarbij is de SSH host key die je moet opslaan bij de eerste maal verbinden. Dit staat automatiseren in de weg. Ik wou aan de slag met teraterm/putty, maar dan krijg je een dikke vette popup die je handmatig moet bedienen. Van putty weet ik dat de makers bewust geen optie hebben gemaakt voor "auto-accept" omdat het gewoon slechte policy is, maar daar heb ik niks aan O-). De apparaten zijn allemaal onbekend en mogelijk in grote aantallen.

Uiteindelijk kwam ik toch uit bij putty (Plink) en bat scripting waar (volgens het almachtige internet) dit zou moeten werken:
code:
1
2
3
echo yes | plink -agent -pw Password root@%DEVID% "exit"

--> nogmaals verbinden en dan aan de slag

Bij die eerste verbinding zou er gevraagd worden om een Yes/no, welke gepushed wordt door "echo yes".

In totaal kwam ik dan nu uit op:
[/code]
hostname wordt meegegeven
set DEVID=%1

%eerste maal verbinden voor de hostkey
echo yes | plink -agent -pw Password root@%DEVID% "exit"

%opnieuw verbinden, script kopieren
plink -ssh root@%DEVID% -pw Password < path\copyscript "cat > ~/copyscript"

%nogmaals verbinden en wat commando's laten lopen, output naar file schrijven.
plink -ssh root@%DEVID% -pw Password < path\test.txt > path\output_data\output.txt
[/code]

Dit leek in eerste instantie te werken, maar het script blijft nu meestal hangen na de laatste login. De commando's uit test.txt worden niet meer gedaan. De logfile bevat enkel:
code:
1
2
3
Last login: Fri Jan  1 03:52:22 2010 from 10.4.17.102

#


Af en toe lijkt hij wel door te lopen, maar dat is redelijk zeldzaam. En ik weet niet meer waar te zoeken.


Ligt het aan de hostkey "bodge"?
Is het een timing issue? (misschien dat hij de commando's al uitvoert terwijl de login actie nog loopt).

Ik kom er niet echt uit. Ik hoopte dat iemand hier daar een idee over had.


Een alternatieve methode kan eventueel ook.
ik wil bereiken:
code:
1
2
3
4
5
6
7
8
9
10
11
loop (hostname lijst)
{
    maak ssh verbinding
    kopieer linux script
    run commandos en log terminal output
       - run linux script
       - verwijder linux script
       - iostat
       - uptime
       - ...
}


Het gaat om devices die reeds in het veld staan. Allerlei tools meeleveren kan dus niet.
Daarnaast mogen de devices niet rebooten en spul installeren niet mogelijk (dat script kopiëren is randje).

Op de pc die de scripts moet runnen is eventueel wat te installeren, maar ik probeer het zo simpel mogelijk te houden (ik zal ze niet zelf runnen op locatie). Dus bij voorkeur batch scripts en "portable" software.


Relevante software en hardware die ik gebruik
HW: Win 10 laptop
HW (in het veld): Custom Embedded linux platform met netwerkverbinding en SSH

SW die ik nu gebruik:
- batch scripts
- putty (Plink)

Wat ik al gevonden of geprobeerd heb
Vooral dat auto-accept van hostkeys een probleem is. Niet onterecht natuurlijk, maar net als de andere speurders op internet heb ik het nu wel nodig (of er moet een optie zijn die ik nog niet heb gevonden).


Iemand ervaring met Plink, of een ander idee?

Alle reacties


Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Cygwin draaien met SSH en config / parameters:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
?

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • 0 Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 11:27

DaFeliX

Tnet Devver
Wat is de inhoud van path\test.txt? Het lijkt er nl op dat er op er op de prompt ("#") gewacht word voor een commando

Einstein: Mijn vrouw begrijpt me niet


Acties:
  • 0 Henk 'm!

  • timberleek
  • Registratie: Juli 2009
  • Laatst online: 08-09 22:13
webfreakz.nl schreef op woensdag 29 januari 2020 @ 16:09:
Cygwin draaien met SSH en config / parameters:
Ga ik ook even naar kijken. Weet van het bestaan af, maar ben er verder niet bekend mee.
DaFeliX schreef op donderdag 30 januari 2020 @ 07:47:
Wat is de inhoud van path\test.txt? Het lijkt er nl op dat er op er op de prompt ("#") gewacht word voor een commando
simpelweg een lijstje met commando's.
waaronder (mijn huidige testversie):

code:
1
2
3
iostat
uptime
exit

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 10:32

CAPSLOCK2000

zie teletekst pagina 888

Ik ben niet echt een expert, maar volgens mij zit OpenSSH gewoon in Windows 10 en heb je geen putty of cygwin meer nodig.

Internet zegt:
To install OpenSSH, start Settings then go to Apps > Apps and Features > Manage Optional Features.

At the top of the page select "Add a feature", then:

To install the OpenSSH client, locate "OpenSSH Client", then click "Install".
De sjieke oplossing is overigens om van te voren een lijst met fingerprints van je systemen te maken zodat je zeker weet dat je met het juiste systeem verbindt.
Het kan nog mooier als je SSHFP fingerprints in DNS zet. Ik weet niet of er nog andere clients zijn dan OpenSSH die dat ondersteunen, maar ik zou ook niet weten waarom je een andere client dan openssh zou willen gebruiken ;)

[ Voor 32% gewijzigd door CAPSLOCK2000 op 30-01-2020 17:09 ]

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 08:30

DataGhost

iPL dev

CAPSLOCK2000 schreef op donderdag 30 januari 2020 @ 17:07:
De sjieke oplossing is overigens om van te voren een lijst met fingerprints van je systemen te maken zodat je zeker weet dat je met het juiste systeem verbindt.
Precies dit. De lijst met geaccepteerde fingerprints wordt ergens opgeslagen op een user-writable plek, ik heb ooit in een ver verleden de hostkey mee-geïnstalleerd met PuTTY waardoor de gebruiker die prompt nooit krijgt. Zo leer je ze ook niet aan om hostkeys te negeren en krijg je wel een melding als het mis is.

Acties:
  • 0 Henk 'm!

  • timberleek
  • Registratie: Juli 2009
  • Laatst online: 08-09 22:13
CAPSLOCK2000 schreef op donderdag 30 januari 2020 @ 17:07:
Ik ben niet echt een expert, maar volgens mij zit OpenSSH gewoon in Windows 10 en heb je geen putty of cygwin meer nodig.
Minder ideaal dan een portable installatie van putty meeleveren (het probleem is dat ik het waarschijnlijk niet zelf ga uitvoeren in het beoogde netwerk, maar iemand anders moet instrueren. Hoe meer "point&click" hoe beter), maar ga er wel eens naar kijken (desnoods voor andere projecten voor mezelf).
De sjieke oplossing is overigens om van te voren een lijst met fingerprints van je systemen te maken zodat je zeker weet dat je met het juiste systeem verbindt.
Het kan nog mooier als je SSHFP fingerprints in DNS zet. Ik weet niet of er nog andere clients zijn dan OpenSSH die dat ondersteunen, maar ik zou ook niet weten waarom je een andere client dan openssh zou willen gebruiken ;)
Het gaat echter om apparaten die al in het veld staan. Dan zal ik zeker eerst moeten verbinden met allemaal, een register opzetten van fingerprints en dan aan het script toevoegen. Dan schiet ik er weinig mee op O-)


Het is inmiddels wel gelukt met plink overigens.
De scipt issue lag niet aan de hostkey acceptatie, dat stuk bleek wel te werken. Het was een timing issue in de laatste plink aanroep.
Vermoedelijk smijt hij alle commando's al naar het apparaat voor de ssh inlog afgerond is. Toen ik schakelde naar de (Tragere) verbose mode werkte alles ineens.
Uiteindelijk het script omgebouwd naar een andere aanroep methode die netjes wacht op het afronden van de inlog

code:
1
2
3
4
5
van:
plink -ssh root@%DEVID% -pw Password < path\test.txt > path\output_data\output.txt

Naar:
putty\PLINK.EXE -batch -ssh root@%DEVID% -pw %PASSW% -m script.txt > output_data\output_%DEVID%.txt 2>&1
Pagina: 1