oui ssh config

Passwortlose SSH-Verbindung für Oracle RAC konfigurieren

Ziel

In diesem Blogeintrag werde ich die verschiedenen Möglichkeiten zur Konfiguration einer passwortlosen SSH-Verbindung zeigen. Eine passwortlose SSH-Verbindung wird zum Beispiel für die Konfiguration eines Oracle Real Application Clusters (RAC) benötigt.  

 

Allgemeines 

Interpretation Kommando-Aufruf

Jedem Kommando-Aufruf in diesem Blogeintrag werden folgende Information vorangestellt. 

[<Server>: <Benutzer>] ...

 

Diese beiden Hinweis zeigen dem Leser, auf welchem Server und mit welchem Benutzer das Kommando ausgeführt werden muss. Dafür gibt es zusätzlich folgende Ausprägungen

 

 Ausprägung   Beschreibung  
 <Wert1>,<WertX>   Kommando für die aufgelisten Server ausführen 
 *  Kommando auf allen Servern ausführen
 <WertX>  Kommando auf einem beliebigen Server ausführen 

 

Testumgebung

Server

Die in diesem Blogeintrag zur Demonstration verwendete Testumgebung wurde komplett mit der Virtualisierungslösung VirtualBox von Oracle realisiert und besteht aus den folgenden virtuellen Maschinen.

 

 #   Server   Betriebssystem   Architektur   Aufgabe 
 1   L11GR2-R2-N1.dba-blog.local   Oracle Linux 5  x86_64  1. RAC Knoten 
 2    L11GR2-R2-N2.dba-blog.local  Oracle Linux 5  x86_64  2. RAC Knoten 

 

Zur Demonstration werde ich die passwortlose SSH-Verbindung für den Benutzer grid einrichten.

 

Vorbereitung

Bevor ich eine neue Konfigurationsmöglichkeit demonstriere, wird die bestehende SSH-Konfiguration wie folgt bereinigt. 

[*: grid] rm -rf ~/.ssh

 

Konfiguration

Betriebssystemmitteln

Die erste Möglichkeit zur Konfiguration der passwortlosen SSH-Verbindung verwendet die vom Betriebssystem mitgelieferten Werkzeuge. Diese Möglichkeit kann unabhängig von der eingesetzten Oracle Version verwendet werden.

 

Im ersten Schritt wird das benötigte .ssh Verzeichnis auf allen Knoten im Home Verzeichnis des Benutzers angelegt.

[*: grid] mkdir ~/.ssh [*: grid] chmod 700 ~/.ssh [*: grid] cd ~/.ssh

 

Anschließend werden die SSH-Schlüssel erzeugt. Hierbei kann zwischen RSA und DSA entschieden werden. Alternativ können auch beide Typen generiert werden. 

[*: grid] ssh-keygen -t rsa [*: grid] ssh-keygen -t dsa

 

Das ssh-keygen Werkzeug stellt dem Benutzer einige Fragen. Für eine passwortlose SSH-Verbindung können alle Standardvorgaben mit Enter bestätigt werden. Der folgende Auszug zeigt die Generiung des RSA Keys für den grid Benutzer auf dem Knoten L11GR2-R2-N1.dba-blog.local. 

Generating public/private rsa key pair. Enter file in which to save the key (/home/grid/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/grid/.ssh/id_rsa. Your public key has been saved in /home/grid/.ssh/id_rsa.pub. The key fingerprint is: db:15:7a:f7:b5:85:63:4b:6c:89:fc:88:71:5c:c8:50 grid@L11GR2-R2-N1.dba-blog.local

 

Die im vorherigen Schritt erzeugten Public Keys müssen nun zur authorized_keys Datei hinzugefügt werden. Begonnen wird mit dem ersten Knoten. 

[L11GR2-R2-N1: grid] cat *.pub >> authorized_keys

 

Nun muss die authorized_keys auf den nächsten Knoten kopiert werden. 

[L11GR2-R2-N1: grid] scp authorized_keys L11GR2-R2-N2:/home/grid/.ssh

 

Das Spiel beginnt nun wieder von vorne. Die Public Keys des zweiten Knotens müssen zu der übertragenen authorized_keys Datei hinzugefügt werden. 

[L11GR2-R2-N2: grid] cat *.pub >> authorized_keys

 

Die geänderte Version der authorized_keys müsste nun zum nächsten Knoten kopiert werden. Da in diesem Beispiel nur zwei Knoten existieren, ist die Datei nun komplett und kann auf alle Knoten verteilt werden.  

[L11GR2-R2-N2: grid] scp authorized_keys L11GR2-R2-N1:/home/grid/.ssh

 

Damit die Datei nur vom Besitzer gelesen kann, sollten die Rechte noch wie folgt geändert werden. 

[*: grid] chmod 600 authorized_keys

 

Zum Abschluss der Konfiguration müssen alle Hostnamen der Knoten zur known_hosts Datei hinzugefügt werden. Am einfachsten geht dies mit einfachen SSH-Aufrufen. 

[L11GR2-R2-N1: grid] ssh L11GR2-R2-N1 date [L11GR2-R2-N1: grid] ssh L11GR2-R2-N1.dba-blog.local date [L11GR2-R2-N1: grid] ssh L11GR2-R2-N2 date [L11GR2-R2-N1: grid] ssh L11GR2-R2-N2.dba-blog.local date

 

Hinweis: Es sollten sowohl die einfachen Hostnamen als auch die Full Qualified Domain Names zur known_hosts hinzugefügt werden.

 

Es reicht aus, die oben aufgeführten SSH-Aufrufe nur auf einen der Knoten auszuführen und anschließend die Datei auf alle Knoten zu verteilen.  

[L11GR2-R2-N1: grid] scp authorized_keys L11GR2-R2-N2:/home/grid/.ssh

 

sshUserSetup Skriptes

Seit dem Release von Oracle 11g Release 2 liefert Oracle das sshUserSetup.shShell-Skript mit aus. Dieses Skript findet man zum Beispiel bei der Grid Infrastructure oder Oracle Database. Mithilfe dieses Skriptes kann man eine passwortlose SSH-Verbindung zwischen mehreren Servern realisieren.

 

Zur Demonstration habe ich die Installationsdateien der Grid Infrastructure in das Verzeichnis /u01/app/stage/grid entpackt. In dem Unterverzeichnis sshsetup findet sich das oben genannte Skript. 

[L11GR2-R2-Nx: grid] cd /u01/app/stage/grid/sshsetup

 

Eine passwortlose SSH-Verbindung wird mit dem folgenden Aufruf eingerichtet. 

[L11GR2-R2-Nx: grid] ./sshUserSetup.sh -user grid -hosts "L11GR2-R2-N1 L11GR2-R2-N2" -advanced -noPromptPassphrase

 

Hinweis: Die Liste der Hosts wird durch ein Leerzeichen getrennt.

 

Während der Ausführung des Skriptes wird mehrmals nach dem Passwort für den angegebenen Benutzer gefragt.

The output of this script is also logged into /tmp/sshUserSetup_2013-11-15-09-48-14.log Hosts are L11GR2-R2-N1 L11GR2-R2-N2 user is grid Platform:- Linux Checking if the remote hosts are reachable PING L11GR2-R2-N1.dba-blog.local (192.168.200.164) 56(84) bytes of data. 64 bytes from L11GR2-R2-N1.dba-blog.local (192.168.200.164): icmp_seq=1 ttl=64 time=0.013 ms 64 bytes from L11GR2-R2-N1.dba-blog.local (192.168.200.164): icmp_seq=2 ttl=64 time=0.048 ms 64 bytes from L11GR2-R2-N1.dba-blog.local (192.168.200.164): icmp_seq=3 ttl=64 time=0.026 ms 64 bytes from L11GR2-R2-N1.dba-blog.local (192.168.200.164): icmp_seq=4 ttl=64 time=0.030 ms 64 bytes from L11GR2-R2-N1.dba-blog.local (192.168.200.164): icmp_seq=5 ttl=64 time=0.052 ms  --- L11GR2-R2-N1.dba-blog.local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4001ms rtt min/avg/max/mdev = 0.013/0.033/0.052/0.016 ms PING L11GR2-R2-N2.dba-blog.local (192.168.200.165) 56(84) bytes of data. 64 bytes from L11GR2-R2-N2.dba-blog.local (192.168.200.165): icmp_seq=1 ttl=64 time=0.677 ms 64 bytes from L11GR2-R2-N2.dba-blog.local (192.168.200.165): icmp_seq=2 ttl=64 time=0.711 ms 64 bytes from L11GR2-R2-N2.dba-blog.local (192.168.200.165): icmp_seq=3 ttl=64 time=0.659 ms 64 bytes from L11GR2-R2-N2.dba-blog.local (192.168.200.165): icmp_seq=4 ttl=64 time=0.595 ms 64 bytes from L11GR2-R2-N2.dba-blog.local (192.168.200.165): icmp_seq=5 ttl=64 time=0.658 ms  --- L11GR2-R2-N2.dba-blog.local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 0.595/0.660/0.711/0.037 ms Remote host reachability check succeeded. The following hosts are reachable: L11GR2-R2-N1 L11GR2-R2-N2. The following hosts are not reachable: . All hosts are reachable. Proceeding further... firsthost L11GR2-R2-N1 numhosts 2 The script will setup SSH connectivity from the host L11GR2-R2-N1.dba-blog.local to all the remote hosts. After the script is executed, the user can use SSH to run commands on the remote hosts or copy files between this host L11GR2-R2-N1.dba-blog.local and the remote hosts without being prompted for passwords or confirmations.  NOTE 1: As part of the setup procedure, this script will use ssh and scp to copy files between the local host and the remote hosts. Since the script does not store passwords, you may be prompted for the passwords during the execution of the script whenever ssh or scp is invoked.  NOTE 2: AS PER SSH REQUIREMENTS, THIS SCRIPT WILL SECURE THE USER HOME DIRECTORY AND THE .ssh DIRECTORY BY REVOKING GROUP AND WORLD WRITE PRIVILEDGES TO THESE directories.  Do you want to continue and let the script make the above mentioned changes (yes/no)? Confirmation provided on the command line  The user chose yes User chose to skip passphrase related questions. Creating .ssh directory on local host, if not present already Creating authorized_keys file on local host Changing permissions on authorized_keys to 644 on local host Creating known_hosts file on local host Changing permissions on known_hosts to 644 on local host Creating config file on local host If a config file exists already at /home/grid/.ssh/config, it would be backed up to /home/grid/.ssh/config.backup. Removing old private/public keys on local host Running SSH keygen on local host with empty passphrase Generating public/private rsa key pair. Your identification has been saved in /home/grid/.ssh/id_rsa. Your public key has been saved in /home/grid/.ssh/id_rsa.pub. The key fingerprint is: 28:0b:75:f8:49:d2:06:fc:ef:7b:60:1c:b6:43:70:07 grid@L11GR2-R2-N1.dba-blog.local Creating .ssh directory and setting permissions on remote host L11GR2-R2-N1 THE SCRIPT WOULD ALSO BE REVOKING WRITE PERMISSIONS FOR group AND others ON THE HOME DIRECTORY FOR grid. THIS IS AN SSH REQUIREMENT. The script would create ~grid/.ssh/config file on remote host L11GR2-R2-N1. If a config file exists already at ~grid/.ssh/config, it would be backed up to ~grid/.ssh/config.backup. The user may be prompted for a password here since the script would be running SSH on host L11GR2-R2-N1. Warning: Permanently added 'l11gr2-r2-n1,192.168.200.164' (RSA) to the list of known hosts. grid@l11gr2-r2-n1's password: Connection closed by UNKNOWN Done with creating .ssh directory and setting permissions on remote host L11GR2-R2-N1. Creating .ssh directory and setting permissions on remote host L11GR2-R2-N2 THE SCRIPT WOULD ALSO BE REVOKING WRITE PERMISSIONS FOR group AND others ON THE HOME DIRECTORY FOR grid. THIS IS AN SSH REQUIREMENT. The script would create ~grid/.ssh/config file on remote host L11GR2-R2-N2. If a config file exists already at ~grid/.ssh/config, it would be backed up to ~grid/.ssh/config.backup. The user may be prompted for a password here since the script would be running SSH on host L11GR2-R2-N2. Warning: Permanently added 'l11gr2-r2-n2,192.168.200.165' (RSA) to the list of known hosts. grid@l11gr2-r2-n2's password:  Done with creating .ssh directory and setting permissions on remote host L11GR2-R2-N2. Copying local host public key to the remote host L11GR2-R2-N1 The user may be prompted for a password or passphrase here since the script would be using SCP for host L11GR2-R2-N1. grid@l11gr2-r2-n1's password: Done copying local host public key to the remote host L11GR2-R2-N1 Copying local host public key to the remote host L11GR2-R2-N2 The user may be prompted for a password or passphrase here since the script would be using SCP for host L11GR2-R2-N2. grid@l11gr2-r2-n2's password: Done copying local host public key to the remote host L11GR2-R2-N2  Creating keys on remote host L11GR2-R2-N1 if they do not exist already. This is required to setup SSH on host L11GR2-R2-N1. Creating keys on remote host L11GR2-R2-N2 if they do not exist already. This is required to setup SSH on host L11GR2-R2-N2. Generating public/private rsa key pair. Your identification has been saved in .ssh/id_rsa. Your public key has been saved in .ssh/id_rsa.pub. The key fingerprint is: 02:91:52:6e:ab:4d:e4:37:da:c0:26:ac:6d:1f:8f:c6 grid@L11GR2-R2-N2.dba-blog.local Updating authorized_keys file on remote host L11GR2-R2-N1 Updating known_hosts file on remote host L11GR2-R2-N1 Updating authorized_keys file on remote host L11GR2-R2-N2 Updating known_hosts file on remote host L11GR2-R2-N2 cat: /home/grid/.ssh/known_hosts.tmp: Datei oder Verzeichnis nicht gefunden cat: /home/grid/.ssh/authorized_keys.tmp: Datei oder Verzeichnis nicht gefunden SSH setup is complete.  ------------------------------------------------------------------------ Verifying SSH setup =================== The script will now run the date command on the remote nodes using ssh to verify if ssh is setup correctly. IF THE SETUP IS CORRECTLY SETUP, THERE SHOULD BE NO OUTPUT OTHER THAN THE DATE AND SSH SHOULD NOT ASK FOR PASSWORDS. If you see any output other than date or are prompted for the password, ssh is not setup correctly and you will need to resolve the issue and set up ssh again. The possible causes for failure could be: 1. The server settings in /etc/ssh/sshd_config file do not allow ssh for user grid. 2. The server may have disabled public key based authentication. 3. The client public key on the server may be outdated. 4. ~grid or ~grid/.ssh on the remote host may not be owned by grid. 5. User may not have passed -shared option for shared remote users or may be passing the -shared option for non-shared remote users. 6. If there is output in addition to the date, but no password is asked, it may be a security alert shown as part of company policy. Append the additional text to the <OMS HOME>/sysman/prov/resources/ignoreMessages.txt file. ------------------------------------------------------------------------ --L11GR2-R2-N1:-- Running /usr/bin/ssh -x -l grid L11GR2-R2-N1 date to verify SSH connectivity has been setup from local host to L11GR2-R2-N1. IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. Please note that being prompted for a passphrase may be OK but being prompted for a password is ERROR. Fr 15. Nov 09:50:48 CET 2013 ------------------------------------------------------------------------ --L11GR2-R2-N2:-- Running /usr/bin/ssh -x -l grid L11GR2-R2-N2 date to verify SSH connectivity has been setup from local host to L11GR2-R2-N2. IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. Please note that being prompted for a passphrase may be OK but being prompted for a password is ERROR. Fr 15. Nov 09:50:48 CET 2013 ------------------------------------------------------------------------ ------------------------------------------------------------------------ Verifying SSH connectivity has been setup from L11GR2-R2-N1 to L11GR2-R2-N1 IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. bash: -c: line 0: unexpected EOF while looking for matching `"' bash: -c: line 1: syntax error: unexpected end of file ------------------------------------------------------------------------ ------------------------------------------------------------------------ Verifying SSH connectivity has been setup from L11GR2-R2-N1 to L11GR2-R2-N2 IF YOU SEE ANY OTHER OUTPUT BESIDES THE OUTPUT OF THE DATE COMMAND OR IF YOU ARE PROMPTED FOR A PASSWORD HERE, IT MEANS SSH SETUP HAS NOT BEEN SUCCESSFUL. bash: -c: line 0: unexpected EOF while looking for matching `"' bash: -c: line 1: syntax error: unexpected end of file ------------------------------------------------------------------------ -Verification from complete- SSH verification complete.

Hinweis: Die Fehlermeldungen bei der Überprüfung können ignoriert werden. Die passwortlose SSH-Verbindung wurde korrekt eingerichtet.

 

Das Skript fügt nur die beim hosts Parameter aufgeführten Servernamen zur known_hosts Datei hinzu. In diesem Beispiel würden zum Beispiel die Full Qualified Domain Names fehlen. Diese müssten nachträglich per Hand hinzugefügt werden.

 

Oracle Universal Installer (OUI)

Die letzte Möglichkeit zur Konfiguration der passwortlosen SSH-Verbindung ist der OUI. Dieser bietet die Möglichkeit, die SSH-Konfiguration während der Installationsvorbereitungen durchzuführen. Intern verwendet der OUI das sshUserSetup.sh Skript.

 

Ich verwende den Oracle Universal Installer der Grid Infrastructure 11g Release 2, der wie folgt gestartet wurde. 

[L11GR2-R2-N1: grid] cd /u01/app/stage/grid [L11GR2-R2-N1: grid] ./runInstaller

 

Im 6. Schritt (Erweiterte Installation) der Installationsvorbereitungen kann die SSH-Konfiguration vorgenommen werden. Vorher müssen aber zunächst alle am RAC beteiligten Server zur Knotenliste hinzugefügt werden.

 

Nach der Eingabe des Passwortes und Drücken auf die Setup Schaltfläche, wird die Konfiguration gestartet.

 

oui ssh config

 

Den Erfolg der Konfiguration wird durch eine Hinweismeldung bestätigt.

 

oui ssh config confirmation

 

Sollte es bei der SSH-Konfiguration Probleme geben, kann vielleicht der folgende Blogeintrag helfen.

 

Fazit

Oracle hat mit Einführung des Releases 11g Release 2 die Einrichtung einer passwortlosen SSH-Verbindung stark vereinfacht. Durch die Integration der SSH-Konfiguration in den Oracle Universal Installer wurde der manuelle Aufwand nahezu auf null reduziert. 

Leave a Reply

Your email address will not be published. Required fields are marked *