Функция удаленного взаимодействия PowerShell обычно использует WinRM для передачи данных. Теперь протокол SSH доступен на платформах Linux и Windows, что позволяет осуществлять многоплатформенное удаленное взаимодействие с PowerShell. Начиная с PowerShell 6 и выше можно работать по WinRM между Windows и Linux машинами, так-же можно работать непосредственно по SSH, при условии, что на Windows машине установлен SSH клиент.
На сегодня PS доступен в 7-ой версии для Windows, Linux, macOS платформ, последние версии доступны на ОФИЦИАЛЬНОЙ СТРАНИЦЕ POWERSHELL в GitHub. Сегодня рассмотрим несколько сценариев работы / подключения к Linux из PowerShell Windows, участники эксперимента:
- Windows Server 2016
- CentOS 7 + PSRP (WinRM)
- Ubuntu 18 (SSH)
- PowerShell (последний релиз, на сегодня 7.0.0)
Содержимое
- 0.1 Сценарии подключения
-
1 Сценарий 1
- 1.1 Установка последней версии PowerShell в Windows
- 1.2 Установка PowerShell в Linux
- 1.3 Установка PSRP в CentOS
- 1.4 Подключение PowerShell SSH (Windows > Linux)
- 1.5 Пример удаленного вызова команды
- 1.6 Удаленный запуск скриптов
- 1.7 Проблемы OMID SSL
-
2 Сценарий 2
- 2.1 Установка Windows SSH клиента
- 2.2 На стороне Linux
- 2.3 Подключение по SSH
- 2.4 Устранение ошибки A remote session might have ended.
- 2.5 Использование SSH клиента из командной строки
Сценарии подключения
- Использование PSRP (WinRM)
- Использование SSH клиента из Powershell (более лаконочиный и предпочитаемый сценарий)
Небольшое предисловие — это ознакомительная статья, использование PS на Linux проде, это хороший вопрос, который требуется хорошо обдумать, прежде, чем использовать. По ходу статьи будут приведены ссылки на те или иные материалы / аббревиатуры, так что будем считать, что вводная на используемые технологии дана в той или иной мере.
Сценарий 1
Использование OMI сервера, работа по WINRM (PSRP) (детали ниже).
Установка последней версии PowerShell в Windows
Устанавливается одной командой:
iex «& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI» |
После установки запускается командой (Ctrl +R):
Смотрим детали по установленному релизу PS:
Установка PowerShell в Linux
Устанавливается досточно просто, необходимо скопировать MS репо-конфиг из официального репозитория:
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/microsoft.repo |
Установить PowerShell:
Запустить командой:
Проверить версию:
Установка PSRP в CentOS
Что такое PSRP — PowerShell Remoting Protocol который используется в Открытой Инфраструктуре Управления (Open Management Infrastructure (OMI))
- Что такое PSRP
- Что такое OMI
В данном случае достаточно будет установить в наш CentOS — PSRP Server. Rpm пакет можно загрузить из официльного репозитория PSRP, в моем случае на момент написание статьи этот вариант так-же работоспособен:
yum install https://github.com/PowerShell/psl-omi-provider/releases/download/v1.4.1-28/psrp-1.4.1-28.universal.x64.rpm |
После установки в системе появляется и запускается новый system unit — omid:
systemctl status omid ● omid.service — OMI CIM Server Loaded: loaded (/usr/lib/systemd/system/omid.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020—04—19 09:18:08 EDT; 13min ago Process: 4558 ExecStart=/opt/omi/bin/omiserver —d (code=exited, status=0/SUCCESS) Process: 4457 ExecStartPre=/opt/omi/bin/support/installssllinks (code=exited, status=0/SUCCESS) ... |
Появляется новый листенер на порту 5986 (кто не знает, это WinRM):
×В моем случае используется IPv4 (по умолчанию OMI сервер использует IPv6, если он включен.
Разрешаем порт в firewalld:
firewall—cmd —permanent —add—port=5986/tcp |
Подключение PowerShell SSH (Windows > Linux)
Создаем объект для хранения SSH кред:
Объект с параметрами подключения:
$opt = New—PSSessionOption —SkipCACheck —SkipRevocationCheck —SkipCNCheck |
Подключаемся к Linux машине:
Enter—PSSession —ComputerName ‘xxx.xxx.xx.x’ —Credential $creds —Authentication basic —UseSSL —SessionOption $opt |
Пример удаленного вызова команды
Здесь подразумеваю Invoke-Command:
Invoke—Command —ComputerName xxx.xxx.xx.x —ScriptBlock { Get—Process } —Authentication Basic —SessionOption $opt —Credential $creds —UseSSL | Select—Object —First 5 |
Удаленный запуск скриптов
На стороне Windows можно создать скрипт и исполнить его на удаленной Linux машине, например PS скрипт, который отображает информацию о сетевых интерфейсах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function Get—IPConfig { [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | ForEach—Object { $ipProperties = $_.GetIPProperties() $addresses = $ipProperties.UnicastAddresses | Where—Object { $_.Address.AddressFamily —eq ‘InterNetwork’ } | ForEach—Object { «$($_.Address) $($_.IPv4Mask)» } $gateway = $ipProperties.GatewayAddresses.Address | Where—Object { $_.AddressFamily —eq ‘InterNetwork’ —and $_ —ne ‘0.0.0.0’ } [PSCustomObject]@{ Name = $_.Name Id = $_.Id Addresses = $addresses Gateway = $gateway } } | Where—Object { $_.Addresses } } Get—IPConfig |
Далее можно вызвать этот скрипт используя Invoke-Command:
Invoke—Command —ComputerName xxx.xxx.xx.x —FilePath ‘c:\test\get-linuxip.ps1’ —Authentication Basic —SessionOption $opt —Credential $creds —UseSS |
Проблемы OMID SSL
На одной из тестовых машин, во время подключения стало возникать сообщение о том, что срок действия сертификата истек, решение — перейти в каталог:
Создаем резервные копии, того, что есть:
mv omikey.pem omikey.pem.bak mv omi.pem omi.pem.bak mv ssl.cnf.pem ssl.cnf.bak |
В конфиг ssl.conf добавляем следующие параметры:
[ v3_req ] basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = DNS: Linux—Server—Name, IP:xxx.xxx.xx.x |
Генерируем SSL сертификаты:
openssl genrsa —out omikey.pem 2048 openssl req —new —key omikey.pem —out Request.csr —config ssl.cnf openssl x509 —req —days 365 —signkey omikey.pem —in Request.csr —out omi.pem —extensions v3_req —extfile ssl.cnf |
Перезапускаем omid:
Сценарий 2
Лаконичный, работоспособный сценарий для работы PowerShell через SSH клиента. Нет лишних телодвижений, единственное, после установки PowerShell в Linux необходимо будет добавить один параметр в sshd конфиг.
Установка Windows SSH клиента
В этом сценарии будет использоваться менеджер пакетов CHOCOLATELY, установить его можно следующим образом:
Set—ExecutionPolicy Bypass —Scope Process —Force; iex ((New—Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’)) |
Далее необходимо произвести несколько настроек:
$env:ChocolateyInstall = Convert—Path «$((Get-Command choco).Path)\..\..» |
Import—Module «$env:ChocolateyInstall\helpers\chocolateyProfile.psm1» |
Установить SSH клиент:
Обновить переменные окружения:
На стороне Linux
В данном случае, для разнообразия используется Ubuntu, здесь так-же необходимо установить PowerShell:
wget —q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb sudo dpkg —i packages—microsoft—prod.deb sudo apt—get update sudo add—apt—repository universe sudo apt—get install —y powershell |
×Детали по установке для различных дистрбутивов СМОТРИ НА ОФИЦИАЛЬНОМ САЙТЕ.
Добавить в:
nano /etc/ssh/sshd_config |
Параметр:
Subsystem powershell /usr/bin/pwsh —sshs —NoLogo —NoProfile |
Перезапустить sshd:
Подключение по SSH
На стороне Windows используя командлет Enter-PSSession тестируем подключение:
Enter—PSSession —HostName xxx.xxx.xx.x —UserName user |
Или можно создать сессию подключения:
$session = New—PSSession —HostName xxx.xxx.xxx.x —UserName user —SSHTransport |
Далее использовать ее по назначению:
Или вызвать команду:
Invoke—Command —Session $session —ScriptBlock { Get—Process } | Select—Object —First 5 |
Или скрипт:
Invoke—Command —Session $session —FilePath ‘c:\test\get-linuxip.ps1’ |
Устранение ошибки A remote session might have ended.
Возникает в момент подключения, выглядит следующим образом:
<pre class=«inline:true decode:1 « >Enter—PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended. |
Решается добавлением в ручную переменной окружения ssh:
Использование SSH клиента из командной строки
Использование ssh клиента, можно использовать из командной строки в рамках обычного ssh подключения:
Время на прочтение
6 мин
Количество просмотров 26K
В прошлой статье я обещал рассмотреть механизм удаленного подключения с Windows на серверы под управлением *nix, и наоборот при помощи PowerShell. Обещанного обычно ждут три года, но я успел чуть раньше. Что ж, если хочется с верного макбука управлять гетерогенной инфраструктурой, или наоборот ― с Surface Pro рулить Linux-серверами без всяких putty, ― прошу под кат.
Microsoft Loves Linux
Еще в 2015 году Microsoft торжественно объявила о запуске программы «Microsoft Linux». Сюда вошла как банальная поддержка гостевых *nix-like OS на Hyper-V, так и встроенная в Windows 10 Ubuntu и возможность запуска в Docker продуктов Microsoft, таких как SQL Server.
Компания также опубликовала исходный код PowerShell, что позволило запускать «Ракушку Мощи» не только на Windows. Из-под одноименного аккаунта на Github, помимо исходного кода, выложены и бинарники под большинство современных систем (лицензия MIT).
Это позволяет настроить удаленное управление с помощью единого инструмента ― PowerShell. Помимо подключения к консоли компьютера, можно запускать отдельные команды, в том числе и на нескольких серверах одновременно. Довольно удобно для автоматизации задач администрирования, таких как массовое изменение настроек, инвентаризация, сбор логов.
Порой удобно совмещать традиционные консольные команды со вставками PowerShell:
cat /etc/passwd | ConvertFrom-Csv -Delimiter ':' -Header Name,Passwd,UID,GID,Description,Home,Shell | Sort-Object Name | Format-Table
Для подключения к Windows-машинам при помощи PowerShell используется протокол WS-Man. Для GNU\Linux привычен SSH. Так как сегодня становятся универсальными оба протокола, разберем их подробнее.
PowerShell 6.0 под Windows и *nix, пока еще находится в бете. Поэтому не рекомендую без хорошего тестирования применять на боевых серверах описанное ниже.
Магомед не идет к горе
Когда технология удаленного доступа при помощи PowerShell только набирала обороты, единственным универсальным способом подключения к разным системам был протокол WS-Man. Для тестового стенда я взял Windows Server 2016 и Centos 7, для которых и буду настраивать возможность удаленного подключения и выполнения команд при помощи этого протокола.
Для начала установим на Centos свежий PowerShell:
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/microsoft.repo
yum install -y powershell
pwsh
После установки появилась возможность запускать привычные Windows-администратору командлеты. Например, посмотрим версию PS и получим список запущенных процессов командлетами $PSVersionTable и Get-Process:
Работаем в консоли PowerShell на CentOS.
Чтобы подключаться к Linux-машине с консоли Windows, нам понадобится установить и настроить:
- OMI (Open Management Infrastructure) ― адаптация WMI, которую также можно использовать для управления компьютерами с ОС, отличными от Windows;
- PSRP (PowerShell Remoting Protocol) ― библиотека, необходимая для удаленного подключения PowerShell.
Подробно с работой и эволюцией OMI и PSRP можно ознакомиться в отличном материале от Matt Wrock, я же просто установлю OMI командой:
yum install omi
Далее нужно настроить порты и аутентификацию в конфигурационном файле /etc/opt/omi/conf/omiserver.conf, после чего перезапустить сервер командой:
/opt/omi/bin/service_control restart
Для упрощения эксперимента я не буду настраивать ни NTLM-аутентификацию, ни Kerberos. Еще и шифрование отключу ― разумеется, в боевой среде делать этого не стоит. Для включения текстовой аутентификации и шифрования на стороне Windows в работе winrm достаточно выполнить следующие команды:
winrm set winrm/config/client/auth @{Basic="true"}
winrm set winrm/config/client @{AllowUnencrypted="true"}
winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
После настройки можно проверить работу OMI из консоли Windows:
winrm enumerate http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/OMI_Identify?__cimnamespace=root/omi -r:http://server:5985 -auth:Basic -u:root -p:"password" -skipcncheck -skipcacheck -encoding:utf-8 -unencrypted
Подключаемся к CentOS из cmd.
Теперь проверим работу обратным подключением ― из Linux к Windows:
/opt/omi/bin/omicli ei root/cimv2 Win32_Environment --auth Basic --hostname server -u username -p password --port 5985
… а затем с CentOS подключаемся к Windows.
После того, как WMI\OMI заработал, нужно установить и настроить PSRP. К сожалению и вопреки инструкции, бинарник отсутствует. Библиотеку пришлось компилировать, долго и нудно исправляя возникающие ошибки зависимостей:
yum groupinstall 'Development Tools'
yum install openssl-devel pam-devel
git clone --recursive [https://github.com/PowerShell/psl-omi-provider.git](https://github.com/PowerShell/psl-omi-provider.git)
cd psl-omi-provider/
make release
rpm -ihv target/Linux_ULINUX_1.0_x64_64_Release/psrp-1.4.1-0.universal.x64.rpm
Теперь мы сможем подключаться с Windows на Linux и наоборот при помощи PowerShell. Начнем с Windows на Linux:
$cred = Get-Credential
#пропустим проверку сертификата для нашей тестовой лаборатории
$o = New-PSSessionOption -SkipCACheck -SkipRevocationCheck -SkipCNCheck
#выполнение команды:
Invoke-Command -ComputerName server -ScriptBlock { Get-Process } -Authentication Basic -SessionOption $o -Credential $cred -UseSSL | Select-Object -First 5
#подключение к консоли
Enter-PSSession -ComputerName 'server' -Credential $cred -Authentication basic -UseSSL -SessionOption $o
С Windows на Linux.
Аналогичным образом можно провести и обратное подключение.
Invoke-Command можно «натравить» на список компьютеров, и с рабочей станции Windows создать пользователя на всех серверах Linux командой вида:
Invoke-Command -ComputerName server1,server2,server3 -ScriptBlock { adduser admin;echo admin:password | chpasswd
}
Надо сказать, что способ не самый удобный и эффективный. Минусов добавляет компиляция библиотек, разнообразные баги ― например, на момент написания статьи PSRP не позволял нормально подключиться из Linux в Windows.
Да и сами разработчики рекомендуют не плясать вокруг WS-Man, а обратиться к проверенному способу ― SSH. Что ж, попробуем и его.
Гора идет к Магомету
На этот раз машина с Windows получит чуть больше специфической подготовки ― нужно установить свежий PowerShell и OpenSSH.
После можно проверить синтаксис командлета New-PSSession. Если все произошло как надо, то командлет, помимо привычного параметра ComputerName, будет поддерживать и HostName.
PowerShell 6.0.0-beta.9 и обновленный синтаксис командлета.
Установка OpenSSH описана в отдельной инструкции.
Но под спойлером вы найдете все основные моменты.
Качаем последний релиз или используем пакет из репозитория Chocolatey. Все это разархивируем в \Program Files\OpenSSH.
В консоли с правами администратора переходим в папку с разархивированным содержимым и запускаем установку командой:
powershell -ExecutionPolicy Bypass -File install-sshd.ps1
Теперь генерируем ключи:
.\ssh-keygen.exe -A
.\FixHostFilePermissions.ps1 -Confirm:$false
В тестовой среде мы будем использовать парольную аутентификацию, поэтому стоит убедиться что она включена в файле sshd_config:
```bash
PasswordAuthentication yes
```
Если вы также хотите автоматически запускать PowerShell при подключении по SSH, то в параметре subsystem нужно прописать путь к желаемой версии PS:
Subsystem powershell C:/Program Files (x86)/PowerShell/6.0.0-beta.9/pwsh.exe -sshs -NoLogo -NoProfile
Для работы клиента SSH нужно добавить директорию в %PATH% любым удобным способом. Например, таким:
setx path "%path%;C:\Program Files\OpenSSH"
Остается только настроить и запустить службы:
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic
net start sshd
После установки уже можно наслаждаться подключением к серверу Windows по ssh.
C Windows через Putty на Linux, с Linux обратно на Windows по SSH.
На достигнутом останавливаться не будем и перейдем к настройке Linux. При настройке сервера SSH по умолчанию достаточно прописать PowerShell в Subsystem:
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile
Теперь проверим подключение через командлет New-PSSession и Invoke-Command.
Сначала Windows:
Работаем из PowerShell с Linux-сервером.
Теперь подключимся из Linux к Windows:
Работаем из PowerShell с Windows-сервером.
В отличие от WS-Man, SSH настраивается намного проще и работает стабильнее. Да и беспарольное подключение по ключам настраивать привычнее.
В хозяйстве пригодится
С однозначным «советом потребителю» все опять сложно: SSH проще в настройке и стабильнее, но WS-Man использует API и позволяет применять инструменты вроде JEA. На боевых серверах использовать WS-Man я бы не стал однозначно, а вот реализация OpenSSH в Windows как сервера, так и клиента мне понравилась. Для самопальной автоматизации вполне подойдет даже без PowerShell.
В любом случае, границы между Linux и Windows хоть и медленно, но начинают стираться, что безусловно радует.
Who can imagine 10 years ago that today SSH would work from Windows native program?
Most of us when we want to connect to a Linux Server use the SSH with an application like Putty to establish the connection.
Today we can use SSH in PowerShell to create an SSH connection between Windows and Linux ,Linux and Windows or Windows to Windows.
I will explain step by step how can use OpenSSH or SSH in PowerShell Remoting to create an SSH connection from Windows to Linux or Linux to Windows.
Prerequisites to use SSH in Powershell
Make sure that meet the prerequisites before trying to use ssh in PowerShell
- Windows 10 v1809 and later
- PowerShell v6+
- Open the Port 22 in your Firewall
How to use SSH with PowerShell in Windows
Th faster way to use SSH in PowerShell is to install the OpenSSH Client or Server in Windows/Linux.
Then you can establish an SSH connection from Windows to Linux and vice versa.
If you have Windows 10 v1809 and prior then you can read my article that explains step by step how can install the SSH Client in Windows 10.
How to install Open SSH in Windows 10 as Optional Feature
So let’s take it from the beginning and follow the steps
#Install the OpenSSH Server and OpenSSH Client in Centos
-
Run the following command to install the open SSH server and the open SSH client.
yum –y install OpenSSH-server OpenSSH-clients
- Now run the following commands to allow the sshd service to run automatically after a restart, and start the sshd service.
systemctl enable sshd
systemctl start sshd
By default after the installation finish successfully you can establish the connection with the password. But we can change it to use a public/private key which is more secure.
- For now let’s use the SSH with the password to test that all works fine.
- From the Windows machine open the PowerShell and write the command as ssh <username>@<ipaddress>
ssh root@192.168.37.8 - Type the password of the user and the connection will be established
If we don’t use the <username> then the local account of the machine trying to do the connection will be used by default.
#Create SSH Connection from Linux to Windows
If you would like to connect with SSH from a Linux machine to Windows you can read my article which describes step by step all the settings that need to be done in Windows.
How to install and configure Open SSH Server in Windows 10
How to use SSH over PowerShell Remoting
From PowerShell 6 and later SSH can be supported over PowerShell remoting which can use it on Windows or Linux as well.
SSH remoting will do basic PowerShell session between Windows and Linux.
In order to create an SSH connection over a PowerShell remoting you must use the following commands including the new parameter -Hostname instead of Computername.
- New-PSsession
- Enter-Pssession
- Invoke-command
The prerequisites to establish an SSH Connection over a Powershell Remoting is to install the Powershell 6 or higher and OpenSSH Client and Server to allow remote connection to and from the computer.
Note that if you want only to establish SSH connections from a specific machine you can install only the OpenSSH Client.
But if you want remote connection to and from the machines then you should install both(Server/client).
Let’s do a little practice
#How to Install PowerShell in Windows
You can use this single command in Windows Powershell to install the Powershell 7.
iex «& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI»
or you can download the msi package to install Manual.
You can find the links from Microsoft Docs Installing PowerShell on Windows
#How to Install PowerShell in Linux
You can use the following command to install the PowerShell 7 in Linux.
yum install -y powershell
Are you finish the PowerShell installation in your machines ?
Then continue with the following steps to establish the connection
- First of all you must configure the sshd_config in all machines that you would like to use SSH over Powershell remoting.
- So in linux type vi /etc/ssh/sshd_config
- Go at the end of the file and find the override default of no subsystems
- Add the following line
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile
- Restart the sshd service with the command
sysemctl restart sshd - Now login on the Windows machines that you have installed the powershell.
- Open the sshd_config. You will find it in C:\Programmdata\ssh
- Go at the end of the file and find the line #override default of no subsystems
- Add the line
Subsystem powershell pwsh.exe -sshs -NoLogo -NoProfile
- Restart the sshd service with the following command in Powershell
Restart-Service -Name sshd - Now that you have finished with the configuration it’s time to test the connectivity.
- From the Powershell 6 or 7 depends what you have install type the following command
New-PSsession -hostname <ip or computername> - As you can see with the parameter -Hostname the Transport is SSH
PowerShell is a multiplatform tool that you can use it with Windows and Linux.
You don’t need to use different tools to connect with SSH in Linux.
I hope my article helps you or explore something new or resolve a problem.
Have a nice weekend !!
I invite you to follow me on Twitter or Facebook. If you have any questions, send me an email at info@askme4tech.com
В мире ИТ существует уже довольно широкий спектр операционных систем, начиная с серверных, заканчивая операционными системами для мобильных устройств. В обычных пользовательских компьютерах и в серверах довольно часто используются две ОС — Linux и Windows. Поэтому очень часто возникают ситуации, когда приходится подключаться по сети из одной операционной системы к другой для выполнения разнообразных операций.
В этой статье мы рассмотрим варианты подключения к Linux из Windows. Существуют бесплатные и условно бесплатные утилиты вроде AnyDesk или TeamViewer, но установка их довольно тривиальна и не нуждается в дополнительном пояснении. Утилиты подобного рода обладают рядом ограничений при бесплатном некоммерческом использовании, либо их функциональность не удовлетворяет тем или иным потребностям пользователя. Мы рассмотрим полностью бесплатные способы как подключится к Linux из Windows.
Удалённый доступ к Linux с помощью VNC
На сегодняшний день самое популярное удаленное подключение к Linux из Windows, с использованием привычный в Windows графического интерфейса, является VNC (Virtual Network Computing) — утилита, использующая протокол RFB (Remote FrameBuffer — удалённый кадровый буфер). Управление осуществляется путём передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть.
В качестве сервера VNC в данном примере будет использоваться TightVNC, установленный в Ubuntu 20.04. Для установки сервера VNC необходимо выполнить ряд действий:
Шаг 1. Установка рабочей среды XFCE
Xfce — одна из самых легковесных рабочих сред, используемых в Linux, она будет быстро работать даже при слабом и нестабильном сетевом подключении. Установите её с помощью команд:
sudo apt update
sudo apt install xfce4 xfce4-goodies
Шаг 2. Установка TightVNC
Далее установите TightVNC:
sudo apt install tightvncserver
Шаг 3. Настройка пароля
Перед началом выполнения всех действий необходимо задать пароль пользователя VNC. Выполните команду:
vncpasswd
Вам будет предложено создать новый пароль, а также пароль только для просмотра. Откажитесь от второй опции:
Завершите процесс vncserver:
vncserver -kill :1
Шаг 4. Настройка скрипта запуска
Отредактируйте скрипт, который выполняется после запуска VNC-сервера:
nano ~/.vnc/xstartup
Он должен содержать такой текст:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
Сделайте файл исполняемым:
chmod +x ~/.vnc/xstartup
Шаг 5. Запуск VNC сервера
На этом этапе уже можно запустить VNC-сервер с помощью команды:
vncserver
Шаг 6. Подключение из Windows
Для того, чтобы подключиться из Windows к вашему Linux-серверу, используйте TightVNC Viewer.
Укажите IP-адрес компьютера, к которому нужно подключиться, и номер порта в поле Remote Host. В данном примере — 192.168.56.102::5901:
После того, как будет введён пароль, вы должны увидеть рабочий стол Xfce:
Шаг 8. Настройка systemd
Для того, чтобы запуск вашего VNC-сервера добавить в автозагрузку надо использовать systemd. Создайте новый файл сервиса systemd:
sudo nano /etc/systemd/system/vncserver@.service
Его содержимое должно быть следующим:
[Unit]
Description=Systemd VNC server startup script for Ubuntu 20.04
After=syslog.target network.target
[Service]
Type=forking
User=ubuntu
ExecStartPre=-/usr/bin/vncserver -kill :%i &> /dev/null
ExecStart=/usr/bin/vncserver -depth 24 -geometry 800x600 :%i
PIDFile=/home/ubuntu/.vnc/%H:%i.pid
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Измените имя пользователя ubuntu и рабочего каталога ubuntu на нужные вам значения. Если у вас запущен VNC-сервер, остановите его:
vncserver -kill :1
Сообщите systemd о появлении нового сервиса:
sudo systemctl daemon-reload
Добавьте запуск вашего нового сервиса в список автозагрузки:
sudo systemctl enable vncserver@1.service
Запустите VNC-сервер:
sudo systemctl start vncserver@1
Использование RDP для удалённого подключения
Помимо VNC, для управления Linux-сервером из Windows можно воспользоваться RDP (Remote Desktop Protocol). Для этого на компьютере с Ubuntu 20.04 установите утилиту xrdp:
sudo apt install xrdp
Для корректной работы сервиса необходимо добавить пользователя xrdp в группу ssl-cert:
sudo adduser xrdp ssl-cert
Установите Xfce:
sudo apt-get install xfce4
Добавьте Xfce в сессии RDP в качестве рабочего стола по умолчанию:
echo xfce4-session >~/.xsession
Перезапустите сервис xrdp:
sudo systemctl restart xrdp.service
Процедура подключения из Windows к Linux-серверу по протоколу RDP почти ничем не отличается от подключения к удалённым Windows-серверам. Введите IP-адрес сервера, логин и пароль пользователя в Linux:
Если всё сделано правильно, вы увидите рабочий стол Xfce:
Для подключения к компьютеру под управлением Linux по протоколу SSH из Windows можно воспользоваться PowerShell. Сначала становите OpenSSH Client, если ещё не установлен. Запустите на вашем компьютере PowerShell от имени администратора системы и выполните следующую команду:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Это необходимо для того, чтобы узнать текущую версию SSH-клиента. В данном примере доступна версия OpenSSH.Client-0.0.1.0. Установите OpenSSH.Client с помощью команды:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Для того, чтобы подключиться к устройству, на котором запущен SSH-сервер, необходимо ввести имя пользователя и IP-адрес. Команда для подключения по SSH используя PowerShell выглядит так:
ssh ubuntu@192.168.56.1
Здесь ubuntu — имя пользователя на удалённом компьютере, а 192.168.56.1 — IP-адрес Linux-сервера, на котором запущен демон SSH.
При первом подключении необходимо подтвердить использование специального персонального ключа для шифрованного соединения по SSH-протоколу (введите слово Yes), затем введите пароль пользователя (в данном случае для пользователя ubuntu):
Как видите, соединение прошло успешно. Теперь можно выполнять все команды так же, как если бы вы их выполняли используя стандартный Linux SSH-клиент:
Для завершения терминальной сессии на удалённом компьютере введите команду exit. Теперь вы знаете как выполняется подключение к Linux из Windows по SSH.
Использование Putty для подключения к Linux
Пожалуй, одним из самых популярных способов подключения к Linux из Windows является кроссплатформенная утилита Putty — небольшая по размерам, но очень часто незаменима для подключения по таким протоколам как SSH, Telnet, rlogin и даже с помощью последовательных портов.
Для обычного подключения к Linux-серверу по протоколу SSH достаточно в поле Host Name (or IP—address) указать его IP-адрес и нажать кнопку Open (в данном примере Linux-сервер имеет IP-адрес: 192.168.56.102):
При первом подключении Putty предупредит, что используется специальный ключ безопасности и его нужно добавить в доверенные хосты. Нажмите кнопку Да:
Далее нужно будет ввести логин и пароль. Если всё сделано правильно, запустится удалённая сессия терминала Linux:
Мало кто знает, что Putty позволяет запустить почти любое приложение, установленное на компьютере с Linux, по сети в Windows. Для этого на компьютере с Windows нужно установить собственный X-сервер. В данном примере воспользуемся Xming.
Скачайте Xming с официального сайта. Установка довольно тривиальная, поэтому не будем на ней останавливаться. Ничего не меняйте в процессе установки. Просто нажимайте кнопку Next до тех пор, пока программа не установится и не запустится:
Когда установка Xming завершится, откройте Putty и в настройках сессии для вашего подключения в разделе SSH -> X11 включите флажок напротив опции Enable X11 forwarding, а также, в строке Отображение дисплея X впишите значение localhost:0, после чего откройте сессию подключения с помощью кнопки Open:
В открывшемся терминале Putty введите консольное название программы, обладающей графическим интерфейсом. В данном примере введено название графического редактора drawing:
drawing &
(Знак & позволит запустить программу в фоновом режиме, в этом случае в окне Putty можно будет выполнять и другие команды):
Как видите, Linux-приложение drawing успешно запустилось по сети на X-сервере, установленном в Windows. С ним можно работать так же, как и с локальным приложением.
Выводы
Сегодня не существует слишком уж больших проблем для подключения к Linux из Windows. Способов существует довольно много. Каждый из них обладает своими достоинствами и недостатками, например, скорость работы VNC, да и других тоже, существенно зависит от скорости сетевого соединения. Существуют также программные средства, позволяющие подключаться к Linux-серверам используя мессенджеры или браузеры.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Secure Shell (SSH) is widely used for communicating with remote servers. SSH command is usually used in Linux and Unix-based systems. But we can use SSH in Windows with PowerShell.
Powershell is a command-line shell for scripting developed by the Microsoft team. As a powerful tool, you can install and integrate many services into PowerShell. You can use SSH in PowerShell by installing OpenSSH or with WSL (Linux Subsystem for Windows). You can connect to the remote server, transfer files and execute the command line directly in PowerShell.
In this blog post, I’ll discuss two different methods to use SSH in Windows PowerShell.
Table of Contents
1. Installing and Configuring OpenSSH in Powershell
OpenSSH is the most popular SSH client for connecting remote servers. Although It is the default SSH client in Linux and macOS, it does not provide an official client for the Windows operating system. But you can use SSH in Windows Powershell, all thanks to the PowerShell team, who tweak OpenSSH for Windows.
Download and Install OpenSSH
To use OpenSSH in PowerShell, download it from the Powershell GitHub release (https://github.com/PowerShell/Win32-OpenSSH/releases).
Choose OpenSSH-Win64 for a 64-bit operating system. After downloading the installer package, you can install it by double-clicking it. After installing
you can start using SSH in Windows PowerShell.
Configuring OpenSSH
You can configure OpenSSH on Windows Machine. There are two different configuring files for optimizing SSH connection. ssh_config
file for optimizing SSH client is located in %USERPROFILE%\.ssh\config
. You can open the configuration file with Notepad or Notepad++.
The server configuration file sshd_config
is located in C:\ProgramData\ssh\sshd_config
. You can also open this file in Notepad and Notepad++
2. Installing WSL in Powershell
Another way to use SSH in PowerShell is using SSH in WSL (Windows Subsystem for Linux). WSL is a compatibility layer for running Linux commands and applications on your Windows machine without using a virtual machine or Dual boot.
Before installing WSL on your Windows 10/11, ensure your system meets the minimum requirements.
- You are running Windows 10 version 1903 or later
- You have at least 4 GB of Ram
- You are using a 64-bit operating system
Install WSL2 on Windows 10/11
To install WSL on your Windows machine, open Windows PowerShell as administrator and enter the following command.
This command will install the latest version of Ubuntu on your Windows System. After installing WSL restart your computer to use WSL.
Install WSL With Specific Distribution
If you prefer Linux distribution, you have several options to choose from. To check available Linux distributions to choose from, enter the command in PowerShell.
This command will show you available Linux distributions you can install on your Windows system. WSL supports distributions such as Ubuntu, OpenSUSE, Kali, Debian, and Arch Linux.
wsl.exe --install <Distro>
This command will install your preferred Linux Distribution. After installing the distribution restart the Windows to start using WSL.
Use SSH in WSL Powershell
To use SSH in WSL, open Powershell, type wsl
, and hit enter to enter Linux Subsystem.
By default, OpenSSH is pre-installed in most distributions. But if OpenSSH is not installed in your distribution, you can install it easily.
For Ubuntu/Debian distribution, use the following command to install OpenSSH.
sudo apt-get update && sudo apt-get install openssh-server
For Arch Linux, use the following command to install OpenSSH.
Once you enter the subsystem, you can execute the Linux command in WSL. Use ssh
the command to use OpenSSH within WSL.
3. Establishing a Connection with SSH
Once you have installed SSH in PowerShell with either one of these methods, you can establish SSH connection to your remote server. To connect to your remote server, you can use the command.
- Replace
user
with your username and example.com with your public IP address.
Then enter your password to establish the connection. If you have a public/Private key, you can connect your remote server without a password. For this, enter the command.
- Replace the key file with your key file location.
- Use your username and public IP address.
4. Basic SSH Commands in PowerShell
Now that you have established SSH connection, you can use these commands in PowerShell to maximize your output.
SSH
ssh
command is used to establish a secure connection to a remote server. To connect your remote Linux server, you can use ssh followed by a username and IP address. For example, you can use this command
SCP
The scp
command is used to copy files between local and remote servers securely. This command tool comes with OpenSSH you installed in the previous step. To copy a file, you can use the command scp
followed by local_file, username, and Ip address. For example, you can use
For example, if you have a file name config.txt
, and you want to copy this file to your remote server location /opt/application/,
you can use the following command for this
SSH-Keygen
The ssh-keygen
command generates SSH key pair to connect to a remote server without a password. SSH keys are more secure than passwords as it is impossible to guess SSH keys. To generate an SSH key, just type
This command will create SSH public and private key pair. You can submit this key to a remote server to authenticate your SSH connection without a password.
These are a few basic SSH commands. You can use more advanced SSH commands in Windows PowerShell.
Conclusion
SSH in PowerShell is an effective way to connect your remote Linux server using the Windows operating system. I have discussed two ways to use SSH in PowerShell. Downloading and Installing the OpenSSH installer is recommended for most users as it is natively integrated with Powershell. At the same time, WSL is a good option if you need other Linux commands and applications and an SSH connection in Powershell.