VNC Configuration using Ansible in CentOS 7
1. Install epel repo on CentOS 7 system:
# yum install epel-release -y
2. Install ansible using yum:
# yum install ansible -y
3. Go to '/etc/ansible/roles/' directory and run the below command to create the skeleton directory structure:
# ansible-galaxy init vnc7 --offline
# tree vnc7
vnc7
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
4. Create the service file to allow 'root' user to access the vncserver using port 5901.
In "/etc/ansible/roles/vnc7/files/" directory create a file with "vncserver@:1.service" name and add the below content:
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i -geometry 1024x768 -depth 16"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
5. Modify 'main.yaml' file in "/etc/ansible/roles/vnc7/tasks/" directory with following content:
---
- name: "Installing the vnc package"
yum: pkg={{ item }} state=installed
with_items:
- tigervnc
- tigervnc-server
- name: "Copying the vnc configuration file"
copy: src=/etc/ansible/roles/vnc7/files/vncserver@:1.service dest=/etc/systemd/system/vncserver@:1.service owner=root group=root mode=0644
- name: "Create the remote /root/.vnc directory"
file:
path: /root/.vnc
mode: 0755
state: directory
- name: "Generate vnc password for root user remotely"
shell: |
echo RedHat123 | vncpasswd -f > /root/.vnc/passwd
- name: "Change the permission to 600 for /root/.vnc/passwd file"
file:
path: /root/.vnc/passwd
mode: 0600
- name: "Start & enable the vncserver"
systemd:
state: started
daemon_reload: yes
name: vncserver@:1
enabled: True
6. Make a file with 'site.yaml' name and mention which folder to search inside roles directory to retrieve the configuration and validate the syntax:
---
- hosts: host1.example.com
roles:
- vnc7
# ansible-playbook site.yaml --syntax-check
playbook: site.yaml
7. Configure passwordless ssh to client system from ansible server:
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ce:7d:fd:65:4e:61:4e:a9:09:61:90:d2:75:1b:d1:1d root@server.example.com
The key's randomart image is:
+--[ RSA 2048]----+
| ..o. +oEo|
| . o. . o..|
| . o . |
| . . .|
| S . = |
| o . ..* .|
| o . .o..+|
| . =.|
| o|
+-----------------+
8. Copy the public key to both the client system by using below command:
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@hots1.example.com
9. Run the playbook with all required changes:
[root@server ~]# ansible-playbook site.yaml
PLAY [host1.example.com] *********************************************************************************
TASK [Gathering Facts] *********************************************************************************
ok: [host1.example.com]
TASK [vnc7 : Installing the vnc package] *********************************************************************************
changed: [host1.example.com] => (item=[u'tigervnc', u'tigervnc-server'])
TASK [vnc7 : Copying the vnc configuration file] *********************************************************************************
changed: [host1.example.com]
TASK [vnc7 : Create the remote /root/.vnc directory] *********************************************************************************
changed: [host1.example.com]
TASK [vnc7 : Generate vnc password for root user remotely] *********************************************************************************
changed: [host1.example.com]
TASK [vnc7 : Change the permission to 600 for /root/.vnc/passwd file] *********************************************************************************
changed: [host1.example.com]
TASK [vnc7 : Start & enable the vncserver] *********************************************************************************
changed: [host1.example.com]
PLAY RECAP *********************************************************************************
host1.example.com : ok=7 changed=6 unreachable=0 failed=0
!! VNC server configuration is complete and "host1.example.com" can be accessible using 'root/RedHat123' credentials over port 5901 !!
Comments
Post a Comment