SMsoft – informatica e dintorni

varie su OSX, GNU/Linux e l'Open Source

Copiare la propria chiave pubblica ssh su un server senza ssh-copy-id

Linux ha il comando ssh-copy-id che permette la copia della propia chiave pubblica ssh su un altro server, ma non tutte le varianti *nix hanno tale programma. Per copiare la propria chiave pubblica ssh su un server, da una macchina che non ha ssh-copy-id, ad esempio Mac OSX, di può ricorrere al seguente comando da lanciare nel terminale di OSX:

cat ~/.ssh/id_rsa.pub | ssh user@mio_dominio.it "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

dove user@mio_dominio.it rappresenta l’utente ed il server su cui attivare l’accesso senza dover inserire la password ogni volta.

Clicca qui per vedere come creare una chiave ssh pubblica su OSX

NOTA

Per consentire l’accesso SSH all’utente root solo con il certificato (bloccando la connessione con password), bisogna modificare il file /etc/ssh/sshd_config ed in particolare impostare la direttiva:

PermitRootLogin without-password

riavviare poi il servizio con il classico:

/etc/init.d/ssh restart

enjoy

Creare una chiave ssh pubblica su OSX

Potrebbe essere utile creare una chiave rsa pubblica per ssh su OSX, per automatizzare il login su altri server senza dover reinserire la password ogni volta.
Per farlo basterà digitare da terminale:

ssh-keygen -t rsa -C "mio_indirizzo@mio_dominio.com"

dove chiaramente mio_indirizzo@mio_dominio.com dovrà essere il vostro indirizzo email.
In questo modo verranno creati due files (id_rsa e id_rsa.pub) nella cartella .ssh presente nella propria home dirctory. il file id_rsa.pub conterrà la chiave pubblica che potrà essere aggiunta al file ~/.ssh/authorized_keys sul server per cui evitare la richiesta di password ad ogni login.

enjoy

Attivare l’accesso SSH in chroot su Debian Lenny

Innanzitutto due parole sul chroot. Attivare il chroot su una connessione ssh, significa costringere un utente a restare all’intero della sua home directory senza porter andare a “spasso” sul server.
In pratica viene creato un ambiente contenente le librerie ed i programmi necessari all’utente, che sarà limitato ad operazioni solo all’interno di questo ambiente.
Dalla versione 4.8 di openssh è possibile attivare questa funzionalità sfruttando una direttiva interna chiamata ChrootDirectory.

Ipotizziamo di avere un utente chiamato test (gruppo test) per cui vogliamo attivare il chroot. Basta modificare il file /etc/ssh/sshd_config, aggiungendo:

Match User test
ChrootDirectory /home/%u

e poi riavviare il server ssh con:
/etc/init.d/ssh reload

Per attivare anche sftp sembre per l’utente test (gruppo test), bisogna inserire in  /etc/ssh/sshd_config:

Subsystem sftp /usr/lib/openssh/sftp-server
Match User test
    ChrootDirectory /home/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

A questo punto bisogna inserire nella root directory dell’utente i necessari files per far funzionare il chroot. Piuttosto che fare l’operazione a mano, vi segnalo un semplice script chiamato ssh-scp-sftp-chroot-jail (mirror locale forse non aggiornato) che consente di automatizzare questo processo, che altrimenti avremmo dovuto fare manualmente, cercando le librerie necessarie alla bash (con il comando ldd /bin/bash) e creare alcuni devices (es. /dev/null con mknod).
Scarichiamo lo script:

cd /usr/local/sbin
wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 /usr/local/sbin/make_chroot_jail.sh

ed utilizziamolo:

make_chroot_jail.sh test /bin/bash /home/test

dove test sarà chiaramente l’utente per cui attivare il chroot

Attenzione: è buona norma modificare i permessi a 700 della home directory dell’utente per cui si è attivato il chroot .

Nota: nel caso sia necessario gestire opzioni particolari (es transfer rate in upload/download, limitare il numero di connessioni massime e per IP) vi consiglio di visionare http://mysecureshell.sourceforge.net/

Connessione in Remote Desktop da OSX a windows con tunnel ssh

In un precedente articolo, avevo indicato come si poteva creare un tunnel ssh verso un host non raggiungibile direttamente su internet. Segue la procedura per la connessione in Remote Desktop ad una postazione windows non raggiungibile direttamente da internet, tramite un host OSX. Chiaramente deve essere disponibile un host intermedio raggiungibile sia dall’host Windows che dall’host OSX.
Vediamo i preparativi e poi passiamo all’opera. E’ necessario procurarsi un client Remote Desktop per OSX. Io ho usato CoRD.
Sulla postazione con OSX basterà aprire il terminale e digitare:

ssh -f -N -L 3389:10.10.10.10:3389 smsoft@remotepc.smsoft.it

dove
-f manda in background la connessione ssh (che poi si può “killare” quando non serve più)
-N indica a ssh che non specifichiamo un comando remoto da eseguire direttamente
3389 è la porta usata da Remote Desktop
10.10.10.10 è l’IP dell’host windows non raggiungibile direttamente da internet
smsoft@remotepc.smsoft.it è l’utente/host raggiungibile da internet che farà da intermediario per la connessione

Ora bisognerà aprire il client Remote Desktop (CoRD) ed inserire come indirizzo IP a cui connettersi 127.0.0.1
Se tutto è andato a buon fine, dopo alcuni secondi vedrete visualizzato il Desktop dell’host windows remoto.

Nota: E’ possibile impostare la connessione ssh in modo che effettui automaticamente la disconnessione se non si usa il tunnel entro un certo timeout. Per impostare il timeout a 10 secondi, basta usare il seguente comando al posto del precedente:

ssh -f -L 3389:10.10.10.10:3389 smsoft@remotepc.smsoft.it sleep 10

In questo caso non uso l’opzione -N ed aggiungo sleep 10 come comando da passare ad ssh

Creare un tunnel ssh su Linux o OSX

I tunnel SSH (o meglio SSH Port Forwarding) sono un modo sicuro (la connessione non viaggia in chiaro) per l’accesso ad un host (un server, un pc), che non è possibile raggiungere normalmente. Ad esempio un caso potrebbe essere quello in cui ci sono degli host non connessi direttamente ad internet, ma tramite  un firewall. Per poter usare questo strumento, e’ necessario che almeno uno degli host (o meglio il firewall) sia raggiungibile da internet ed abbia un server ssh installato. Ci sono due tipologie di tunnel SSH: Local Port Forwarding e Remote Port Forwarding.

Local Port Forwarding
Questo permette di accedere alle porte (i vari servizi) su hosts che non si possono raggiungere direttamente, effettuando un “piping” delle informazioni in una connessione SSH verso un host pubblico (quest’ultimo deve essere in grado di raggiungere gli hosts interni). Ad esempio immaginiamo che mi trovi a casa e voglia raggiungere il PC dell’ufficio che non e’ connesso direttamente ad internet ma e’ “dietro” un firewall con shell ssh. Per gli esempi faro’ riferimento alla seguente situazione:
PC-Locale -> {Internet} -> Firewall (IP: 125.xxx.xxx.xxx) -> Host destinazione dietro il firewall (IP: 10.xxx.xxx.xxx)

local port forwarding

Per attivare il tunnessl SSH in questo caso basta digitare sul PC locale (Linux, OSX, etc):

ssh -N -L 8080:10.xxx.xxx.xxx:80 user@125.xxx.xxx.xxx

dove:

-L : il tunnel di tipo "Local"
8080 : la porta che viene aperta in locale
10.xxx.xxx.xxx:80 : l'host non raggiungibile via internet e la porta verso cui
                    creare il tunnel
user@125.xxx.xxx.xxx : il server a cui ci connettiamo "125.xxx.xxx.xxx"
                    (raggiungibile da internet) ed il relativo utente "user"

Con questo comando gli diciamo che chiamando la porta 8080 in locale, ci viene restituito quello che e’ presente sulla porta 80 del server 10.xxx.xxx.xxx altrimenti non raggiungibile.

Remote Port Forwarding
Questo sistema invece consente di aprire un tunnel in modo inverso ovvero, facendo riferimento all’esempio precedente, e’ come se mi trovo in ufficio ed apro una connessione verso il mio PC, attraverso il firewall, ad un altro PC con IP pubblico anche esteno alla rete dell’ufficio.

remote port forwarding

In questo caso il comando da lanciare sul Pc in ufficio e’:
ssh -N -R 8080:10.xxx.xxx.xxx:80 user@125.xxx.xxx.xxx
dove:

-R : il tunnel di tipo "Remote"
8080 : la porta che viene aperta in remoto
10.xxx.xxx.xxx:80 : l'host non raggiungibile via internet e la porta verso cui
                    creare il tunnel
user@125.xxx.xxx.xxx : il server a cui ci connettiamo "125.xxx.xxx.xxx"
                    (raggiungibile da internet) ed il relativo utente "user"

a questo punto bastera’ richiamare dal PC a casa l’indirizzo http://125.xxx.xxx.xxx:8080 per visualizzare la risposta del server web (porta 80) del Pc in ufficio 10.xxx.xxx.xxx

La differenza sostanziale tra le due modalita’ e’ il punto da cui si lancia il comando. Tornando sempre all’esempio iniziale, se sono a casa e voglio connettermi al Pc in ufficio, usero’ un tunnel di tipo “Local”, se invece sono in ufficio e voglio dare la possibilita’ di raggiungere il mio PC ad un utente remoto, usero’ un tunnel di tipo “Remote”.

L’esempio riportato e’ chiaramente utile per raggiungere la porta 80 (server web), ma allo stesso modo si potrebbe raggiungere il PC interno (es. 10.xxx.xxx.xxx) in Desktop Remote o VNC, specificando le opportune porte.

velocizzare il login con ssh

Se avete notato che la vostra LinuxBox al momento della connessione ssh impiega un pò di tempo (nell’ordine di 1-2 secondi) per chiedervi la password di accesso, probabilmente è attivato il sistema di risoluzione DNS del server ssh. Dato che avere questa informazione nei LOG non è di estrema importanza (basta in definitiva avere l’IP di chi si connette via ssh), si può disabilitare l’uso della risoluzione DNS, modificando il file  /etc/ssh/sshd_config ed aggiungendo la seguente riga:

UseDNS no

successivamente va riavviato il server ssh con:

/etc/init.d/ssh restart

ATTENZIONE: consiglio vivamente di lasciare la connessione ssh corrente attiva e di provare ad effettuare una nuova connessione ssh verso il server, così se per caso non riuscite ad accedere (es avete commesso qualche errore nel file di configurazione di ssh) potete rimediare e non restare “chiusi fuori” :-)

Page optimized by WP Minify WordPress Plugin