Voer geautomatiseerde scripts uit via SSH
We hebben u laten zien hoe u SSH gebruikt om veilig bestanden over te brengen. Maar er is een groot probleem met het standaardgedrag van SSH. U bent alleen verbonden met de externe machine nadat u het wachtwoord handmatig hebt ingevoerd, waardoor u geen taken hebt die u onbeheerd wilt uitvoeren. Of toch?
Hier is een kort overzicht van hoe de OpenSSH CLI-hulpmiddelen (scp en sftp) werken, zodat u het probleem beter kunt beoordelen. Als u bestanden naar of van de externe host wilt kopiëren, kunt u scp gebruiken dat automatisch een SSH-verbinding met de externe host initieert. Telkens wanneer u een scp-opdracht uitvoert, wordt een nieuwe verbinding met de afstandsbediening tot stand gebracht. Dus als je meerdere scp-opdrachten hebt, zou je verschillende keren hetzelfde wachtwoord moeten invoeren.
Dit is waarom je scp niet wilt gebruiken in scripts die je onbeheerd wilt uitvoeren. Het is ook zo dat als u meerdere accounts op verschillende computers in het netwerk hebt, u problemen zou hebben om unieke, sterke wachtwoorden te onthouden.
Om dit probleem op te lossen, moet u het standaardverificatiemechanisme van OpenSSH wijzigen naar een sleutelgebaseerd systeem.
Sleutel tot succes
Standaard gebruikt OpenSSH alleen sleutels om de identiteit van een server te verifiëren wanneer een client voor de eerste keer een nieuwe externe machine ontmoet:
$ ssh [email protected] De authenticiteit van host 'atlantis.remote.com (atlantis.remote.com)' kan niet worden vastgesteld. ECDSA-sleutelvingerafdruk is da: e8: a2: 77: f4: e5: 10: 56: 6d: d4: d2: dc: 15: 8e: 91: 22. Weet u zeker dat u wilt doorgaan met verbinden (ja / nee)?
Wanneer u reageert door "ja" te typen, wordt de externe host toegevoegd aan de lijst met bekende hosts. Dus in aanvulling op de server die de client verifieert door om een wachtwoord te vragen, authenticeert de client ook de server met behulp van een sleutel.
Op dezelfde manier kun jij ook een set sleutels krijgen om je identiteit te bewijzen. OpenSSH gebruikt een paar sleutels om uw identiteit te bewijzen en een veilige verbinding met een externe server tot stand te brengen. De privésleutel is alleen voor uw ogen en wordt door uw OpenSSH-client gebruikt om uw identiteit aan servers te bewijzen. Dan is er de openbare sleutel die je geacht wordt te houden onder al je accounts op alle remote machines waar je SSH in wilt.
Als u een sleutel wilt maken, voert u op uw client het volgende in:
$ ssh-keygen Genereren van openbaar / privé rsa-sleutelpaar. Voer een bestand in om de sleutel op te slaan (/home/bodhi/.ssh/id_rsa): voer wachtwoordzin in (leeg voor geen wachtzin): voer dezelfde wachtwoordzin opnieuw in: uw identificatie is opgeslagen in /home/bodhi/.ssh/id_rsa. Uw publieke sleutel is opgeslagen in /home/bodhi/.ssh/id_rsa.pub.
Vergeet niet om de wachtwoordzin leeg te laten en noteer de locatie waar de sleutels zijn opgeslagen. Het "id_rsa" -bestand kan alleen door uw account worden gelezen en de inhoud ervan wordt versleuteld met de wachtwoordzin die u tijdens de generatie hebt opgegeven.
De volgende stap is het kopiëren van de openbare sleutel naar de externe server. Ervan uitgaande dat u wilt inloggen op gebruiker "admin" op de externe machine genaamd "atlantis.remote.com", kunt u de toetsen verplaatsen met een enkele opdracht:
$ ssh-copy-id -i ~ / .ssh / id_rsa.pub [email protected] [email protected]'s wachtwoord:
Nadat u de wachtwoordzin voor uw privésleutel hebt opgegeven, wordt de openbare sleutel automatisch op de juiste locatie op de externe server geplaatst, standaard het bestand "~ / .ssh / authorized_keys".
Wanneer u nu op de externe machine ssht, wordt u om uw wachtwoordzin gevraagd. Het enige voordeel van het gebruik van sleutels is dat in plaats van u te authenticeren met een wachtwoord dat ongecodeerd is verzonden, de externe server en uw klant uw identiteit bepalen op basis van de sleutels.
U kunt nu ook in verschillende externe vakken schakelen met dezelfde wachtwoordzin, zolang deze externe machines uw openbare sleutel bevatten. U hoeft dus niet meerdere wachtwoorden te onthouden.
Maar je kunt nog steeds geen scripts uitvoeren zonder gestoord te worden voor wachtzinnen.
Gerelateerd : Twee verificatieverificatie inschakelen voor SSH-verbinding
SSH-agent om te redden
OpenSSH bundelt een tool genaamd ssh-agent, die je privé-sleutels in het geheugen houdt. Zodra een agent actief is, zullen de SSH-clients in plaats van u om wachtzinnen te vragen, communiceren met de agent.
U kunt de agent starten met " ssh-agent /bin/bash
", ervan uitgaande dat u de bash-shell gebruikt.
Alle commando's die toegang vereisen tot uw OpenSSH privé-sleutels worden onderschept en beantwoord door de agent.
Wanneer de agent wordt uitgevoerd, moet u deze uitrusten met uw sleutels. Dit wordt gedaan door een beroep te doen op het "ssh-add" programma dat standaard de sleutels laadt van het standaard identiteitsbestand (~ / .ssh / id_rsa).
$ ssh-add Voer wachtwoordzin in voor /home/bodhi/.ssh/id_rsa: Identiteit toegevoegd: /home/bodhi/.ssh/id_rsa (/home/bodhi/.ssh/id_rsa)
Wanneer u nu inlogt op de externe computer met " ssh [email protected]
", wordt u toegestaan zonder de wachtwoordzin in te voeren!
Op dezelfde manier kunnen scp en sftp ook verbinding maken met de externe hosts zonder u ooit om een wachtwoordzin te vragen. U kunt nu dus scripts plannen en uitvoeren die automatisch bestanden op een extern apparaat manipuleren.
Ook nu u sleutels gebruikt, is het een goed idee om authenticatie via wachtwoorden uit te schakelen. Hiertoe bewerkt u het configuratiebestand van de externe server (/etc/ssh/.sshd_config) en wijzigt u de parameter " PasswordAuthentication
" van "yes" in "no". Als iemand vanaf nu verbinding probeert te maken met je SSH-service die geen openbare sleutel op de server heeft, wordt hem de toegang geweigerd zonder de aanmeldingsprompt te zien.
Afbeelding tegoed: Karunakar Rayker