Ssh

SSHPASS

From linuxacademy nuggets
It is less secure of key exchange but it can be used where it is not possible do a key exchange

sudo apt-get install sshpass
sshpass -p '123456' ssh -o StrictHostKeyChecking=no user@destination-name-or-ip

rsync using sshpass
rsync --rsh="sshpass -p '123456' ssh -o StrictHostKeyChecking=no -l user" destination-name-or-ip:/dir/to/copy/myfile.txt myfile.txt

Restriction

thanks to http://askubuntu.com/questions/45679/ssh-connection-problem-with-host-key-verification-failed-error
If you are running in certain remote/scripting situations where you lack interactive access to the prompt-to-add-hostkey, work around it like this:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime
ssh utente@hostname #per loggarmi sulla macchina remota
scp file_locale utenteremoto@ip:/dir

#in questo modo se sono loggato su una macchina posso trasferire file_locale nell'altra. Quella locale è quella dove sono loggato e non quella dove sono seduto fisicamente
IMPORTANTE funziona come il cp normale cp sorgente destinazione solo che si possono prendere file remoti mettendo le informazioni in più

è nato per i sitemi bsd ma ci sono i porting
open ssh
supporta due tipi di famiglie
1 deprecaped attaccabile
2 molto resistente

Moduli

ssh utilizza crittografia simmetrica e asimmetrica
sshd è il demone
ssh il client
scp per copiare i file in remoto
sftp per fare il traffico ftp per non passare le pwd in chiaro

Login con le chiavi

Serve per avere il login automatico quindi non va inserita passphrase

Passi in ordine:

Server

su - username-server
ssh-keygen -b 2048 -t rsa
cd .ssh/
scp id_rsa username-client@ip-client:/home/username-client
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys

Client

mkdir ~/.ssh
mv ~/id_rsa ~/.ssh
#poi provare se il collegamento va a buon fine senza password
ssh username-server@ip-server

Molto importante il file authorized_keys deve avere permessi di lettura e scrittura solo del proprietario altrimenti non funziona

-rw------- 1 www www  821 30 apr  2012 authorized_keys

vengono generati una coppia di chiavi simmetrica e asimmetrica
/etc/ssh ci sono tutti i file di config
- ssh_host_rsa_key chiave privata generata dal daemon, lo stesso file con .pub quella pubblica , lo stesso invece di rsa con dsa per la crittografia simmetrica
- ssh-keygen -t tipo per generare le chiavi

Per il login automatico deve essere messo sulla macchina dove ci si vuole loggare dentro la cartella .ssh la chiave pubblica rinominata con authorized_keys , oppure in append allo stesso file se questo esiste già.

Sulla propria macchina invece va la chiave privata che va rinominata in base al protocollo che si sta usando id_dsa o id_rsa per esempio.

Chiavi multiple

In caso di autenticazioni multiple ci possono essere

cat ~/.ssh/config 
Host ip-uno
    IdentityFile ~/.ssh/id_rsa-uno
    User backup
    Port 22322

Host ip-due
    IdentityFile ~/.ssh/id_rsa-due
        User backup
        Port 2222

per fare login ssh ip-uno o ssh ip-due

Parametri

ssh -2 forz ad usare la versione 2 o 1 se metto 1
ssh -l nome_utente hostname questo dal lato client

scp utente@loclahost:/file utente2@hostname:/directory
se siamo già loggati possiamo scrivere scp /file utente2@hostname:/directory perchè della mia macchina so già l'indirizzo

TUNNELING

(ci sono due computer un server che manda tutto alla porta e il client dove i programmi sono attivi, nel mezzo si costruisce un tunnel criptato)
ssh - l localport:host:hostport user@host
hostport è la porta del server
host indirizzo ip o nome del server
-c attiva la compressione -t è fondamentale perchè non da la shell

ssh -X user@macchina #in questo modo vengono reindirizzati alla propria macchina le sessioni grafiche , per esempio se lancio acroread posso usare il suo sulla mia macchina. Ovviamente se vado da mac a linux devo usare X11 come shell

Da approfondire
http://www.voipandhack.it/archives/linux/vpn-tunneling-con-openssh
http://www.voipandhack.it/archives/linux/openssh-tunneling-layer2-vpn

Se si vuole solo aprire il tunnel senza shell e farsi restituire il prompt perchè per esempio si vuole lanciarlo con uno script

ssh -N ip-macchina-da-ponte -L ip-dacuivoglioesporre:portadacuivoglioesporre:ipdestinazionefinale:portafinale &

Esempio di tunnel

ssh ipremoto -L 8080:localhost:10080

Sulla mia macchina alla porta 8080 risponde la porta della macchina remota che apre un tunnel dal suo localhost alla porta 10080.
Localhost indica l'indirizzo su cui viene fatto il tunnel visto dalla macchina destinataria.
Se voglio mappare in modo che non sono solo io a vedere quella porta ma per esempio tutte le macchine sulla mia rete locale devo mettere ip di bind address per esempio
 ssh utenteremoto@14.255.255.107 -L 192.168.9.85:18080:localhost:18080

192.168.9.85 è il mio ip di rete locale

Modificare la porta di default di ssh in Centos 6

La cosa è molto molto più complessa di quanto sembri.
Se si è bravi bisogna riuscirlo a farlo senza tagliarsi fuori dal sistema.

firewall

Per prima cosa bisogna aggiungere la nuova porta alla configurazione del firewall
In centos 6 c'è già il firewall attivo lanciare

system-config-firewall-tui 
#oppure
system-config-firewall

Si apre il tool semigrafico specificare "Personalizza" — "Forward" — "<Aggiungi>" definire porta e protocollo nel nostro esempio usiamo 1234 e tcp e poi fare "Chiudi" ( se si specifica Forward invece di chiudi si può specificare anche l'interfaccia ethernet wlan dove penso la regola debba essere applicata, ma non è necessario al nostro caso). Facendo "OK" e poi "Si" le regole vengo applicate.

I risultati sono "facilmente" visibili con iptatables -L

SELinux

Su centos è anche attivo selinux che permette le connessioni per ssh solo alla porta 22. Per poter smanettare con selinux bisogna installarsi semange nel mio caso è bastato fare

yum -y install policycoreutils-python

Vediamo le impostazioni per l'ssh, come si vede c'è solo la 22

#semanage port -l | grep ssh
ssh_port_t                     tcp      22

Per cambiarle eseguire il seguente comando
# semanage port -a -t ssh_port_t -p tcp 1234

lui frullerà un po' e dopo quando restituirà la shell lanciando nuovamente il comando sopra si otterrà
#semanage port -l | grep ssh
ssh_port_t                     tcp      22,1234

Servizio ssh

Editare /etc/ssh/sshd_config e cambiare l'attributo Port

Port 1234

Dopo ricaricare il servizio ssh si può fare anche un controllo con netstat

# /sbin/service sshd reload
# netstat -tulpn | grep 1234

Modificare la porta in Ubuntu Server

Basta cambiare l'attributo port in /etc/ssh/sshd_config come scritto sopra.
Poniamo il caso meno semplice, cioè firewall sulla stessa macchina in cui ci colleghiamo in ssh.
Conviene seguire questa procedura:

  1. collegarsi in ssh usando la porta permessa
  2. aggiungere una regola al firewall con la nuova porta
  3. modificare la porta di ssh e lanciare sshd reload. In questo momento possiamo collegarci con la nuova porta ma abbiamo ancora la shell aperta sulla porta precedente che non viene chiusa. Così se abbiamo sbagliato qualcosa possiamo ancora salvarci.
  4. apriamo una nuova shell sul nostro client remoto e lanciamo una sessione ssh con la nuova porta.
  5. se tutto funziona possiamo eliminare la regola precedente senza problemi.

Abilitare X11 su un server centos senza interfaccia grafica

installare i seguenti pacchetti

yum install xorg-x11-xauth.x86_64
yum install xorg-x11-fonts-100dpi.noarch xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-ISO8859-1-100dpi.noarch xorg-x11-fonts-ISO8859-1-75dpi.noarch  xorg-x11-fonts-ISO8859-14-100dpi.noarch xorg-x11-fonts-ISO8859-14-75dpi.noarch xorg-x11-fonts-ISO8859-15-100dpi.noarch xorg-x11-fonts-ISO8859-15-75dpi.noarch xorg-x11-fonts-ISO8859-2-100dpi.noarch xorg-x11-fonts-ISO8859-2-75dpi.noarch xorg-x11-fonts-ISO8859-9-100dpi.noarch xorg-x11-fonts-ISO8859-9-75dpi.noarch xorg-x11-fonts-Type1.noarch xorg-x11-fonts-cyrillic.noarch xorg-x11-fonts-ethiopic.noarch xorg-x11-fonts-misc.noarch
yum install xorg-x11-utils.x86_64

Abilitare in sshd_config file

X11Forwarding yes

di solito già abilitato

e poi ssh -X

Slow login

È un problema di reverse del dns che è molto lento, per disabilitare questa operazione ho letto diverse pagine web e provato varie soluzioni lato server.
Alla fine lato client ho modificato
/etc/ssh/ssh_config

GSSAPIAuthentication no

invece di yes e così va tutto.
Si può fare anche nel config della propria home ma così vale per tutti.
Alcune guide interessanti per questa funzionalità http://superuser.com/questions/359344/ssh-is-slow-to-make-a-connection
http://blog.maurizio.proietti.name/2008/08/29/linux-slow-ssh-login-login-lento-con-ssh/

Execute remote command with ssh

Can be useful to upgrade a server with a script
first of all can be a good idea create a passwordless channel to automatize the script

# from my machine
ssh-keygen
ssh-copy-id root@remotesite

this is an example script that update the postfix config file

scp main.cf root@remotesite:/etc/postfix/main.cf
scp sasl_passwd.db root@remotesite:/etc/postfix/sasl_passwd.db
scp sender_canonical root@remotesite:/etc/postfix/sender_canonical
ssh root@remotesite 'echo `hostname`.remotesite > /etc/mailname'
ssh root@remotesite 'service postfix restart'

Approfondire ssh expect

http://stackoverflow.com/questions/19101879/bash-expect-script-for-ssh

Access logs

in /var/log/auth

grep sshd auth.log* | grep password

look also to the command "last" http://www.cyberciti.biz/faq/linux-unix-last-command-examples/

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License