Esercizio 1: una rete
01net1-ccli-cssh
Descrizione concisa: Una rete, client e server SSH.
E' importante preparare un diagramma del progetto.
Non esiste uno specifico linguaggio di diagrammazione, ciascuno può scegliersi il suo. L'importante è rimanere consistemti in diagrammi di più progetti.
Il diagramma deve specificare tutti i componenti del progetto. Lo scopo è di passarlo ad un programmatore, che deve comprendere subito quello che deve preparare.
La rete si chiamerà net1
e il suo indirizzo CIDR sarà 192.160.100.0/24
.
Sulla rete vi saranno due container: one
e two
, con indirizzi di host 11
e 12
.
Il container one sarà generato dall'immagine ccli
e sarà un client SSH, two dall'immagine cssh
, un server SSH.
Il container two avrà un utente pippo
, con password pluto
.
Scaffolding
E' importante avere un nome distintivo del progetto, che suggerisca la struttura e le intenzioni di ciò che si vuole compiere.
Creare la directory di progetto:
mkdir 01net1-ccli-cssh
cd 01net1-ccli-cssh
L'albero dei files che comporranno il progetto è preparato prima, con i files vuoti. Questo è lo scaffolding (impalcatura) del progetto.
L'approccio è top-down.
Preparare lo scaffolding:
mkdir ccli cssh
touch ccli/Dockerfile cssh/Dockerfile
touch docker-compose.yml
Ogni immagine da generare ha una sottodirectory col nome dell'immagine, e contiene il suo Dockerfile
, più ogni altro eventuale file necessario nal build.
A livello progetto vi è il file docker-compose.yml
.
Il risultato è:
tree .
.
├── ccli
│ └── Dockerfile
├── cssh
│ └── Dockerfile
└── docker-compose.yml
Files del Progetto
ccli/Dockerfile
vim ccli/Dockerfile
FROM alpine:3.7
MAINTAINER John Smith <john@stormforce.ac>
RUN apk --update add --no-cache openssh tcpdump curl
CMD ["/bin/sleep","1000000"]
cssh/Dockerfile
vim cssh/Dockerfile
FROM alpine:3.7
MAINTAINER John Smith <john@stormforce.ac>
# Installazione del software
RUN apk --update add --no-cache openssh tcpdump \
openssh bash && rm -rf /var/cache/apk/*
# ‘root’ può fare login
RUN sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
&& echo "root:root" | chpasswd
# Abilitare la porta 22
RUN sed -ie 's/#Port 22/Port 22/g' /etc/ssh/sshd_config
# Abilitare le chiavi crittografiche
RUN sed -ri 's/#HostKey \/etc\/ssh\/ssh_host_key/HostKey \/etc\/ssh\/ssh_host_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_rsa_key/HostKey \/etc\/ssh\/ssh_host_rsa_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_dsa_key/HostKey \/etc\/ssh\/ssh_host_dsa_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_ecdsa_key/HostKey \/etc\/ssh\/ssh_host_ecdsa_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_ed25519_key/HostKey \/etc\/ssh\/ssh_host_ed25519_key/g' /etc/ssh/sshd_config
# Generare le chiavi crittografiche
RUN /usr/bin/ssh-keygen -A
RUN ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_key
# Generazione dell’utente ‘pippo’ con password ‘pluto’
RUN adduser -D pippo && echo "pippo:pluto" | chpasswd
# Porta da esporre al port mapping
EXPOSE 22
# Comando da lanciare
CMD ["/usr/sbin/sshd","-D"]
docker-compose.yml
vim docker-compose.yml
version: '3.6'
services:
one:
build: ccli
image: ccli
container_name: one
hostname: one
cap_add:
- ALL
networks:
net1:
ipv4_address: 192.168.101.11
two:
build: cssh
image: cssh
container_name: two
hostname: two
cap_add:
- ALL
networks:
net1:
ipv4_address: 192.168.101.12
networks:
net1:
name: net1
ipam:
driver: default
config:
- subnet: 192.168.101.0/24
Esecuzione
Lancio del progetto:
docker-compose up -d
Vengono create le immagini ccli
e cssh
.
Vengono attivate la rete net1
e i containers one
e two
.
Test
Collegarsi a one:
docker exec -ti one sh
Aprire una sessione SSH a two:
ssh pippo@two
- Accettare la chiave pubblica
- La password è pluto
Chiudere il collegamento ssh con exit
.
Uscire da one con exit
.
Pulizia
Da host, directory di progetto:
docker-compose down
Vengono fermati i contenitori, poi rimossi i contenitori e la rete.
Esercizio 1A
Una rete, client e server SSH.
Collegamento ai container da Gnome Terminal.
Profilo di terminale
Nuovo profilo: one.
Comando di lancio:
bash -c "docker exec -ti one sh -c \"export PS1='\h:\W\# ' && sh"\"
Per renderlo distintivo, cambiamo i colori del terminale.
Nuova finestra di terminale e collegamento con SSH.
Profilo per two
Ripetere per un nuovo profilo two.
Schema di colori: Green on black.