User Tools

Site Tools


informatique:logiciels:ssh

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:logiciels:ssh [2024/07/27 16:04] – [Lister les options du ssh] côté client pteuinformatique:logiciels:ssh [2024/11/26 09:10] (current) – [SSH Keepalive] pteu
Line 421: Line 421:
 =====Connexion SSH via webproxy===== =====Connexion SSH via webproxy=====
  
-Pour se connecter en SSH à travers un proxy web, disons "proxy.corp" port "80" pour l'exemple, il faut ajouter l'option **ProxyCommand** à la commande de connexion : ''ssh -o "ProxyCommand=nc -X connect -x proxy.corp:80 %h %p" ssh-user@ssh-server''. Pour ne pas se fatiguer à le préciser à chaque fois, on peut l'ajouter à son ssh config :+Pour se connecter en SSH à travers un proxy web, disons "proxy.corp" port "80" pour l'exemple, il faut utiliser l'option **ProxyCommand** : ''ssh -o "ProxyCommand=nc -X connect -x proxy.corp:80 %h %p" ssh-user@ssh-server''. Pour ne pas se fatiguer à le préciser à chaque fois, on peut l'ajouter à son ssh config :
 <code bash ~/.ssh/config> <code bash ~/.ssh/config>
 Host ssh-server Host ssh-server
Line 430: Line 430:
  
 Depuis Windows il est plus facile d'utiliser le petit [[informatique:logiciels:putty|Putty]], en renseignant le menu Connection/Proxy (remplir le Proxy hostname et Port), il fera le taf tout seul. Depuis Windows il est plus facile d'utiliser le petit [[informatique:logiciels:putty|Putty]], en renseignant le menu Connection/Proxy (remplir le Proxy hostname et Port), il fera le taf tout seul.
 +
 +<WRAP center round important 80%>
 +Certaines versions de netcat (nc) ne possèdent pas l'option **-X** et provoquent l'erreur : ''/bin/nc: invalid option <nowiki>--</nowiki> 'X' ''
 +C'est le cas sous CentOS/Rocky Linux par exemple. On peut le contourner avec d'autres options :
 +<code bash>
 +ProxyCommand nc --proxy-type http --proxy proxy.corp:80 %h %p
 +</code>
 +</WRAP>
 +
  
 =====Connexion SSH par rebond===== =====Connexion SSH par rebond=====
Line 605: Line 614:
  
 Ces options peuvent se positionner dans le fichier de conf : **~/.ssh/config** pour ne pas avoir à les saisir à chaque fois. Ces options peuvent se positionner dans le fichier de conf : **~/.ssh/config** pour ne pas avoir à les saisir à chaque fois.
 +
 +=====Comment transmettre un quote en SSH=====
 +
 +C'est toujours une galère en informatique pour utiliser les caractères interprétés, que ça soit les parenthèses ''( )'', les guillemets ''"'' ou les apostrophes ''<nowiki>'</nowiki>''.
 +
 +Pour transmettre une apostrophe (ou simple quote en anglais) dans une commande SSH, on ne peut pas juste l'échapper (la préfixer par un ''\'') :
 +<code bash>
 +ssh serveur ls /tmp/fic\'.test
 +
 +bash: -c: ligne 1: fin de fichier (EOF) prématurée lors de la recherche du « ' » correspondant
 +</code>
 +
 +Il faut utiliser :
 +  * soit un triple backslash (on "double échappe" le quote) : ''<nowiki>\'</nowiki>'' -> ''<nowiki>\\\'</nowiki>''
 +  * un [[https://fr.wikipedia.org/wiki/Here_document|heredoc]], plus lisible (surtout quand il y a beaucoup de caractères spéciaux) :
 +<code bash>
 +ssh serveur <<END
 +ls /tmp/fic\'.test
 +END
 +
 +/tmp/fic'.test
 +</code>
 +
 +=====Notification sur Signal d'un login SSH=====
 +
 +Pour recevoir une notification lorsqu'un utilisateur se log en SSH sur un serveur, [[https://aussedatlo.me/posts/14-ssh-signal-notifications|voici un article]] qui décrit la mise en place de :
 +  * une ligne de configuration dans **pam.d** pour catcher l'événement login
 +  * un script générant le message de notification et l'appel REST vers...
 +  * un conteneur docker : [[https://github.com/bbernhard/signal-cli-rest-api|bbernhard/signal-cli-rest-api]] servant de passerelle vers Signal via une API REST
 +Ce dernier nécessite l’appairage avec un compte Signal existant.
 +
 +NB : j'ai rencontré des erreurs avec la version **signal-cli-rest-api:latest** actuelle (17/09/2024) de l'image docker, aussi [[https://github.com/bbernhard/signal-cli-rest-api/issues/564|sur recommandation de l'auteur bbernhard]] j'ai utilisé la version **0.167-dev**, qui génère une erreur mais envoie quand même le message ! En personnalisant également le réseau du conteneur, ça donne ce compose :
 +<code yaml docker-compose.yml>
 +version: "3"
 +services:
 +  signal-cli-rest-api:
 +#    image: bbernhard/signal-cli-rest-api:latest
 +    image: bbernhard/signal-cli-rest-api:0.167-dev
 +    container_name: signal-cli-rest-api
 +    networks:
 +      - br-sig
 +    environment:
 +      - MODE=native #supported modes: json-rpc, native, normal (by speed order)
 +    ports:
 +      - "8081:8080" #map docker port 8081 to host port 8080.
 +    volumes:
 +      - "../../data/signal-cli-rest-api:/home/.local/share/signal-cli"
 +
 +networks:
 +  br-sig:
 +    external: true
 +</code>
 +
 +Ce script basique :
 +<code bash /root/login.sh>
 +#!/bin/sh
 +# envoyer une notif signal lors d'un login
 +NUMBER="+336xxxxxxxx"
 +URL=http://localhost:8081
 +MESSAGE="New connexion by ${PAM_USER} on $(hostname -s)\nDate: $(date +"%d/%m/%Y %H:%M:%S"), Ip: ${PAM_RHOST}"
 +
 +if [ "$PAM_TYPE" != "close_session" ]; then
 +        curl -X POST -H "Content-Type: application/json" "${URL}/v2/send" \
 +                -d "{\"message\": \"${MESSAGE}\", \"number\": \"${NUMBER}\", \"recipients\": [ \"${NUMBER}\" ]}"&
 +fi
 +</code>
 +
 +Et ce "hook" (ajouter le ligne à la fin du fichier **/etc/pam.d/sshd**) :
 +<code bash /etc/pam.d/sshd>
 +session optional pam_exec.so seteuid /root/login.sh
 +</code>
 +
 +=====SSH Keepalive=====
 +
 +Afin d'éviter les coupures de connexion SSH, il est possible de définir des "keepalive", des messages vides envoyés à intervalles réguliers dans le but de détecter une coupure de connexion mais aussi d'éviter à celle-ci de tomber en timeout pour inactivité. On peut définir l'intervalle d'envoi de ces messages (AliveInterval) ainsi que le nombre de message que l'on peut perdre avant de considérer que la connexion est tombée (AliveCountMax).
 +
 +Cela peut se configurer côté client, dans le fichier **~/.ssh/config** pour une portée discrète (uniquement la connexion vers le serveur "serveur-ssh" ou dans le fichier **/etc/ssh/ssh_config** pour une portée globale (cela affectera toutes les connexions SSH) :
 +<code bash ~/.ssh/config>
 +Host serveur-ssh
 +   ServerAliveInterval 300
 +   ServerAliveCountMax 2
 +</code>
 +
 +Comme d'hab les paramètres peuvent aussi se définir au moment de la commande SSH avec l'option ''-o'' :
 +<code bash>
 +ssh -o ServerAliveInterval=300 -o ServerAliveCountMax=2 serveur-ssh   
 +</code>
 +
 +Côté serveur, cela se définit dans le fichier **/etc/ssh/sshd_config** ; c'est assez ressemblant, et cela affectera tous les clients :
 +<code bash /etc/ssh/sshd_config>
 +ClientAliveInterval 300
 +ClientAliveCountMax 2
 +</code>
 ====== Liens ====== ====== Liens ======
  
 [[http://people.via.ecp.fr/~alexis/formation-linux/export-display.html|formation Linux]] [[http://people.via.ecp.fr/~alexis/formation-linux/export-display.html|formation Linux]]
informatique/logiciels/ssh.1722096298.txt.gz · Last modified: 2024/07/27 16:04 by pteu