Ssh

De BlaxWiki
Aller à la navigationAller à la recherche

Ssh Chroot

On peut avoir facilement un user chroot en ssh / sftp. Rajouter dans le fichier /etc/ssh/sshd_config


Subsystem       sftp    /opt/applis/openssh/libexec/sftp-server
#Subsystem sftp internal-sftp

Match user userachrooter
         ChrootDirectory /home/%u
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp

Ou alors avec un group

Match group sftpweb
        ChrootDirectory /home/webusers/%u
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp
Creer un groupe sftpweb

ll /home/webusers
 drwx-----x 4 root    root    4096 Oct 19 14:15 webusers


Le user qui sera chrooté  :

useradd -d /home/webusers/$login -m -s /bin/false -g sftpweb $login
mv /home/webusers/$login /home/webusers/$login.tmp
usermod -d /$login $login
mkdir /home/webusers/$login
mv /home/webusers/$login.tmp /home/webusers/$login/$login
chmod 755 /home/webusers/$login
chmod 755 /home/webusers/$login/$login
chown root:root /home/webusers/$login"
chown $login /home/webusers/$login/$login

Le home du user /home/webusers/$login doit appartenir à root pour que le chroot fonctionne, c est pour ca qu il faut creer un autre repertoire qui appartient au user (/home/webusers /$login/$login). Le répertoire du user doit appartenir au user root et le group au group du user. Le chmod doit obligatoirement être en 755 sur le répertoire.

Pour que le user arrive bien directement dans son repertoire final (user=lab0004) vipw : ab0004:x:502:504::/lab0004:/bin/false

http://www.debian-administration.org/articles/590

Ssh sans mot de passe

Générer sur le serveur local les clés ssh (ssh-keygen -t rsa), copier le contenu de /home/user1/.ssh/id_rsa.pub sur le serveur distant dans /home/user2/.ssh/autorized_keys
(cat ~/.ssh/id_rsa.pub | ssh user@machine "cat - >> ~/.ssh/authorized_keys"). Sinon on peut utiliser la commande ssh-copy-id -i ~/.ssh/id_rsa.pub user@machine
Puis depuis le serveur local ssh user2@w.x.y.z ; la connexion se fera dans demander de mot de passe.

Ssh avec restriction de commande

1er cas

Sur le serveur où l'on veut faire la restriction, rajouter dans le .ssh/autorized_keys :
from="w.x.y.z/a",no-X11-forwarding,no-agent-forwarding,no-pty,command="..." ssh-rsa AAAAB3NzaC1yc2EAAAABIwAA...."
On peut autoriser cette clé publique que pour l'ip w.x.y.z et la commande suivante.

2ème cas

Si le user ne doit faire que du sftp/scp & rsync, installer rssh (lui mettre comme shell rssh) et dans /etc/rssh.conf :
allowscp
allowsftp
allowrsync

Rsync over ssh

Commande de base

rsync -avzn -e ssh tof benbis@w.x.y.z:/home/benbis/ (le -n permet de simuler)

Cela va copier le répertoire tof local dans le répertoire /home/benbis/ distant via ssh. Cela évite de faire un scp et d'avoir le daemon rsync qui tourne sur le serveur distant 
(rsync doit bien sur être installé sur le serveur distant)

Rsync over ssh secure

# Serveur A
rsync -e 'ssh -F /home/vision/.ssh/ssh.conf' -a $DIR_TMP/* vision@admin1.so.apps.valeo.com:/opt/data/log/syslog/

cat /home/vision/.ssh/ssh.conf :
Host admin1.so.apps.valeo.com
        Hostname admin1.so.apps.valeo.com
        User vision
        IdentityFile /home/vision/.ssh/id_dsa (cela est la clé sur le serveur A)

# Serveur B
dans /home/vision/.ssh/authorized_keys doit se trouver le contenu de /home/vision/.ssh/id_dsa.pub du serveur A


Tunnel ssh

ssh -L <port_local>:<hote_cible>:<port_destination> user@server -pXX

	
ssh -L 9089:localhost:3389 xhark@109.238.2.200 -p443

Cela aura pour effet de rediriger toutes les requêtes tapant en local sur le port 9089 de votre machine vers le port 3389 de la machine distante. Dans cet exemple, il s’agit d’une
 connexion sur un serveur Windows ayant OpenSSH écoutant sur le port 443. Le but est de réaliser un tunnel SSH pour prendre le contrôle en bureau à distance (RDP) sur le port par 
défaut 3389.
Dans cet exemple on veut joindre le serveur https 10.0.1.1 qui ne peut etre join que via le serveur 212.43.194.1. On va donc effectuer cette commande en local, qui a pour but
d'ouvrir le port 8000 en local qui sera redirigé (comme un proxy) sur le port 443 de la 10.0.1.1 via le tunnel ssh via 212.43.194.1

#ssh -N -L 8000:10.0.1.1:443 benj@212.43.194.1

mettre sur sa machine en local dans le navigateur  https://localhost:8000

Tunnel SSH avec translation de port dynamique (dynamic forwarding) : ssh -D <port_local> <utilisateur>@<hote_cible> -pXX

	
ssh -D 8080 xhark@109.238.2.200 -p443
Dans cet exemple nous ouvrons un tunnel dynamique qui permettra de surfer à travers le tunnel SSH via un proxy de type Socks.

Tunnel ssh avec Putty

On peut aussi faire cela avec Putty pour se connecter à un vncserver qui tourne en local sur un serveur.

Sur le serveur on a en ecoute : 127.0.0.1:5900

Sur le poste client, on lance putty :
  - on va dans Connection / SSH / Tunnels
  - source port : 5900 / destination : ip_du_serveur:5900 et cliquer sur "Add"
  - Session : mettre l'ip du serveur et lancer la connexion ssh

Puis sur le poste client on lance vncviewer et on met comme adresse 127.0.0.1:5900. La connexion ssh doit etre lancée pour que le tunnel s'établisse, et que lorsqu'on lance vcnviewer 
sur 127.0.0.1:5900, il passe par le tunnel et nous connecte.

Sftp

Si on veut faire du scp / sftp uniquement, il faut verifier que dans sshd_config on ait bien une ligne avec "/usr/lib/openssh/sftp-server" (ou un autre path vers sftp-server).
On rajoute alors ce path complet dans /etc/shell, et on donne ce shell au user qui veut faire du scp / sftp