Tijdens het bestellen van een VPS, krijg je de keuze uit een van vier verschillende installatiemogelijkheden. Een van de beschikbare opties is om een cloud-config-bestand te gebruiken.
Met een cloud-config-bestand kun je de configuratie van een Linux-server na het installatieproces automatisch aanpassen: Tijdens de eerste boot van je server leest een programma genaamd cloud-init de data in het cloud-config-bestand uit en past de configuratie aan de hand van dit bestand naar jouw wensen aan. Zo kun je bijvoorbeeld gebruikers aanmaken, wachtwoorden instellen, SSH-keys toevoegen, repositories toevoegen, packages installeren en nog veel meer.
In deze handleiding laten we zien hoe je een cloud-config-bestand aanmaakt en gebruikt bij het bestellen van een VPS. Meer algemene informatie over cloud-init en cloud-config vind je in dit artikel.
Een cloud-config-bestand maken
De inrichting van een cloud-config-bestand spreekt redelijk voor zich als je een voorbeeld hebt. In de onderstaande stappen leggen we daarom de nadruk op voorbeelden van verschillende use cases. Cloud-init ondersteunt meerdere formaten, maar voor deze handleiding maken wij gebruik van het YAML-formaat.
- We raden aan minimaal één gebruiker en een SSH-key te configureren in je cloud-config-bestand en geen gevoelige informatie in je cloud-config-bestand te plaatsen.
- Alle opties in dit onderdeel zijn optioneel en het is niet noodzakelijk ze allemaal te gebruiken. Stel je bijvoorbeeld geen groepen in in je cloud-config-bestand? Dan worden alleen de standaard systeemgroepen en usergroepen aangemaakt.
Stap 1
Start een teksteditor, zoals Notepad, Notepad ++, Texteditor, of Gedit.
Stap 2
De eerste regel van een cloud-config-bestand moet altijd als dusdanig aangekondigd worden, zodat cloud-init het kan herkennen als een cloud-config-bestand. Dit doe je door het bestand te openen met de regel:
#cloud-config
Vervolgens voeg je aan het bestand de opties toe die je tijdens de installatie van je VPS wil aanpassen. In deze stap laten we dit in de volgende onderdelen zien:
- Groepen aanmaken
- Gebruikers aanmaken: namen, groepen, wachtwoorden, ssh-keys
- (Root-)wachtwoord aanpassen
- Bestanden aanpassen
- First boot commando's uitvoeren
- Packages installeren
- Automatisch verwijderen na installatie
Aan het eind van dit onderdeel laten we zien hoe deze opties samengevoegd er uit zien in je cloud-config-bestand.
#cloud-config
groups:
- Ubuntu: [root, sys]
- cloud-users
In het voorbeeld hieronder laten we enkele opties zien die je kunt gebruiken bij het aanmaken van een user. In de toelichting laten we alle beschikbare opties. Je bent vrij om te kiezen welke van de beschikbare opties je gebruikt.
#cloud-config users: - name: transip groups: transip
ssh_authorized_keys:-
ssh-rsa AAAAB3NzaC1yc2EAn64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs9NDitR5V17cDZtqN+W3+8w== transip@voorbeeld.nl - ssh-rsa AAAAB3NzaC1ycMNtK2IXs9NDi64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs17cDZtIXs17+8w== transip@voorbeeld.nl sudo: ['ALL=(ALL) NOPASSWD:ALL'] shell: /bin/bash
Het root-wachtwoord kun je aanpassen met de volgende syntax:
#cloud-config
chpasswd:
list: |
root:jewachtwoord
Het is eveneens mogelijk om zo wachtwoorden van andere gebruikers, bijvoorbeeld:
#cloud-config
chpasswd:
list: |
root:
jewachtwoord
user1:nogeenwachtwoord
Cloud-init raad om veiligheidsredenen af om wachtwoorden aan te passen via cloud-config-bestanden.
Het kan afhankelijk van je use case wel handig zijn om met chgpasswd een initieel root-wachtwoord te configureren tijdens je installatie. We raden aan het root-wachtwoord dan na de installatie van je server wel weer aan te passen.
Er zijn twee manieren om bestanden aan te passen met behulp van een cloud-config-bestand:
- Je kunt een bestand geheel overschrijven via write_files en daarmee ook de eigenaar of rechten aanpassen.
- Met runcmd voer je een of meerdere commando's uit, bijvoorbeeld 'sed'-commando's om specifieke regels aan te passen.
Dit eerste is handig als je een niet al te groot bestand aanpast, en het tweede voor specifieke wijzigingen. Om je cloud-config-bestand overzichtelijk te houden is het doorgaans niet wenselijk om grote bestanden aan te passen met write_files.
Hieronder volgt een voorbeeld hoe je de configuratie van /etc/ssh/sshd_config aan kunt passen. Voor de leesbaarheid van dit artikel zijn de comments weggelaten uit het bestand.
#cloud-config
write_files:
- path: /etc/ssh/sshd_config
permissions: 0600
owner: root:root
content: |
Port 12345
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin No
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
First boot commando's uitvoeren met runcmd
Runcmd is een krachtige tool om first boot commando's uit te uit te voeren (i.e. deze worden enkel de eerste keer ooit dat je VPS start uitgevoerd). In het voorbeeld hieronder laten we zien hoe je met een sed-commando de inhoud van een bestand aanpast (hier de SSH-poort in de ssh-configuratie), maar je kunt runcmd gebruiken voor ieder commando.
#cloud-config
runcmd:
- sed -i "s/#Port 22/Port 12345/" /etc/ssh/sshd_config
Met een cloud-config-bestand kun je zeer eenvoudig specifieke packages mee-installeren tijdens je installatie. Hiervoor gebruik je de syntax:
#cloud-config
packages:
- packagenaam1
- packagenaam2
- etc
Automatisch verwijderen na installatie
We raden aan om geen gevoelige informatie in de config te zetten. Je cloud-config-data is namelijk altijd bereikbaar vanaf je VPS via http://pxe.frontend.transip.nl/cloudinit/user-data. Dit los je op door onderstaande code toe te voegen; hiermee wordt je cloud-config-data na de installatie verwijdert van het bovenstaande adres.
phone_home:
url: http://pxe.frontend.transip.nl/cloudinit/post-install
post: []
tries: 5
Alternatief kun je het IP-adres 37.97.254.100 blokkeren in je firewall.
Hierboven heb je een hoop opties gezien die je in een cloud-config-bestand kunt gebruiken. Als je ze allemaal samenvoegd, ziet je bestand er als volgt uit:
#cloud-config groups: - Ubuntu: [root, sys] - cloud-users users: - name: transip groups: transip ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAn64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs9NDitR5V17cDZtqN+W3+8w== transip@voorbeeld.nl - ssh-rsa AAAAB3NzaC1ycMNtK2IXs9NDi64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs17cDZtIXs17+8w== transip@voorbeeld.nl sudo: ['ALL=(ALL) NOPASSWD:ALL'] shell: /bin/bash chpasswd: list: | root:jewachtwoord write_files: - path: /etc/ssh/sshd_config permissions: 0600 owner: root:root content: | Port 12345 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV PermitRootLogin No AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server runcmd: - sed -i "s/#Port 22/Port 12345/" /etc/ssh/sshd_config packages: - packagenaam1 - packagenaam2
phone_home: url: http://pxe.frontend.transip.nl/cloudinit/post-install post: [] tries: 5
Stap 3
Sla tot slot je cloud-config-bestand op, bijvoorbeeld met de naam cloud-config.yaml. Je kunt er nu gebruik van maken, bijvoorbeeld via onze API.
Debian IPv6-resolvers
Debian stelt in tegenstelling tot bijvoorbeeld Ubuntu geen IPv6-resolvers in. Onze SandboxVPS'en maken exclusief gebruik van IPv6 en het is dan ook belangrijk om in ieder geval daarbij de IPv6-resolvers toe te voegen aan je cloud-config bestand. Dit kun je als volgt doen:
/bin/sh -c 'echo "bmV0d29yazoge2NvbmZpZzogZGlzYWJsZWR9Cg==" | base64 -d > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg'
/bin/sh -c 'sed -i "s/inet/inet6/g" /etc/network/interfaces.d/50-cloud-init'
/bin/sh -c 'sed -i "s/dhcp/auto/g" /etc/network/interfaces.d/50-cloud-init'
/bin/sh -c 'echo " dns-nameserver 2a01:7c8:7000:195::8:195:8" >> /etc/network/interfaces.d/50-cloud-init'
/bin/sh -c 'echo " dns-nameserver 2a01:7c8:7000:195::135:195:135" >> /etc/network/interfaces.d/50-cloud-init'
/bin/sh -c 'ifdown ens3; ifup ens3'
Je cloud-config-bestand gebruiken bij het bestellen van een VPS
Stap 1
Tijdens de bestelling van een VPS krijg je na het kiezen van de specificaties en besturingssysteem als je in je TransIP-account bent ingelogd een van de volgende twee opties voor installatie via SSH-keys:
- Je hebt nog niet eerder een SSH-key toegevoegd aan je account.
- Je hebt al eerder een SSH-key toegevoegd aan je account.
Ben je niet ingelogd, dan krijg je de optie voor een eenmalig wachtwoord te zien:
Klik in alle gevallen op 'Kies een andere installatiemethode'.
Stap 2
Je krijgt nu de keuze om een installatiemethode te kiezen, zoals in het screenshot hieronder. Kies hier voor 'Installeren via cloud-config user data'.
Stap 3
Je krijgt nu het scherm 'Installeren via cloud-config user data' te zien. Kopieer en plak de inhoud van je cloud-config-bestand, zoals in het screenshot hieronder.
Je cloud-config-data wordt nu toegepast. Je krijgt een bevestiging van je bestelling per e-mail en in de uiteindelijke levermail zie je, indien je voor SSH of een tijdelijk wachtwoord koos, respectivelijk je gebruikersnaam en een tijdelijk wachtwoord terug.
Daarmee zijn we aan het eind van dit artikel gekomen. Ben je op zoek naar nog meer opties zoals het toevoegen van repositories? Neem dan een kijkje in de documentatie van cloud-init.
Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.