# Wysyłamy komendy po SSH z Asystenta Domowego

**URL:** <https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609>\
**Category:** konfiguracja\
**Created:** [3 Kwiecień 2021 22:18 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609 "2021-04-03T22:18:09Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [3 Kwiecień 2021 22:18 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/1 "2021-04-03T22:18:09Z")

</div>

Inspirację do założenia tego tematu dał @macek, przy okazji moich i @Cino111 [PYTAŃ](https://ai-speaker.discourse.group/t/integracja-komputera-za-pomoca-iot-link-ai-speaker-home-assistant/389/16) odnośnie możliwości sterowania z bramki komputerem z systemem Linux.  
Pojawiły się linki do ciekawych opcji korzystających z SSH oraz usługi w HA jaką jest `shell_command`.  
Na bramce mamy serwer i klienta SSH oraz usługę `ais_shell_command.execute_command`

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/1/1115d63f2fab31a2e2de25014c23c8020b64e202.png)

Dla chętnych, trochę wprowadzenia w temat:  
[SSH z HA do innego hosta (https://forum.arturhome.pl/t/ssh-z-ha-do-innego-hosta/476)](https://forum.arturhome.pl/t/ssh-z-ha-do-innego-hosta/476/6?u=angler)  
oraz  
[Running a shell command from Home Assistant to remote linux PC](https://community.home-assistant.io/t/running-a-shell-command-from-home-assistant-to-remote-linux-pc/135221/3)

Z zebranych informacji, udało mi się skutecznie dodać klucz SSH dla połączenia bramki z komputerem pod Linuxem.

> **[How To Use SSH and SSH Keys on Linux Mint - TechViewLeo](https://techviewleo.com/use-ssh-and-ssh-keys-on-linux-mint/)**
>
> SSH (secure shell) is a more secure way of accessing remote Linux systems. While working with Linux based systems, one would spend a lot of time on the

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/c/c83b39cd43c45d1705b2c6962dcb228163776810.png)

Wygenerowany na komputerze publiczny klucz SSH, dzięki linuxowej funkcji:

```auto
ssh-copy-id username@remote-user-IP

```

Zaimportowałem na bramkę do katalogu:

```auto
/data/data/pl.sviete.dom/files/home/.ssh/id_rsa.pub

```

@macek - **proszę o pomoc w prawidłowym napisaniu wsadu dla danych usługi** `ais_shell_command.execute_command` pod linuxowe komendy typu `shutdown -h now`.

Kolejnym krokiem będzie wykorzystanie funkcji:

> **[Command line Switch](https://www.home-assistant.io/integrations/switch.command_line/)**
>
> Instructions on how to have switches call command line commands.

---

<div class="post-metadata">

**Autor:** ![macek](https://yyz2.discourse-cdn.com/free1/user_avatar/ai-speaker.discourse.group/macek/32/4936_2.png) [@macek](https://ai-speaker.discourse.group/u/macek)\
**Data wpisu:** [4 Kwiecień 2021 07:37 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/2 "2021-04-04T07:37:41Z")

</div>

> [@Cezary.K](#):
>
> pod linuxowe komendy typu `shutdown -h now` .

Takie polecenie shutdown wymaga praw roota a zdalne wykonywanie połączenia ssh z uprawnieniami roota jest domyślnie w systemie blokowane ze względów bezpieczeństwa. Bez problemu da się jednak tak skonfigurować system aby bo funkcjonalnie i bezpiecznie.  
@Cezary.K dla potwierdzenia: chcesz z bramki AIS poprzez `platform: command_line` zrobić shutdown zdalnego linuxa?

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 09:41 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/3 "2021-04-04T09:41:51Z")

</div>

> [@macek](#):
>
> chcesz z bramki AIS poprzez `platform: command_line` zrobić shutdown zdalnego linuxa?

Tak - zdarza mi się pozostawić w warsztacie włączony komputer. Chciałbym móc go wyłączyć komendą z czystego lenistwa. Mógłbym podpiąć smart gniazdko i odcinać zasilanie ale w końcu to komputer a nie żelazko.

---

<div class="post-metadata">

**Autor:** ![sdsi](https://avatars.discourse-cdn.com/v4/letter/s/45deac/32.png) [@sdsi](https://ai-speaker.discourse.group/u/sdsi)\
**Data wpisu:** [4 Kwiecień 2021 09:46 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/4 "2021-04-04T09:46:04Z")

</div>

Przy okazji - jak bezpiecznie wyłączacie bramki (czasami może być taka rzadka potrzeba)? Bo shutdown nie działa; działa tylko halt a raczej to chyba nie jest ok… 🙂

---

<div class="post-metadata">

**Autor:** ![Stravi](https://avatars.discourse-cdn.com/v4/letter/s/e9c0ed/32.png) [@Stravi](https://ai-speaker.discourse.group/u/Stravi)\
**Data wpisu:** [4 Kwiecień 2021 10:25 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/5 "2021-04-04T10:25:03Z")

</div>

@Cezary.K co prawda nie używam AIS Command, tylko shell\_command, ale to pewnie działa tak samo:  
‘ssh [stravi@192.168.1.15](mailto:stravi@192.168.1.15) sudo mkdir testdir’

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 15:42 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/6 "2021-04-04T15:42:34Z")

</div>

> [@macek](#):
>
> Bez problemu da się jednak tak skonfigurować system aby bo funkcjonalnie i bezpiecznie.

Czy masz na myśli edycję tego pliku?

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/7/776cd5d5474be673915af18893fae7cca661c295.png)

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 15:43 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/7 "2021-04-04T15:43:48Z")

</div>

@Stravi - komendy takie jak podałeś działają. Jedyny problem jest w tym, że należy podawać za każdym razem hasło dla sudo.

---

<div class="post-metadata">

**Autor:** ![Stravi](https://avatars.discourse-cdn.com/v4/letter/s/e9c0ed/32.png) [@Stravi](https://ai-speaker.discourse.group/u/Stravi)\
**Data wpisu:** [4 Kwiecień 2021 15:57 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/8 "2021-04-04T15:57:03Z")

</div>

Oj to coś z kluczem masz nie tak.

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 16:01 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/9 "2021-04-04T16:01:27Z")

</div>

Klucz jest OK. Tak jak pisał @macek, komendy do powłoki systemu wymagają dostępu root, a taki jest wyłączony przy połączeniu SSH.  
Dodałem wiersz uprawniający użytkownika cezary, do wykonania bez podawania hasła, komendy `shutdown`  
Z konsoli bramki działa…

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/2/293b1f3a6f4b814128c37def2338df84eb22838d.png)

Teraz pozostaje usługa `ais_shell_command.execute_command`

Edit:  
Wpis w polu usługi działa `command: ssh cezary@192.168.2.52 sudo shutdown -r now`  
ale  
komputer się restartuje zamiast pozostać wyłączony… 🤔  
O co tu chodzi?

---

<div class="post-metadata">

**Autor:** ![Angust](https://yyz2.discourse-cdn.com/free1/user_avatar/ai-speaker.discourse.group/angust/32/4989_2.png) [@Angust](https://ai-speaker.discourse.group/u/Angust)\
**Data wpisu:** [4 Kwiecień 2021 17:58 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/10 "2021-04-04T17:58:07Z")

</div>

> [@Cezary.K](#):
>
> shutdown -r now

Użyj  
shutdown -h now

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 18:31 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/11 "2021-04-04T18:31:50Z")

</div>

@Angust - dzięki. Tak przypuszczałem, że popełniłem błąd z przedszkola Linux.  
Dziękuję wszystkim, za inspirację i podpowiedzi. Satysfakcja jest, ponieważ mam gotowy, działający przycisk dla bezpiecznego wyłączenia komputera 🥳

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/c/c694c66c1631bdd23344c280e1a5e0914c3ae3d1.png)

```auto
tap_action:
  action: call-service
  service: ais_shell_command.execute_command
  service_data:
    command: ssh cezary@192.168.2.52 sudo shutdown -h now
show_state: false
entity: input_boolean.wylacz_dell

```

---

<div class="post-metadata">

**Autor:** ![macek](https://yyz2.discourse-cdn.com/free1/user_avatar/ai-speaker.discourse.group/macek/32/4936_2.png) [@macek](https://ai-speaker.discourse.group/u/macek)\
**Data wpisu:** [4 Kwiecień 2021 18:36 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/12 "2021-04-04T18:36:21Z")

</div>

> [@Cezary.K](#):
>
> działający przycisk dla wyłączenia komputera

Zrob z tego ~~sensor~~ `switch` i dopisz włączanie ON komputera przez Wake On LAN 😉

Update: moja pomyłka, chodziło o `switch`.

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 18:43 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/13 "2021-04-04T18:43:22Z")

</div>

> [@macek](#):
>
> Zrob z tego sensora

Sensor - czego?  
Czy masz na myśli wykorzystanie połączenia LAN do badania stanu ON / OFF?  
Ten komputer używam jako roboczy, warsztatowy desktop. Więc włączanie przez WOL nie jest mi do niczego potrzebne (na ten moment). Zwłaszcza, ze pod Linux uruchamia się w 3s (no może do 6-9s z przywracaniem kart przeglądarki).  
W tej kwestii pozostawię temat otwarty dla innych…

---

<div class="post-metadata">

**Autor:** ![Stravi](https://avatars.discourse-cdn.com/v4/letter/s/e9c0ed/32.png) [@Stravi](https://ai-speaker.discourse.group/u/Stravi)\
**Data wpisu:** [4 Kwiecień 2021 18:58 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/14 "2021-04-04T18:58:07Z")

</div>

Pewnie chodzi nie o sensor tylko switch. Resztę rozpracowałem odpowiednio 🙂  
Jakby ktoś szukał to pod turn\_on i pod turn\_off w pliku konfiguracyjnym switch’a trzeba podać odpowiednie wywołania serwisów (które można przetestować za pomocą narzędzi deweloperskich).

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [4 Kwiecień 2021 21:44 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/15 "2021-04-04T21:44:34Z")

</div>

To jedziemy z Wake on LAN pod Linuxem (Debian/Ubuntu/Mint).  
Czy ktoś podpowie jak na stałe ustawić `Wake-on: g` (czyli włączone) w `ethtool`?  
Dodam, że teoretycznie w BIOS Dell’a wszystko włączone. Po restarcie mam ponownie `Wake-on: d`.

```auto
cezary@cezary-OptiPlex-3020 ~> sudo ethtool enp2s0
Settings for enp2s0:
	Supported ports: [TP MII]
	Supported link modes: 10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes: 10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes: 10baseT/Half 10baseT/Full 
	                                     100baseT/Half 100baseT/Full 
	                                     1000baseT/Full 
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Port: MII
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: pumbg
	Wake-on: d
	Current message level: 0x00000033 (51)
			       drv probe ifdown ifup
	Link detected: yes
cezary@cezary-OptiPlex-3020 ~> sudo ethtool -s enp2s0 wol g
cezary@cezary-OptiPlex-3020 ~> sudo ethtool enp2s0
Settings for enp2s0:
	Supported ports: [TP MII]
	Supported link modes: 10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes: 10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes: 10baseT/Half 10baseT/Full 
	                                     100baseT/Half 100baseT/Full 
	                                     1000baseT/Full 
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Port: MII
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: pumbg
	Wake-on: g
	Current message level: 0x00000033 (51)
			       drv probe ifdown ifup
	Link detected: yes
cezary@cezary-OptiPlex-3020 ~> 

```

EDIT:  
Mam to…  
Dla Mint wykonałem dopisując usługę pod `systemctl`

```auto
[Unit]
Description=Wake-on-LAN (%i)
Requires=network.target
After=network.target

[Service]
ExecStart=/sbin/ethtool -s %i wol g
Type=oneshot

[Install]
WantedBy=multi-user.target

```

Po włączeniu usługi komendą `sudo systemctl enable wol@enp2s0` mam włączone domyślnie WoL po restarcie komputera.

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [5 Kwiecień 2021 08:12 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/16 "2021-04-05T08:12:29Z")

</div>

Po dodaniu w pliku konfiguracji wiersza `wake_on_lan:`, usługa `wake_on_lan.send_magic_packet` komputer włącza się.

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/2/252eba010df8d2fae287cab4736739fb52fd595d.png)

Dodałem wpis `switch` - lecz zdaje się nie działać. Przełącznik pokazuje ON - nawet gdy komputer wyłączony.  
W wierszu `host` wpisałem adres bramki, `broadcast_address` - podałem adres włączanego komputera.

```auto
wake_on_lan:
  
switch:
  - platform: wake_on_lan
    mac: "C8:1F:66:2B:EC:E1"
    name: "Dell"
    host: "192.168.2.192"
    broadcast_address: "192.168.2.52"

```

![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/8/8efeb78a819259f5c082cf97e4ed0dcda16ebe66.png)

Coś robię nie tak?  
@Stravi - jak mam już działające dwie usługi, to może podrzucisz konfigurację dla przełącznika na nich?  
Chciałem mieć jeszcze odczyt stanu ON/OFF komputera…

Mogę skorzystać z integracji z moim routerem i z niego wyciągnąć stan danego klienta:

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/d/d2c06579365bca91df79e3096c7674efbc21ecb7.png)

---

<div class="post-metadata">

**Autor:** ![Stravi](https://avatars.discourse-cdn.com/v4/letter/s/e9c0ed/32.png) [@Stravi](https://ai-speaker.discourse.group/u/Stravi)\
**Data wpisu:** [5 Kwiecień 2021 20:59 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/17 "2021-04-05T20:59:36Z")

</div>

Tak na sucho pisane bez testowania. Jutro możemy to dopracować 🙂

```
   switch:
      - platform: template
        switches:
          linux_pc:
            value_template: "{{ is_state('sensor.cezary_optiplex_3020', 'home') }}"
            turn_on:
              service: wake_on_lan.send_magic_packet
              data:
                mac: 'C8:1F:66:2B:EC:E1'
            turn_off:
              service: ais_shell_command.execute_command
              data:
                command: ssh cezary@192.168.2.52 sudo shutdown -h now
```

---

<div class="post-metadata">

**Autor:** ![Cezary.K](https://avatars.discourse-cdn.com/v4/letter/c/a88e4f/32.png) [@Cezary.K](https://ai-speaker.discourse.group/u/Cezary.K)\
**Data wpisu:** [6 Kwiecień 2021 20:26 UTC](https://ai-speaker.discourse.group/t/wysylamy-komendy-po-ssh-z-asystenta-domowego/1609/18 "2021-04-06T20:26:57Z")

</div>

@Stravi - dzięki wielkie, `turn_on` i `turn_off` działają super ale status z integracji z router’em Asus nie nadaje się… po prostu przy włączonej opcji WoL zawsze pokazuje `home` ponieważ połączenie LAN nie jest zrywane a karta czuwa. Pomyślę nad innym sensorem.

```auto
value_template: "{{ is_state('sensor.cezary_optiplex_3020', 'home') }}"

```

 ![obraz](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/2X/c/c2943c3ef8989fda20204d35b43fd26eed9e2d84.png)
