# Настройка SSH для VPS (Windows && Linux-WPS)

## Настройка под Windows.

Для настройки соединения у вас обязательно должен быть файл с приватным ключом и желательно с публичным тоже. В моем примере я использую ключи в формате ED25519, которые приходят сейчас на смену ключам RSA. На VPS вы сгенирировали файлы с ключами, в моем случае они назывались id\_ed25519 и id\_ed25519.pub, лучше их переименовать в виде id\_ed25519\_myproxy и id\_ed25519\_myproxy,pub. Если у вас имеется несколько серверов с различными ключами, то названия файлов будут различаться и подключение будет управляться через файл config.

Положите файлы в папку **C:\\Users\\\[your\_user\_name\]\\.ssh\\**, в той же папке создайте файл **config** без расширения примерно с таким содержанием:

```bash
Host myproxy
    HostName 11.22.33.44                   # IP-адрес или домен вашего VPS
    User root                              # Логин для подключения
    IdentityFile ~/.ssh/id_ed25519_myproxy # Путь к файлу ключа
    DynamicForward 0.0.0.0:1080            
    IdentitiesOnly yes
    SessionType none
    Port 22                                # Порт (если меняли стандартный)
  
```

Строка **DynamicForward 0.0.0.0:1080** это прямой аналог флага `-D 0.0.0.0:1080` в файле конфигурации. Он включает локальный SOCKS5-прокси на порту `1080` для всех сетевых интерфейсов (`0.0.0.0`), строка SessionType none это директива `RequestTTY no` которая аналогична флагу -N и позволяет не выполнять команды на удаленном сервере, а только держать туннель.

Запуск туннеля на ваш сервер будет теперь выполняться одной командой:

```
ssh myproxy

```

<div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C%2C-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82-%D0%BB%D0%B8" inline-copy-host=""><div class="" dir="">Проверить, открыт ли порт **1080** и слушаются ли на нем подключения, можно прямо из консоли Windows (Command Prompt / PowerShell) или из среды WSL.</div>  
<div class="" dir="">Ниже приведено несколько простых способов проверки работает ли соединение.</div>  
</div>#### Способ 1. Проверка через PowerShell (Windows) — *Самый удобный*

<div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%9E%D1%82%D0%BA%D1%80%D0%BE%D0%B9%D1%82%D0%B5-powershell-" inline-copy-host=""><div class="" dir="">Откройте **PowerShell** от имени администратора или обычного пользователя и выполните:</div>  
</div><div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-91 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQdQ" decode-data-ved="1" id="bkmrk-powershell" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-91"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-91"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-91 ng-star-inserted"><span class="ng-tns-c2111435165-91">PowerShell</span><div _ngcontent-ng-c2111435165="" class="buttons ng-tns-c2111435165-91 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
Get-NetTCPConnection -LocalPort 1080 -ErrorAction SilentlyContinue

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-91 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQdQ" decode-data-ved="1" id="bkmrk-" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-91"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-91"></div></div></div><div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%95%D1%81%D0%BB%D0%B8-%D0%BF%D0%BE%D1%80%D1%82-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82-%D0%B8-%D0%BF" inline-copy-host="">- <div class="" dir="">**Если порт открыт и прослушивается:** Команда выведет таблицу с состоянием подключения (`State: Listen`), а в колонке `OwningProcess` будет указан PID (идентификатор процесса, например, вашего `ssh.exe`).</div>
- <div class="" dir="">**Если порт закрыт:** Команда ничего не выведет (вернется пустая строка).</div>

</div>#### Способ 2. Классическая команда `netstat` (Windows CMD / PowerShell)

<div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%9E%D1%82%D0%BA%D1%80%D0%BE%D0%B9%D1%82%D0%B5-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D1%83%D1%8E-%D1%81" inline-copy-host=""><div class="" dir="">Откройте командную строку или PowerShell и выполните:</div>  
</div><div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-92 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQdg" decode-data-ved="1" id="bkmrk-dos" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-92"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-92"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-92 ng-star-inserted"><span class="ng-tns-c2111435165-92">DOS</span><div _ngcontent-ng-c2111435165="" class="buttons ng-tns-c2111435165-92 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
netstat -ano | findstr :1080

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-92 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQdg" decode-data-ved="1" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-92"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-92"></div></div></div><div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%9E%D0%B6%D0%B8%D0%B4%D0%B0%D0%B5%D0%BC%D1%8B%D0%B9-%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82-" inline-copy-host="">- <div class="" dir="">**Ожидаемый результат (порт открыт):**</div>  
    <div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-93 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQdw" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-93"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-93"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-93 ng-star-inserted"><span class="ng-tns-c2111435165-93">Plaintext</span><div _ngcontent-ng-c2111435165="" class="buttons ng-tns-c2111435165-93 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
    TCP    0.0.0.0:1080           0.0.0.0:0              LISTENING       1234
    
    ```
    
    <div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-93 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQdw" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-93"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-93"></div></div></div><div class="" dir="">*(Значение `LISTENING` означает, что SOCKS-туннель успешно поднят и ждет подключений, а `1234` в конце — это PID процесса SSH).*</div>
- <div class="" dir="">**Если порт закрыт:** Вывод будет абсолютно пустым.</div>

</div>#### Способ 3. Проверка через терминал WSL (Linux)

<div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%95%D1%81%D0%BB%D0%B8-%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D1%8C-%D0%B8%D0%BB%D0%B8-%D0%BF%D1%80%D0%BE" inline-copy-host=""><div class="" dir="">Если туннель или проверяемое приложение запущены внутри WSL, используйте стандартные утилиты Linux:</div>  
</div><div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-94 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQeA" decode-data-ved="1" id="bkmrk-bash" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-94"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-94"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-94 ng-star-inserted"><span class="ng-tns-c2111435165-94">Bash</span><div _ngcontent-ng-c2111435165="" class="buttons ng-tns-c2111435165-94 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
# Через ss (современный аналог netstat)
ss -tulpn | grep 1080

# Или через классический netstat
netstat -tulpn | grep 1080

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-94 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQeA" decode-data-ved="1" id="bkmrk--2" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-94"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-94"></div></div></div><div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk--3" inline-copy-host=""></div>#### Способ 4. Экспресс-проверка подключения (Test-NetConnection)

<div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%95%D1%81%D0%BB%D0%B8-%D0%B2%D1%8B-%D1%85%D0%BE%D1%82%D0%B8%D1%82%D0%B5-%D1%83%D0%B1%D0%B5%D0%B4%D0%B8" inline-copy-host=""><div class="" dir="">Если вы хотите убедиться, что порт не просто открыт, а к нему действительно можно успешно подключиться локально (например, со стороны браузера или приложения):</div>  
</div><div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-95 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQeQ" decode-data-ved="1" id="bkmrk-powershell-1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-95"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-95"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-95 ng-star-inserted"><span class="ng-tns-c2111435165-95">PowerShell</span><div _ngcontent-ng-c2111435165="" class="buttons ng-tns-c2111435165-95 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
Test-NetConnection -ComputerName 127.0.0.1 -Port 1080

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-95 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQeQ" decode-data-ved="1" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-95"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-95"></div></div></div><div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk-%D0%92-%D0%BE%D1%82%D0%B2%D0%B5%D1%82-%D0%B2%D1%8B-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D0%B5-" inline-copy-host=""><div class="" dir="">В ответ вы получите отчет. Обратите внимание на нижнюю строку:</div>  
- <div class="" dir="">`TcpTestSucceeded : True` — порт открыт и принимает соединения.</div>
- <div class="" dir="">`TcpTestSucceeded : False` — порт закрыт (SSH-туннель не запущен или упал).</div>

</div>> <div class="" dir="">**Узнать, какая программа заняла порт:**</div><div class="" dir="">Если порт 1080 занят, но вы не уверены, чем именно, узнайте PID из команды `netstat` (последнее число в строке) и выполните в PowerShell:</div><div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-96 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwi6k8jGoo6WAxUAAAAAHQAAAAAQeg" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_196d036afd43e43b","c_e95c9efc50ee6e3f",null,"rc_b0d5dfbf42033120",null,null,"sr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-96"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-96"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-96 ng-star-inserted"><span class="ng-tns-c2111435165-96">PowerShell</span></div></div></div></div>```
> Get-Process -Id <PID>
> 
> ```

<div _ngcontent-ng-c1365522812="" aria-busy="false" aria-live="off" class="markdown markdown-main-panel md-content enable-luminous-fast-follows enable-updated-hr-color" dir="ltr" id="bkmrk--5" inline-copy-host=""></div>