Envoyer une commande en ssh

Bonsoir,
Je rencontre un problème avec l’envoi d’une commande SSH. En effet, j’ai bien configuré les clés pour la connexion sans mot de passe entre mon HAOS et un pc tournant sous Ubuntu. lorsque je saisis la ligne de commande dans le terminal SSH d’HAOS, cela fonctionne bien et éteins à distance le PC sous Ubuntu. J’essaye donc de créer un script pour pouvoir l’exécuter dans des automatisations mais cela ne fonctionne malheureusement pas.
J’ai créé un fichier eteindre_miroir.sh que j’ai mis dans /config/scripts avec les droits adéquats :

#!/bin/bash
/usr/bin/ssh -o StrictHostKeyChecking=no miroir@192.168.0.17 'sudo /sbin/poweroff'

Mon fichier configuration:

#Dossiers Scripts Scenes Templates
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
template: !include templates.yaml

# Eteindre Pc Miroir
shell_command:
  eteindre_miroir: '/bin/bash /config/scripts/eteindre_miroir.sh'

et enfin mon fichiers scripts.yaml:

#Script Extinction Miroir
eteindre_pc_miroir:
  alias: Extinction PC Miroir
  sequence:
  - service: shell_command.eteindre_miroir

J’ai aussi essayé `ssh -o StrictHostKeyChecking=no miroir@192.168.0.17 ‹ sudo /sbin/poweroff › dans mon fichier .sh mais cela ne fonctionne pas non plus.

si vous avez des pistes, je suis preneur.
En vous remerciant par avance,
`

Ma configuration


System Information

version core-2025.4.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.2
os_name Linux
os_version 6.12.23-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.5
Stage running
Available Repositories 1699
Downloaded Repositories 27
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 15.2
update_channel stable
supervisor_version supervisor-2025.04.1
agent_version 1.7.2
docker_version 28.0.4
disk_total 30.8 GB
disk_used 12.7 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (20.0.2), Cloudflared (5.2.13), Studio Code Server (5.19.2), File editor (5.8.0), InfluxDB (5.0.2), Mosquitto broker (6.5.0), MyElectricalData (0.13.2), Home Assistant Google Drive Backup (0.112.1), Frigate (0.15.1)
Dashboards
dashboards 2
resources 17
views 17
mode storage
MercedesME 2020
api_endpoint_reachable ok
websocket_connection_state connected
cars_connected 1
version v0.25.0
Network Configuration
adapters lo (disabled), enp0s18 (enabled, default, auto), hassio (disabled), docker0 (disabled), veth0079871 (disabled), vethe644fdc (disabled), veth421eb44 (disabled), veth72a71e1 (disabled), vethfcb2644 (disabled), vethdfa04c8 (disabled), veth3c3b196 (disabled), veth8c2a7cf (disabled), veth8fe45d9 (disabled), vethb803fce (disabled), vethec3495b (disabled), veth2911274 (disabled), veth9f8aa5d (disabled), vethce140e8 (disabled)
ipv4_addresses lo (127.0.0.1/8), enp0s18 (192.168.0.3/24), hassio (172.30.32.1/23), docker0 (172.30.232.1/23), veth0079871 (), vethe644fdc (), veth421eb44 (), veth72a71e1 (), vethfcb2644 (), vethdfa04c8 (), veth3c3b196 (), veth8c2a7cf (), veth8fe45d9 (), vethb803fce (), vethec3495b (), veth2911274 (), veth9f8aa5d (), vethce140e8 ()
ipv6_addresses lo (::1/128), enp0s18 (fe80::561c:d96d:cc27:a8d7/64), hassio (fe80::dc60:79ff:fe6f:876/64), docker0 (fe80::bcae:edff:feec:7f33/64), veth0079871 (fe80::4063:dbff:feea:9af5/64), vethe644fdc (fe80::44d9:1bff:fe7b:f706/64), veth421eb44 (fe80::ccb3:d8ff:fee1:e3a9/64), veth72a71e1 (fe80::c8ce:fff:feb2:28b/64), vethfcb2644 (fe80::50a2:dcff:fe8c:789d/64), vethdfa04c8 (fe80::6027:28ff:feab:8678/64), veth3c3b196 (fe80::386f:faff:fe2f:85f0/64), veth8c2a7cf (fe80::6833:a5ff:fe42:4987/64), veth8fe45d9 (fe80::b04f:64ff:fe48:5f79/64), vethb803fce (fe80::ac61:b8ff:fe58:1685/64), vethec3495b (fe80::4d9:2fff:fee6:305f/64), veth2911274 (fe80::407:72ff:fea5:545b/64), veth9f8aa5d (fe80::ec15:4eff:fecf:eaca/64), vethce140e8 (fe80::58c1:69ff:fe24:fbf5/64)
announce_addresses 192.168.0.3, fe80::561c:d96d:cc27:a8d7
Recorder
oldest_recorder_run 21 avril 2025 à 18:14
current_recorder_run 4 mai 2025 à 21:09
estimated_db_size 140.29 MiB
database_engine sqlite
database_version 3.48.0
___

Bonjour @cdr93
Essaye plutôt d’utiliser un command_line au lieu de shell_command

1 « J'aime »

Dans mon entrée shell_command

  • J ai indiqué où trouver la clé avec l option -i
  • Attention à ce que la commande sudo n’ utilise pas de MDP
1 « J'aime »

bonjour,
Merci pour vos réponses,
La commande sudo n’utilise pas de mot de passe. j’ai fait une modification dans visudo concernant l’utilisateur « miroir »: miroir ALL=(ALL) NOPASSWD: /sbin/poweroff

J’ai essayé diverses solutions en shell_command et en command_line mais je ne m’en sors pas.
Concernant command_line, j’ai cherché sur divers posts mais selon les dates de rédaction, la syntaxe n’est pas la même. J’imagine donc qu’il y a eu un changement chez HA.

Quelqu’un pourrait-il m’aiguiller sur la syntaxe à insérer dans le fichier YAML concernant l’une ou l’autre des solutions ?
Le plus fou c’est que saisi directement dans le terminal, cela fonctionne bien…
En vous remerciant par avance,

Salut @cdr93,

J’ai un petit NAS fait de Pi et OPENMediaVault.
Ce dernier est derrière une prise connectée.
Mais j’utilise un « shell_command » pour l’éteindre proprement.
J’ai donc un script qui arrête le NAS et ensuite coupe l’alimentation avec la prise connectée.
Le script et le Shell Command en question:

################################
####      Partie Script   ######
################################
script:

##############################################################
####    script qui arrête proprement le serveur NASGDX2   ####
##############################################################  
  stop_nasgdx2:
    alias: Arreter nasgdx2
    sequence:
    - service: shell_command.stop_nasgdx2
      data: {}
    - delay:
        seconds: 45
    - service: switch.turn_off
      data: {}
      target:
        entity_id: switch.plug_pilote_nas
    mode: single
    icon: mdi:server-network

############################################
####      Partie Ligne de commande    ######
############################################
shell_command:
  stop_nasgdx2: ssh -i /config/ssh_keys/id_rsa_core-ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no core-ssh@192.168.1.230 sudo shutdown

Cela fonctionne bien pour moi

Je ne sais pas si c’est fort différent pour attaquer une machine Ubuntu

1 « J'aime »

Voilà un exemple de mon command_line sur un pi distant, je ne suis pas sur place et ne peux pas vérifier mais il fonctionne en principe :sweat_smile: :

switch:
    name: "switchhdmi"
    command_on: "ssh -i /config/.ssh/id_rsa -o StrictHostKeyChecking=no -p 22 pi@192.168.1.32 'bash /home/pi/switchPI.sh'"
    command_off: "ssh -i /config/.ssh/id_rsa -o StrictHostKeyChecking=no -p 22 pi@192.168.1.32 'bash /home/pi/switchFP.sh'"
1 « J'aime »

Bonjour,
J’ai enfin réussi à solutionner mon problème.
Le problème venait du fait d’avoir crée les clés dans le dossier /.ssh au lieu de /config. :sweat:
Après ce changement, j’ai appliqué vos propositions et cela fonctionne:
Dans config.yaml:

#Eteindre Pc Miroir
shell_command:
  eteindre_miroir: 'ssh -i /config/id_rsa -o StrictHostKeyChecking=no miroir@192.168.0.17 "sudo /sbin/poweroff"'

dans le fichier script:

#Script Extinction Miroir
eteindre_miroir:
  alias: Éteindre le miroir
  sequence:
  - service: shell_command.eteindre_miroir
  mode: single

Merci beaucoup pour toutes vos pistes.
A bientôt pour de nouvelles aventures !!

1 « J'aime »

Ce sujet a été automatiquement fermé après 2 jours. Aucune réponse n’est permise dorénavant.