# SSH

<figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-2c30a46aee51171fc9062b60a47a1e99f0796eb0%2Fssh_cover.jpeg?alt=media" alt="" width="546"><figcaption></figcaption></figure>

Selamlar, bu yazıda SSH protokolününün ne olduğundan, nasıl çalıştığından, nasıl yapılandırıldığından ve nasıl kullanıldığından bahsedeceğim. Öncelikle SSH protokolünün ne olduğundan başlayalım.

## SSH nedir?

Türkçe karşılığı **Güvenli Soket Kabuğu** olan İngilizcedeki **Secure Socket Shell**'in baş harflerinden isimlendirilen SSH, kullanıcılara ağ üzerinden bir bilgisayara erişmenin güvenli yolunu sağlayan bir network (ağ) protokolüdür.\
\
SSH, güçlü bir parola veya key (anahtar) doğrulaması ile ağ üzerindeki iki bilgisayar arasında şifreli iletişimi sağlar. Genelde sistem yöneticileri tarafından sistemleri uzaktan yönetmek için kullanılır. Güvenli olmayan uzaktan bağlantı uygulamalarının yerini almak üzere oluşturulmuştur.

### SSH ne işe yarar?

* Uzak sistemlerde komut çalıştırmak
* Dosya aktarmak
* Ağlar arası tünel açmak

***

<figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-35c69d9f0d379cdef94e204a6207fa11b8c55cf8%2Fssh-client-server-communication.png?alt=media" alt="" width="563"><figcaption><p>SSH nasıl çalışır?</p></figcaption></figure>

### SSH nasıl çalışır?

SSH, bağlantının görüntülendiği SSH client (istemci) ile bağlantının çalıştırıldığı SSH server (sunucu) bağlantısını sağlayan **client-server** modelini kullanır. SSH, TCP/IP protokolleri ile çalışır.

{% hint style="info" %}
SSH server, bağlantı için varsayılan olarak 22 portunu dinler ve TCP protokolünü kullanır.
{% endhint %}

SSH güvenlidir çünkü **public key encryption** (açık anahtar şifrelemesi) ile şifreleme ve kimlik doğrulama kullanır. Public key encryption, verilerin anahtarla şifrelenmesi yöntemidir.\
\
Public key (açık anahtar) oluşturulur ve bu key SSH server tarafına kopyalanır. Bu işlemlerden sonra yapacağınız her SSH bağlantısında server ve client taraflarındaki public keyler karşılaştırılır ve parola girmeden bağlantı sağlanır. Bağlantı sağlandığında kullanıcı, uzaktaki sunucuda komut çalıştırabilir.

## SSH kurulumu ve yapılandırılması

Şimdi gelelim SSH kurulumuna, config dosyasının yapılandırılmasına ve bağlantının yapılmasına. Anlatırken **Ubuntu Server 22.04** sistemini kullanacağım.

Öncelikle aşağıdaki komut ile Ubuntu Server'da openssh-server kuralım.

```bash
sudo apt install openssh-server
```

openssh-server başarıyla kurulduktan sonra aşağıdaki komutu yazarak openssh-server'ın çalışma durumunu kontrol edebilirsiniz.

```bash
sudo service ssh status
```

<figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-5eb412693ca448450aaf0db180b9952400745eb0%2Fssh-status.jpg?alt=media" alt=""><figcaption></figcaption></figure>

Görselde aktif olduğunu görüyoruz. Eğer openssh-server aktif değilse `service ssh start` komutu ile aktif halde çalıştırabilirsiniz. SSH config üzerinde hiçbir yapılandırma yapmadan, varsayılan yapılandırma ile SSH bağlantısı yapabiliriz.

## SSH bağlantısı nasıl yapılır?

### IPv4 üzerinden parola ile SSH bağlantısı nasıl yapılır?

* SSH server IPv4 adresi: 10.10.67.102
* SSH client IPv4 adresi: 10.10.67.41

Client üzerinden bağlantı için komut kullanımı `ssh <user>@<host> -p <port>` şeklindedir. Komutu yazarak `ubuntu` kullanıcısı ile SSH sunucusuna `22` portundan SSH bağlantısı isteği gönderelim.

> Port belirtmezsek varsayılan olarak 22 portunu kullanır.

```bash
sudo ssh ubuntu@10.10.67.102 -p 22
```

```bash
root@mozlercelik:~# ssh ubuntu@10.10.67.102 -p 22
ubuntu@10.10.67.102's password: 
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-102-generic x86_64)
...
Last login: Thu Apr 11 20:59:33 2024 from 10.10.67.41
ubuntu@ubuntu:~$ 
```

Komutu yazdıktan sonra parola sordu ve `ubuntu` kullanıcının parolasını yazarak ssh bağlantısı yaptık.

### IPv6 üzerinden parola ile SSH bağlantısı nasıl yapılır?

* SSH server;\
  IPv6 adresi: fe80::20c:29ff:fed8:205c\
  interface: ens33
* SSH client;\
  IPv6 adresi: fe80::7883:fa7a:b0eb:5e0\
  interface: eth0

Client üzerinden bağlantı için komut kullanımı IPv4 bağlantısı için `ssh <user>@<host> -p <port>` şeklinde demiştik. Yine aynı formatta kullanacağız fakat IPv6 adresinin yanında `%` işareti ile interface belirtmemiz gerekiyor. Yine `ubuntu` kullanıcısı ile SSH sunucusuna 22 portundan SSH bağlantı isteği gönderelim.

```bash
sudo ssh ubuntu@fe80::20c:29ff:fed8:205c%eth0 -p 22
```

```bash
root@mozlercelik:~# ssh ubuntu@fe80::20c:29ff:fed8:205c%eth0 -p 22
ubuntu@fe80::20c:29ff:fed8:205c%eth0's password: 
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-102-generic x86_64)
...
Last login: Thu Apr 11 21:29:35 2024 from fe80::7883:fa7a:b0eb:5e0%ens33
ubuntu@ubuntu:~$
```

Komutu yazdıktan sonra yine parola sordu ve `ubuntu` kullanıcının parolasını yazarak ssh bağlantısı yaptık.

### Public key ile SSH bağlantısı

Öncelikle client üzerinde key oluşturmamız lazım. Aşağıdaki komut ile public key oluşturabiliriz. Dosya ismi ve parola soracak, enter'a basarak varsayılan dosya ile boş parola girebiliriz.

```
ssh-keygen
```

Çıktı aşağıdaki gibi:

```bash
root@mozlercelik:~# ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:sESR7k3F7W+tS9sIAQr9//PcU3YYhYFa5VSsZ+1xcgc root@mozlercelik
The key's randomart image is:
+--[ED25519 256]--+
|      oo . . o+=.|
|     ...  o +oE o|
|     .+ ...+  .+.|
|     ..+.o... +.B|
|     ..oS . .. X+|
|      . .  . .+ *|
|            o..oo|
|             +o*.|
|              =+*|
+----[SHA256]-----+
```

Public key'imiz oluştu. Şimdi oluşan public key'imizi SSH server'a kopyalayalım. Aşağıdaki komut ile kopyalayabiliriz.

```
ssh-copy-id ubuntu@10.10.67.102
```

Oluşturduğumuz public key server'daki ubuntu kullanıcısı için kaydedilecek ve server'a ubuntu kullanıcısı ile parola kullanmadan bağlanabileceğiz. Yukarıdaki komutun çıktısı aşağıdaki gibi:

```bash
root@mozlercelik:~# ssh-copy-id ubuntu@10.10.67.102
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_ed25519.pub"
The authenticity of host '10.10.67.102 (10.10.67.102)' can't be established.
ED25519 key fingerprint is SHA256:ePx9uC5wDEjD0LTmE6xud8z5zKpLMR3wIOtgv8Qgnt8.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ubuntu@10.10.67.102's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ubuntu@10.10.67.102'"
and check to make sure that only the key(s) you wanted were added.
```

**ssh-copy-id** komutunu çalıştırdıktan sonra kopyalamak için parola sordu. Bağlanmaya çalıştığımız **ubuntu** kullanıcısının parolasını girdik ve kopyalama başarılı oldu. Hadi parola olmadan bağlanmayı deneyelim. `ssh ubuntu@10.10.67.102` komutunu çalıştıralım.

```
root@mozlercelik:~# ssh ubuntu@10.10.67.102
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-102-generic x86_64)
...
Last login: Thu Apr 11 21:01:11 2024 from 10.10.67.41
ubuntu@ubuntu:~$ 
```

Yukarıdaki çıktıda görüldüğü gibi parola sormadı ve direkt olarak bağlantı sağladık. Eğer oluşturduğunuz public key'i kopyalarken root kullanıcısı ile kopyalarsanız root ile parolasız bağlanabilirsiniz. Tabii ki öncelikle yapılandırmanızda root yetkileri ile bağlantıya izin vermelisiniz.

## SSH yapılandırması nasıl yapılır?

SSH server'da yapılandırma yapmak için sshd\_config dosyasını düzenlememiz lazım. Yapılandırma için `/etc/ssh/sshd_config` dosyasını açalım ve düzenleyelim.

```bash
sudo vi /etc/ssh/sshd_config
```

Birçok parametre var ben sadece en önemli gördüğüm parametrelerden bahsedeceğim.

<pre class="language-yaml"><code class="lang-yaml"><strong>...
</strong><strong>Match all
</strong><strong>Port 22
</strong>ListenAddress 0.0.0.0
ListenAddress ::
PermitRootLogin no
PasswordAuthentication no
AllowUsers ubuntu mozlercelik
AllowGroups ubuntu yavuzlar

Match User mozlercelik
PasswordAuthentication yes
...
</code></pre>

Dosyayı açık ve yukarıdaki parametreleri uyguladık. Bazı parametreler yorum satırı olabilir veya dosya içerisinde olmayabilir, sizin eklemeniz lazım.\
\
Dosyada değişlik yaptıktan sonra kaydedip dosyayı kapatalım. Değişikliklerin uygulanması için SSH servisini yeniden başlatmamız gerekiyor. Aşağıdaki komutu kullanarak SSH servisini yeniden başlatabilirsiniz.

```bash
service ssh restart
```

Eğer yanlış yapılandırma yapmadıysanız hatasız olarak yeniden başlatılacaktır. Aktiflik durumundan emin olmak için `service ssh status` komutunu kullanarak kontrol edebiliriz. Şimdi parametreleri yakından inceleyelim.

### Match

#### Match ...

Kullanıcıya özel yapılandırma yapmak için **Match** parametresi kullanılabilir. Eğer kullanılmazsa yapılandırmalar tüm kullanıcılar için geçerli olur. **Match all** parametresi altında yazılan parametreler tüm kullanıcılar, gruplar, hostlar vb. için geçerli olur. Kullanıcıya veya kullanıcılara özel parametre belirtmek için **Match User ...** parametresi kullanılır. Aynı zamanda gruplara özel yapılandırma da yapılabilir.\
Örnek kullanım:

```yaml
Match all
...
Match User mozlercelik
...
Match User ubuntu, mozlercelik
...
Match Group yavuzlar
...
```

### Port

#### Port ...

SSH bağlantısının hangi port üzerinden yapılacağını belirtiyoruz. Varsayılan olarak 22 ayarlanmıştır. Silinirse 22 portu üzerinden bağlantı yapılabilir.

### ListenAddress

#### ListenAddress \[hostname|address]:port

SSH bağlantısının hangi adres ve port üzerinden bağlantıları kabul edileceğini belirtmek için kullanılır.

{% hint style="info" %}

* IPv4 adresleri için tüm interface'ler üzerinden bağlantıların kabul edilmesi için **`0.0.0.0`**
* IPv6 adresleri için tüm interface'ler üzerinden gelen bağlantıların kabul edilmesi için **`::`** kullanılır.
  {% endhint %}

Bu parametreyi biraz daha detaylandıralım. SSH sunucusu üzerinde `ip addr show` komutunu çalıştıralım.

```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:d8:20:5b brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 10.10.67.102/24 brd 10.10.67.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed8:205d/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed8:205c/64 scope link 
       valid_lft forever preferred_lft forever
```

Komutu çalıştırdık ve sunucu üzerindeki interface'leri görüntüledik. Yukarıdaki interface ve IP adreslerine göre aşağıdaki kullanımları inceleyelim.

* `ListenAddress 10.10.67.102` şeklinde kullandığımızda sadece 10.10.67.102 adresi üzerinden bağlantı sağlanabilir.
* `ListenAddress fe80::20c:29ff:fed8:205c%ens33` şeklinde kullandığımızda sadece **ens33** interface'i üzerindeki **fe80::20c:29ff:fed8:205c** IPv6 adresi üzerinden bağlantı sağlanabilir.

Bu ayarlara göre IPv6 kullanarak sunucuya bağlanmaya çalışalım.

```bash
root@mozlercelik:~# ssh ubuntu@fe80::20c:29ff:fed8:205d%eth0
ssh: connect to host fe80::20c:29ff:fed8:205d%eth0 port 22: Connection refused
                                                                                                                                                                                                                
root@mozlercelik:~# ssh ubuntu@fe80::20c:29ff:fed8:205c%eth0
ubuntu@fe80::20c:29ff:fed8:205c%eth0's password: 
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-102-generic x86_64)

Last login: Thu Apr 11 20:00:34 2024 from fe80::7883:fa7a:b0eb:5e0%ens33
ubuntu@ubuntu:~$
```

Yukarıda görüldüğü gibi sadece ListenAddress parametresi ile verilen IPv6 adresi üzerinden bağlantı sağlayabiliyoruz. Diğer IPv6 adresi üzerinden bağlanmaya çalıştığımızda **Connection refused** hatası ile karşılaşıyoruz.

### PermitRootLogin

#### PermitRootLogin yes|no|prohibit-password|forced-commands-only

SSH üzerinden root yetkileriyle bağlantı yapılıp yapılamayacağı ayarlanır. Varsayılan olarak **prohibit-password** ayarlanmıştır.\
`yes` **-** root yetkileri ile SSH bağlantısını kabul eder.\
`no` **-** root yetkileri ile SSH bağlantılarını engeller.\
`prohibit-password` **-** root yetkileri ile parolalı bağlantı kurulamaz. Root yetkileriyle sadece public key ile bağlantı sağlanabilir.\
`forced-commands-only` **-** Public key kullanılarak root yetkileriyle bağlantı kurulabilir ve sadece **ForceCommand** parametresi ile verilen komutlar çalıştırılabilir.

### PasswordAuthentication

#### PasswordAuthentication no|yes

Parola ile SSH bağlantısı yapılıp yapılamayacağını belirtmek için kullanılır.\
`yes` **-** Kullanıcıların parola ile SSH bağlantısını kabul eder.\
`no` **-** Kullanıcıların parola ile SSH bağlantısı yapmasına izin vermez.

### AllowUsers

#### AllowUsers ...

SSH bağlantısına izin verilen kullanıcıları belirlemek için kullanılır. Boşluklarla ayırarak kullanıcılar belirtilir. Varsayılan olarak tüm kullanıcılarla bağlantı yapılmasına izin verilir. Örnek kullanım:

```yaml
AllowUsers ubuntu mozlercelik
```

Bu örnek kullanımda sadece `ubuntu` ve `mozlercelik` kullanıcılarının SSH ile bağlantı yapmasına izin verilmektedir.

### AllowGroups

#### AllowGroups ...

SSH bağlantısına izin verilen kullanıcı gruplarını belirlemek için kullanılır. Boşluklarla ayırarak gruplar belirtilir. Varsayılan olarak tüm gruplara ait kullanıcıların bağlantı yapılmasına izin verilir.

```yaml
AllowGroups ubuntu yavuzlar
```

Bu örnek kullanımda sadece `ubuntu` ve `yavuzlar` gruplarındaki kullanıcıların SSH ile bağlantı yapmasına izin verilmektedir.

***

<figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-11ff28b743b1242f86a52a015038d928e8fe6288%2Fssh-tunnel.jpg?alt=media" alt="" width="563"><figcaption><p>SSH tünelleme</p></figcaption></figure>

## SSH tünelleme nedir?

Client'ın direkt olarak erişemediği hedef makineye, başka bir makine üzerinden sanki aynı ağ üzerindeymiş gibi erişebilmesidir.\
\
Örnek olarak yukarıdaki görseli inceleyelim. Yukarıdaki sistem hakkında bildiklerimiz:

* **Client** makine internette
* **server 1,** **server 2** ve **database,** firewall arkasında kendi ağlarındalar.
* **Server 2** firewall üzerinden internete çıkabiliyor ve 22 portunda SSH servisi çalışıyor.

Bu senaryoda **client**, **server 1**'e 80 portundan erişmek istiyor. Bu bağlantı nasıl olabilir?\
**Client** ile **server 1** farklı ağlarda olduklarından bağlantı kurulamıyor. Bu sebeple **client**, **server 2** üzerinden SSH tünellemesi yaparak **server 1**'e erişebiliyor. **Server 1,** sadece kendi ağından gelen istekleri karşılayabiliyor ve tünelleme yapıldığında **server 1,** gelen paketin **server 2**'den geldiğini görüyor, gelen isteği karşılayabiliyor.

### SSH tünelleme nasıl yapılır?

<figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-a847ad2a7ff8d1a8799851c3bfe7fad1d11e8ba6%2Fssh-tunnel-schema.jpg?alt=media" alt="" width="563"><figcaption><p>Örnek topoloji</p></figcaption></figure>

Yukarıdaki simülasyon üzerinde örnek yapalım. Client makine yani bizim makinemiz ile 8000 portunda HTTP server çalıştıran sunucuya bağlantı kuralım. Aşağıda topoloji hakkında bilgiler mevcut:

* Client (biz):

  10.10.67.185
* Ara sunucu
  * interface 1

    10.10.67.102

    ssh/22 açık
  * interface 2\
    192.168.1.1
* Hedef sunucu\
  192.168.1.10\
  http/8000 açık

10.10.67.102 IP adresine sahip makineden hedef sunucuya istek atalım.

<div align="left"><figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-75c57609b76a78df986d45fbe299c96768f1171e%2Fssh-tunnel-1.png?alt=media" alt="" width="338"><figcaption></figcaption></figure></div>

Aynı ağda oldukları için iki makine haberleşebiliyor. Şimdi tünelleme yaparak client tarafından ulaşmaya çalışalım. Aşağıdaki komutu client üzerinde çalıştırıyoruz.

```bash
ssh -L 4444:192.168.1.10:8000 ubuntu@10.10.67.102
```

Yukarıdaki kodu parçalayıp inceleyelim.\
ssh -L dport:shost:sport user\@tunnelip

* **ssh:** SSH komutu.
* **-L:** client üzerinde hangi portta dinleyeceğimizi belirtiyoruz.
* **dport:** client üzerindeki port.
* **shost:** Hedef sunucu. Hangi sunucu ile iletişim kurmak istiyorsak onu yazıyoruz.
* **sport:** Hedef sunucu üzerinde iletişim kuracağımız port.
* **user:** Tünelleme yapacağımız ara sunucudaki kullanıcı adı.
* **tunnelip:** Tünelleme yapacağımız ara sunucunun adresi.

Yukarıdaki komuta göre client'ın 4444 portuna 192.168.1.10 IP adresine sahip sunucunun 8000 portunu bağladık. Client üzerinde 4444 portuna attığımız her istek hedef sunucunun 8000'in portuna gidecek ve dönen cevabı tünel üzerinden bize iletecek. Hadi deneyelim:

*Tünelleme yapmadan önce (client):*\
Tünelleme yapmadan önce client makinede 4444 portuna istek atıyoruz ve port üzerinde bir şey olmadığı için bağlanılamıyor.

<div align="left"><figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-5e3ac6efc1f1d17af49020548c39d1d12e4c3e6d%2Fssh-tunnel-3.png?alt=media" alt="" width="563"><figcaption><p>Tünelleme yapmadan önce client tarafından atılan istek.</p></figcaption></figure></div>

*Tünelleme yaptıktan sonra (client):*\
Açtığımız tünel sayesinde hedef makinedeki 8000 portuna client'ın 4444 portundan ulaşabilmeliyiz. Tünelleme yaptıktan sonra client makinede 4444 portuna istek atıyoruz ve aşağıdaki sonucu alıyoruz. En başta ara sunucu üzerinden attığımız isteğin sonucu ile aynı. Bu demek oluyor ki tünelleme başarılı olmuş ve tünel üzerinden erişim sağlayabiliyoruz.

<div align="left"><figure><img src="https://10693534-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpHJ8OuTO6xpfwqkn7vmg%2Fuploads%2Fgit-blob-c565ea639526c213a3ef188543ef34e28c31a6ea%2Fssh-tunnel-2.png?alt=media" alt="" width="420"><figcaption><p>Tünelleme yaptıktan sonra client tarafından atılan istek.</p></figcaption></figure></div>

\
Yazının sonuna geldin! Umarım yazdıklarım faydalı olmuştur.\
Saygılarımla,

<details>

<summary>Kaynaklar</summary>

sshd\_config için tüm parametreler ve açıklamaları: <https://man7.org/linux/man-pages/man5/sshd_config.5.html>\
ssh-keygen komutu için detaylı bilgi: <https://www.ssh.com/academy/ssh/keygen>

</details>

{% embed url="<https://github.com/mozlercelik>" %}
Bu yazı Mehmet Özler Çelik tarafından hazırlanmıştır.
{% endembed %}
