Both sides previous revisionPrevious revisionNext revision | Previous revision |
informatique:logiciels:ssh [2024/09/19 19:58] – [Notification sur Signal d'un login SSH] pteu | informatique:logiciels:ssh [2024/11/26 09:10] (current) – [SSH Keepalive] pteu |
---|
=====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 |
| |
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===== |
| |
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 : | 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 | * 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 script générant le message de notification et l'appel REST vers... |
* un conteneur docker : bbernhard/signal-cli-rest-api servant de passerelle vers signal via ne API REST | * 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 | 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 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 : | 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> | <code yaml docker-compose.yml> |
version: "3" | version: "3" |
- br-sig | - br-sig |
environment: | environment: |
- MODE=native #supported modes: json-rpc, native, normal | - MODE=native #supported modes: json-rpc, native, normal (by speed order) |
ports: | ports: |
- "8081:8080" #map docker port 8081 to host port 8080. | - "8081:8080" #map docker port 8081 to host port 8080. |
<code bash /root/login.sh> | <code bash /root/login.sh> |
#!/bin/sh | #!/bin/sh |
# adapté de : https://aussedatlo.me/posts/14-ssh-signal-notifications | |
# envoyer une notif signal lors d'un login | # envoyer une notif signal lors d'un login |
NUMBER="+336xxxxxxxx" | NUMBER="+336xxxxxxxx" |
URL=http://localhost:8081 | URL=http://localhost:8081 |
MESSAGE="New device connexion on $(date +"%d/%m/%Y %H:%M:%S")\nUser: ${PAM_USER} ; Ip: ${PAM_RHOST}" | 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 | if [ "$PAM_TYPE" != "close_session" ]; then |
</code> | </code> |
| |
Et ce "hook" (ajouter le ligne à la fin du fichier : | Et ce "hook" (ajouter le ligne à la fin du fichier **/etc/pam.d/sshd**) : |
<code bash /etc/pam.d/sshd> | <code bash /etc/pam.d/sshd> |
session optional pam_exec.so seteuid /root/login.sh | 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> | </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]] |