Control linux from windows

Перекрестное опыление: управляем Linux из-под Windows, и наоборот

В прошлой статье я обещал рассмотреть механизм удаленного подключения с 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:

Для подключения к Windows-машинам при помощи PowerShell используется протокол WS-Man. Для GNU\Linux привычен SSH. Так как сегодня становятся универсальными оба протокола, разберем их подробнее.

PowerShell 6.0 под Windows и *nix, пока еще находится в бете. Поэтому не рекомендую без хорошего тестирования применять на боевых серверах описанное ниже.

Магомед не идет к горе

Когда технология удаленного доступа при помощи PowerShell только набирала обороты, единственным универсальным способом подключения к разным системам был протокол WS-Man. Для тестового стенда я взял Windows Server 2016 и Centos 7, для которых и буду настраивать возможность удаленного подключения и выполнения команд при помощи этого протокола.

Для начала установим на Centos свежий PowerShell:

После установки появилась возможность запускать привычные 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 командой:

Далее нужно настроить порты и аутентификацию в конфигурационном файле /etc/opt/omi/conf/omiserver.conf, после чего перезапустить сервер командой:

Для упрощения эксперимента я не буду настраивать ни NTLM-аутентификацию, ни Kerberos. Еще и шифрование отключу ― разумеется, в боевой среде делать этого не стоит. Для включения текстовой аутентификации и шифрования на стороне Windows в работе winrm достаточно выполнить следующие команды:

Читайте также:  Как перенести home linux

После настройки можно проверить работу OMI из консоли Windows:


Подключаемся к CentOS из cmd.

Теперь проверим работу обратным подключением ― из Linux к Windows:


… а затем с CentOS подключаемся к Windows.

После того, как WMI\OMI заработал, нужно установить и настроить PSRP. К сожалению и вопреки инструкции, бинарник отсутствует. Библиотеку пришлось компилировать, долго и нудно исправляя возникающие ошибки зависимостей:

Теперь мы сможем подключаться с Windows на Linux и наоборот при помощи PowerShell. Начнем с Windows на Linux:


С Windows на Linux.

Аналогичным образом можно провести и обратное подключение.

Invoke-Command можно «натравить» на список компьютеров, и с рабочей станции Windows создать пользователя на всех серверах Linux командой вида:

Надо сказать, что способ не самый удобный и эффективный. Минусов добавляет компиляция библиотек, разнообразные баги ― например, на момент написания статьи PSRP не позволял нормально подключиться из Linux в Windows.

Да и сами разработчики рекомендуют не плясать вокруг WS-Man, а обратиться к проверенному способу ― SSH. Что ж, попробуем и его.

Гора идет к Магомету

На этот раз машина с Windows получит чуть больше специфической подготовки ― нужно установить свежий PowerShell и OpenSSH.

После можно проверить синтаксис командлета New-PSSession. Если все произошло как надо, то командлет, помимо привычного параметра ComputerName, будет поддерживать и HostName.


PowerShell 6.0.0-beta.9 и обновленный синтаксис командлета.

Качаем последний релиз или используем пакет из репозитория Chocolatey. Все это разархивируем в \Program Files\OpenSSH.

В консоли с правами администратора переходим в папку с разархивированным содержимым и запускаем установку командой:

Теперь генерируем ключи:

В тестовой среде мы будем использовать парольную аутентификацию, поэтому стоит убедиться что она включена в файле sshd_config:

Если вы также хотите автоматически запускать PowerShell при подключении по SSH, то в параметре subsystem нужно прописать путь к желаемой версии PS:

Для работы клиента SSH нужно добавить директорию в %PATH% любым удобным способом. Например, таким:

Остается только настроить и запустить службы:

После установки уже можно наслаждаться подключением к серверу Windows по ssh.


C Windows через Putty на Linux, с Linux обратно на Windows по SSH.

На достигнутом останавливаться не будем и перейдем к настройке Linux. При настройке сервера SSH по умолчанию достаточно прописать PowerShell в Subsystem:

Теперь проверим подключение через командлет New-PSSession и Invoke-Command.


Работаем из PowerShell с Linux-сервером.

Теперь подключимся из Linux к Windows:


Работаем из PowerShell с Windows-сервером.

В отличие от WS-Man, SSH настраивается намного проще и работает стабильнее. Да и беспарольное подключение по ключам настраивать привычнее.

В хозяйстве пригодится

С однозначным «советом потребителю» все опять сложно: SSH проще в настройке и стабильнее, но WS-Man использует API и позволяет применять инструменты вроде JEA. На боевых серверах использовать WS-Man я бы не стал однозначно, а вот реализация OpenSSH в Windows как сервера, так и клиента мне понравилась. Для самопальной автоматизации вполне подойдет даже без PowerShell.

В любом случае, границы между Linux и Windows хоть и медленно, но начинают стираться, что безусловно радует.

Читайте также:  Посмотреть размер файла linux команда

Источник

How to remotely control Linux Systems from Windows

Why establish a remote connection to Linux from Windows?

Suppose you are running a business, and you have a meeting with board members in about 10 minutes. All of a sudden, you remember that your presentation file is on your home system; remote access can potentially save the day.

Or you are running a windows system in one location and your Linux system in another room, and you want to run some commands on your Linux or retrieve some files from your Linux, and your Linux is inaccessible, or you are just too lazy. Either way, in all cases, remote access provides great convenience and saves much time.

Linux Ubuntu:

Now out of all the popular Linux distros, Ubuntu is by far the most popular one. All of the other Linux distros combined make up a total of a mere 35% of Ubuntu (google search trends). Upon searching Linux, 161 million results appear, while the next most popular Linux distros i.e., the Debian Linux, has a mere 65.9 million search results, so keeping in mind the above stats, I will be using Ubuntu for this tutorial. To establish the connection, you would need to access the Ubuntu machine physically. But don’t worry, this is a one-time thing.

There are many methods through which you can remotely access your Linux from windows. Here I will be sharing three ways through which you can access remotely control Linux Systems from Windows.

Find the IP address:

Regardless of what method you use, finding the IP address of your system is required almost in every case. Following is an easy way to find the IP of your Linux system.

Go to the terminal in your Linux machine and type the following command:

Now enter the following command:

After writing the above command, your terminal window will look like this

You will find your IP address next to “inet” in the first section. In this case, as you can see from the above screenshot, the IP address is “10.0.2.15”

If the method mentioned above doesn’t work for you, you can try the following ways:

In the terminal, write the following command. Remember, this works for some of the Linux versions like Ubuntu.

Method 1:Remote Access using SSH (Secure Shell)

For this method, you should install the PuTTY software, as it’s better than using windows default SSH function. PuTTY establishes an SSH connection between your Linux and your Windows desktop, which gives you access to the Linux terminal.

After Installing the PuTTY software write the name of your Linux system, or it’s IP address under the “Host Name (or IP address)” label. Make sure to set the connection to SSH if it isn’t. Now click open. And voila, you now have access to the Linux command line.

Note: This will give only you access to the terminal, i.e., there will be no mouse control. Still, this is useful to install software using Terminal commands

Читайте также:  Как удалить рабочую группу windows

Method 2:Using RDP (Remote Desktop Protocol)

RDP is the easiest method so far. The RDP tool is already installed in the windows. So the windows system doesn’t require any work (software-wise). However, this is not the case for your Linux system. On your Linux system, you will need to install XRDP tool. For this open the terminal (Ctrl+ Alt+ T) and type the following command

Press “y” and hit enter. It will then continue to install.

The first command will install the XRDP tool. The second command will allow the auto-enable on startup option. In other words, the xrdp tool will automatically start when the Linux boots. After this process completes. Go to your windows system and in search bar type “RDP.” Click on the “Remote Desktop App.”

Type the IP address of your Linux system adjacent to the “Computer ” label, and click connect

Enter the Username and the Password of your Linux system.

TroubleShooting: Although connecting through RDP is the easiest method for remote connecting, some problems occur during connecting with Ubuntu. This started happening after the Ubuntu 18.4 LTS release. Linux doesn’t like it when it is accessed remotely when the user is logged in. So a simple solution is to try RDP after logging out of your Linux

Method 3:Setting up a connection using Virtual Network Connection (VNC)

You can also connect using VNC. As mention above, SSH provides access to the terminal (no mouse control). VNC provides access to the Linux desktop (full mouse control). However, there is some prerequisite for connecting using this method, i.e., you have to install some VNC software.

Go to your Linux system and type the following command to make sure it’s up to date

Now input the following command

Now create a password for your connection. You will be given a desktop number, mostly 1. Remember this number.

After this, install the VNC client on windows. These TightVNC tools are installed in bundles, so once installed, go to the windows search bar and search “TightVNC Viewer. “ Launch the app and enter the IP address of the Linux device.

Now enter the IP of your Linux system followed by the desktop number, as shown in the above screenshot.

Conclusion:

Now that you know these methods, you should know which way is best for your use.

  1. RDP uses xrdp which is open source
  2. SSH can be used to remote access the terminal
  3. VNC can be used instead of RDP, but it’s a little less secure

It is recommended to set up SSH regardless of what method you use as it makes the installation for the other two methods much more easier.

Ubuntu has a built-in remote desktop tool, which is VNC-compatible.

About the author

Zeeman Memon

Hi there! I’m a Software Engineer by degree, Blogger by skills who loves to write about tech, develop websites & do SEO. You can reach out to me on LinkedIn.

Источник

Оцените статью