Archiv pro měsíc: Březen 2017

Jak přesunout SmartOS image z jednoho serveru na druhý

Nedávno se mi stalo, že jsem potřeboval přesouvat SmartOS zónu z jednoho serveru na druhý. Zóna ale byla vyrobená z obrazu base-64-lts ve verzi 16.4.0. Tuhle verzi kvůli fatální chybě při upgradu stáhli z veřejného repozitáře.

Řešením by bylo dataset zóny povýšit pomocí zfs promote. Co když ale raději chceme origin zóny zachovat a přenést jej na nový server? Nástroj imgadm bohužel nic jako export neposkytuje. Naštěstí si ale můžeme poradit ručně.

Nejprve přeneseme dataset:

$ zfs send -Rep zones/08589eda-d64e-11e6-89a3-0b55371be927@final | ssh cilovy.server.tld zfs recv zones/08589eda-d64e-11e6-89a3-0b55371be927

Poté přesuneme konfiguraci pro imgadm:

$ scp /var/imgadm/images/zones-08589eda-d64e-11e6-89a3-0b55371be927.json cilovy.server.tld:/var/imgadm/images/

Nesmíme zapomenout na lock soubor, který imgadm používá, aby určil, zda je již daný image naimportovaný:

$ scp /var/run/img.08589eda-d64e-11e6-89a3-0b55371be927.import.lock cilovy.server.tld:/var/run/

A to je vše 🙂

Vlastní certifikační autorita pro přihlašování k SSH

Při přihlašování k SSH jste jistě již mockrát viděli hlášku, jako je tato:

The authenticity of host 'example.com (1.2.3.4)' can't be established.
RSA key fingerprint is 1b:9b:b8:5e:74:b1:31:19:35:48:48:ba:7d:d0:01:f5.
Are you sure you want to continue connecting (yes/no)?

Většinou ji napoprvé bezmyšlenkovitě potvrdíme a všímáme si jí pouze v případě, že se objeví znovu. Značí to, že je něco špatně. Jak se ale této hlášce vyhnout úplně? Ověřování fingerprintu jistě nechceme vypnout, to by nebylo moc bezpečné 🙂 Jak tedy na to jinak? Založíme si pro SSH vlastní CA!

Nejprve si musíme vygenerovat podepisovací klíč.

$ mkdir .ssh/ca
$ cd .ssh/ca
$ ssh-keygen -t ed25519 -C ca@example.com -f ca.ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ca.ed25519.
Your public key has been saved in ca.ed25519.pub.
The key fingerprint is:
SHA256:J3nD9rV49uE57+2w79GeMKw1+jfZeEcc6crNjFdfXeg ca@exmaple.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|               ..|
|         o    .o.|
|        S *  .o.+|
|         = o.oEoB|
|            +*@=B|
|            +**#@|
|           o..+X#|
+----[SHA256]-----+

Příkaz nám vygeneroval dva soubory ca.ed25519 a ca.ed25519.pub. Ukážu zde pouze generování pro algoritmus ED25519, pro jiné algoritmy je postup obdobný.

Nyní potřebujeme veřejný klíč serveru, ke kterému se budeme přihlašovat. Ten pak podepíšeme a podepsaný klíč nahrajeme zpět na server.

$ scp example.com:/etc/ssh/ssh_host_ed25519_key.pub .
$ ssh-keygen -s ca.ed25519 -I example.com -h -n example.com -V +156w ssh_host_ed25519_key.pub
Signed host key ssh_host_ed25519_key-cert.pub: id "example.com" serial 0 for example.com valid from 2017-03-03T17:57:00 to 2020-02-28T17:58:38
$ scp ssh_host_ed25519_key-cert.pub example.com:/etc/ssh/

Nyní bude potřeba říct o novém certifikátu SSH serveru. Přidáme do /etc/ssh/sshd_config jeden řádek a restartujeme SSH.

HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub

Nyní můžeme na všech počítačích, které se potřebují k serveru přihlašovat, přidat do ~/.ssh/known_hosts veřejný klíč naší nové CA.

@cert-authority *.example.com 

SSH se již nebude ptát na potvrzení fingerprintu. Pokud soubor přidáváe na počítač, ze kterého jste certifikáty kopírovali, máte již cílový server v known_hosts přidaný. Musíme jej tedy ještě vymazat.

$ ssh-keygen -R example.com
# Host example.com found: line 3
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old