Secure Shell (SSH) is a widely used protocol for securely connecting to remote servers. If you’re using Windows to connect to a Linux server, there are several methods available.
In this guide, I’ll walk you through three popular methods on how to SSH from Windows to Linux: Bitvise, Putty, and the Windows Command Line.
Method 1: Bitvise SSH Client
This is my favorite method how to SSH from Windows to Linux!
1. Download and Install Bitvise SSH Client:
Visit the Bitvise official website and download the Bitvise SSH Client for Windows
Run the installer and follow the on-screen instructions to install the Bitvise SSH Client.
2. Launch Bitvise SSH Client:
Open Bitvise SSH Client after installation.
Enter the IP address or hostname of your Linux server in the Host field.
Specify the SSH port (default is 22).
3. Establish SSH Connection:
Click on the Login button to initiate the SSH connection.
If prompted, accept the server’s key fingerprint.
You are now connected to your Linux server via SSH using Bitvise.
Click New terminal console.
Method 2: Putty
1. Download and Install Putty:
Download Putty from the official website.
Run the installer and follow the installation instructions.
2. Launch Putty:
Open Putty after installation.
Enter the IP address or hostname of your Linux server in the Host Name field.
Specify the SSH port if it’s different from the default (22).
3. Configure Connection Settings:
In the left-hand menu, navigate to Connection > Data and enter your Linux username in the Auto-login username field.
Return to the Session category, enter a name for your session in the Saved Sessions field, and click Save for future use.
4. Establish SSH Connection:
Click on the Open button to initiate the SSH connection. Click Accept if you trust this host.
Enter your Linux username and password when prompted.
You are now connected to your Linux server via SSH using Putty.
Method 3: Windows Command Line (SSH Client)
1. Open Command Prompt:
Press Win + R, type cmd, and press Enter to open the Command Prompt.
2. Establish SSH Connection:
In the Command Prompt, type:
ssh username@your_linux_server_ip
Replace username with your Linux username and your_linux_server_ip with the IP address of your Linux server.
The authenticity of host ‘45.95.174.34 (45.95.174.34)’ can’t be established.
ED25519 key fingerprint is SHA256:O0AXF0Zw*******************tNQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? Enter Y
Please type ‘yes’, ‘no’ or the fingerprint: Enter yes
Warning: Permanently added ‘45.95.174.34’ (ED25519) to the list of known hosts.
[email protected]’s password: Enter your root password
What’s next?
After successfully connecting to your Linux server using one of the mentioned methods, there are several tasks you might want to perform. Here are some common actions you can take:
- Update and Upgrade Packages for your OS.
- Install and Configure Software (install control panels or setup mail servers).
- Transfer Files Between Your Windows.
- Security Measures (install firewall like UWF).
- Web Server Setup (install web server for website).
Conclusion
Now you know the three methods on how to SSH from Windows to Linux. It’s time to sip some coffee and start your Linux learning journey.
Connecting to a Linux server from a Windows machine via SSH can be achieved using various tools.
Each method offers a secure and reliable way to manage your Linux server remotely, allowing for efficient and streamlined system administration.
Introduction
In the business environment, remote networking capabilities are at the forefront of the workflow. Employees require the privilege of accessing the business system at any point in time. It means the network service providers must have an understanding of providing secure remote connectivity for their consumers. That is where the role of the secure shell (SSH). Network MSPs make this protocol instrumental for rendering remote administration functionalities like just logging into a work device from a different location to a more intricate procedure like using this SSH for secure tunnelling to dodge a firewall. Let us now take a look at what SSH is.
What Is SSH Protocol in Networking?
SSH stands for Secure Shell. It is a protocol that uses a secure method to perform network communication safely and securely. It helps in secure remote login in an unsecured network while connecting from one system to another. It has a significant collection of functionalities right from protecting transferred files, command execution, remote access in private network systems to automating various packet transporting processes securely. It acts as a reliable alternative to strong authentication. Also, it helps in preserving the integrity and security with robust encryption mechanisms.
The development of SSH was primarily to address the safety errors that Telnet has. Telnet is a non-protected remote login protocol with an insecure file transfer method. It was SSH-1 that came as a blessing for remote-communication operations with security. Later, SSH-1 got updated with SSH-2. The update strengthened this protocol and became a reliable cryptographic system of remote networking. Let us now understand the three different ways to use SSH on Windows to log in to Linux Server.
Methods to Use SSH on Windows
In this article, you will get to know the three different approaches to use SSH on Windows.
Windows 10’s Built-in SSH
It was back in 2015 when the team of Microsoft PowerShell decided to bring OpenSSH into Windows. They successfully ported it in Windows 10 (Fall Creator Update in 2017). It got enabled by default in April 2018’s update. Since then, Windows users can use the OpenSSH client without much difficulty. Here are the steps to use OpenSSH in Windows 10.
i. Open the PowerShell window (go to Start and search for «PowerShell») or command
prompt window (CMD) and run the ‘ssh’ command.
Let’s suppose you want to connect to another system having a private IP 192.168.0.78. You will have to write the command
ssh e2enetwork@192.168.0.78
ii. If you have connected this for the first time, it will prompt you with a host key to accept.
iii. Then enter the required password to log in. After logging in, you can execute your Linux
commands for performing administrative tasks.
iv. For logging out of the Linux system, type and execute the exit command. The other way
around is to press the shortcut Ctrl + D.
Use a Subsystem for Linux within Windows
You can also include a Windows subsystem to use SSH through Windows. Using the Windows Subsystem for Linux (WSL) will enable you to run all the native Linux commands directly on the Windows system. Through this procedure, WSL might use your system’s processing power because it will install and execute a Linux distro (without GUI, of course) on your Windows 10 desktop for making you use SSH. Microsoft developed WSL initially for web developers and those who want to work in open-source projects. Later, it became a popular command-line tool that not only supports using SSH but also other command-line tools such as Bash, awk, sed, etc. To use WSL within Windows, follow the steps –
i. Open Microsoft Store.
ii. Type WSL in the search box and hit enter.
iii. Select ‘Run Linux on Windows’ and install the distro of your choice. You will see different
Linux distros like (Ubuntu, OpenSUSE, Kali, Debian, etc.)
iv. Once you install the distro, go to the Control Panel and select Programs -> ‘Turn Windows
features on or off’. Tick the checkbox associated with ‘Windows Subsystem for Linux’ for
enabling this feature. It might ask for a restart.
v. To launch the Linux distro, go to the Start menu and search the name of your distro. If you
are doing this for the first time, it will ask you to create a username and set a password.
vi. Now connect to a Linux PC that runs on an SSH server.
Use Putty in Windows
Putty is a popular SSH client that existed before the advent of OpenSSH. Download Putty (https://www.putty.org/), and install it in your Windows system. After that, launch this application. Now, enter the IP address or hostname of the Linux system and press the ‘Open’ button to connect. Once you accept the host key, it will prompt you to enter your username and password.
Conclusion
We hope this article will help you get a clear understanding of how to use SSH in Windows OS. To perform a secure login into the Linux server from a Windows machine, you must know any of these three methods (shown above) to use SSH from Windows. E2E Cloud has this SSH feature included in the service.
SSH — это основной протокол для удаленного управления серверами на базе операционной системы Linux. Все действия при подключении к SSH выполняются в командной строке, но при достаточном уровне знаний и привилегий в системе там можно сделать практически все что угодно, в отличие от того же FTP где можно только передавать и редактировать файлы.
Если вы покупаете VPS сервер или продвинутый хостинг, обычно в письме вместе с другими данными авторизации есть данные доступа по SSH. В этой статье мы рассмотрим как подключиться по SSH к серверу из Linux или Windows.
Содержание статьи
- Что такое SSH?
- Как подключиться по SSH
- Выводы
Поскольку эта статья рассчитана именно на новичков, то перед тем, как перейти дальше давайте подробнее разберемся что из себя представляет SSH. Исторически так сложилось что на большинстве серверов используется операционная система Linux, во многом этому посодействовала ее бесплатность. Графический интерфейс на серверах Linux не используется для экономии ресурсов, поэтому единственным способом администрирования сервера остается командная строка.
Но это не является недостатком, потому что в командной строке Linux можно сделать больше чем графическом интерфейсе. Протокол SSH позволяет вам выполнять команды в удаленной системе так, как будто вы это делаете в своей системе. Вам доступен буфер обмена, вы вводите команды и можете использовать их вывод. Недоступны разве что файлы из вашей файловой системы. Например, когда вы подключитесь к серверу по SSH из Ubuntu, то все будет выглядеть так, как будто вы открыли терминал в своей системе.
Как подключиться по SSH
Для подключения по SSH нам необходимо знать такие данные:
- ip адрес сервера, к которому мы собираемся подключится;
- порт, на котором ожидает подключения SSH сервер, по умолчанию используется 22, но в целях безопасности порт подключения ssh часто изменяют;
- имя и пароль пользователя на удаленном сервере.
Больше ничего не нужно, обычно эти данные присылают в письме вместе с описанием VPS. Теперь перейдем к практике.
1. Подключение через SSH в Linux
В Linux подключение по SSH выполняется с помощью утилиты ssh. Мы более подробно рассматривали работу с ней в статье как пользоваться ssh. Для подключения к удаленному компьютеру ее синтаксис будет выглядеть следующим образом:
$ ssh имя_пользователя@айпи_адрес
Это самый простой вариант, если вам также нужно задать порт, используйте опцию -p:
$ ssh имя_пользователя@айпи_адрес -p порт
Чтобы выполнить подключение по SSH Linux нажмите Ctrl+Alt+T для открытия терминала и наберите команду, заменив нужные значения:
ssh sergiy@192.168.1.2
Или, с нестандартным портом:
ssh sergiy@192.168.1.2 -p 2223
Если ip_адрес и порт правильные, то на следующем шаге программа попросит у вас ввести пароль:
Если пытаетесь подключится через SSH к этому серверу первый раз, то утилита также попросит подтвердить добавление нового устройства в свой список известных устройств, здесь нужно набрать yes и нажать Enter:
Теперь вы подключены, и все вводимые далее команды будут выполнены на удаленном сервере:
Если же произошла ошибка и IP адрес или порт введены неверно, то вы получите ошибку Connection Refused:
Просто убедитесь что порт введен верно. Если это ваш сервер, то, возможно на нем еще нужно разрешить подключение SSH в брандмауэре. В Ubuntu/Debian для этого на удаленном сервере выполните:
sudo ufw allow 22/tcp
А в CentOS/Fedora:
firewall-cmd --permanent --zone=public --add-port=22/tcp
Если вы используете другой порт для SSH, то замените 22 на свой порт. Для удобства подключения по SSH в дальнейшем можно настроить авторизацию по ключу ssh, чтобы не вводить каждый раз пароль.
Теперь вы знаете как подключиться по ssh linux и решить проблемы с подключением. А теперь перейдем к Windows.
2. Подключение через SSH в Windows
Раньше подключение по SSH из Windows выполнялось только с помощью сторонних утилит, например PuTTY. Но в Windows 10 был добавлен встроенный OpenSSH клиент и работает он точно так же, как и в Linux. По умолчанию этот компонент не активирован. Для его установки откройте Параметры -> Приложения:
Затем выберите Управление дополнительными компонентами:
Здесь нажмите добавить новый компонент и в открывлемся меню выберите OpenSSH Client и нажмите Установить:
Дальше вернитесь назад и дождитесь завершения установки. После того, как SSH клиент будет установлен нужно обязательно перезагрузить компьютер.
После перезагрузки нажмите Win+R чтобы открыть окно запуска команд и наберите в нем cmd:
Далее нажмите Enter. Перед вами откроется командная строка Windows. Здесь можно использовать утилиту ssh. Синтаксис у нее абсолютно такой же, как и для Linux:
ssh имя_пользователя@айпи_адрес -p порт
Например, такой командой можно подключится по SSH к Raspberry Pi, который находится в вашей локальной сети по адресу 192.168.1.5:
ssh pi@192.168.1.5
Утилита предложит добавить устройство в список известных:
Затем предложит ввести пароль:
Все следующие команды будут выполняться уже на Raspberry Pi или другой удаленной машине, к которой вы подключились.
Теперь подключиться к серверу по ssh из этой операционной системы также просто как и из Linux.
Выводы
В этой статье мы рассмотрели как выполняется подключение к серверу по SSH из Linux или Windows. Как видите, это очень просто. А дальше, для работы с удаленным сервером вам понадобятся команды терминала Linux.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Сегодня все чаще в работе используются серверы с установленной операционной системой семейства Linux. Для возможности удаленного доступа используется протокол прикладного уровня под названием SSH. В данной статье мы рассмотрим использование протокола SSH для подключения к удаленным Linux-серверам, а также настройку некоторых параметров с целью улучшения безопасности.
Подключение по SSH можно использовать для абсолютно любого дистрибутива, так как протокол SSH используется по умолчанию практически во всех современных дистрибутивах Unix и Linux.
В качестве примера вся конфигурация SSH, которая будет описана в данной статье, использовалась в дистрибутиве Ubuntu версии 22.04. Однако ее без проблем можно использовать в любых других дистрибутивах, включая Debian, CentOS, Astra Linux и т.д.
cloud
Для подключения к серверам на Linux по протоколу SSH существует большое количество клиентских программ.
Среди самых известных программ для Windows можно выделить PuTTY, Bitvise SSH Client, SuperPuTTY, mRemoteNG, MobaXterm.
На macOS можно воспользоваться программой Termius или стандартной утилитой SSH, используя терминал.
Также можно использовать стандартный SSH-клиент (OpenSSH), который вызывается через командную строку (cmd) и присутствует в ОС семейства Windows: Windows 10, Windows 11 и Windows Server 2019.
Установка SSH на сервер
В большинстве случаев SSH уже предустановлен на сервере, и вы сразу сможете подключиться. Если же пакет SSH по каким-то причинам не установлен, то его необходимо установить при помощи одной из следующих команд (все команды представленные ниже необходимо выполнять от имени пользователя root
или от обычного пользователя, но с правами sudo
).
APT
Для дистрибутивов на основе APT (Ubuntu, Debian, Linux Mint, Kali Linux, Astra Linux и другие) используйте команду:
apt -y install openssh-server
RPM
Для дистрибутивов на основе RPM (CentOS, Fedora, Red Hat Enterprise Linux, ALT Linux и другие) необходимо выполнить одну из команд ниже:
Для пакетного менеджера YUM:
yum -y install openssh-server
Для пакетного менеджера DNF:
dnf -y install openssh-server
Pacman
Для дистрибутивов на основе Pacman (Arch Linux, ArchLabs, Manjaro и другие) необходимо выполнить команду:
pacman -S openssh
Вместе с пакетом openssh-server
также автоматически устанавливается пакет openssh-client
, который представляет собой консольную утилиту SSH для подключения к удаленным серверам.
Синтаксис команды SSH
Стандартный синтаксис команды SSH выглядит следующим образом:
ssh <имя_пользователя@IP_адрес_или_доменное_имя_удаленного_хоста>
Например:
ssh alex@80.242.57.93
По умолчанию подключение происходит по 22 порту. Если же порт SSH сервера другой, то он указывается при помощи опции -p
:
ssh alex@80.242.57.93 -p 2222
Конфигурационный файл SSH-сервера
Конфигурационный файл, который использует SSH-сервер, называется sshd_config
и располагается в директории /etc/ssh
. Не путайте файл SSH-сервера с файлом SSH-клиента — ssh_config
. Далее в статье будет использоваться только файл сервера — sshd_config
.
Подключение по SSH при помощи пароля
По умолчанию подключение по протоколу SSH осуществляется с помощью пароля при условии, что на этапе создания сервера не был добавлен SSH-ключ для подключения (о ключах для SSH и об их применении будет рассказано в следующей главе). В большинстве дистрибутивов Linux/Unix в конфигурации сервера SSH включена PAM-аутентификация. Это означает, что пользователь, присутствующий в операционной системе, может воспользоваться своими данными (логин и пароль) для входа по SSH. Данное условие работает, если у пользователя не используются опции nologin
и noshell
, что можно проверить можно посмотреть в файле /etc/passwd
, и ему разрешен вход по SSH (будет показано далее в статье).
Для того чтобы подключиться по SSH при помощи пароля, достаточно знать адрес необходимого сервера, а также логин и пароль пользователя. Например:
ssh alex@80.242.57.93
После ввода команды выше появится приглашение к вводу пароля. Если пароль введен правильно, то вы попадете на сервер. Пароль необходимо вводить каждый раз при подключении.
Если вы подключаетесь к серверу в первый раз, то увидите сообщение от так называемого «отпечатка пальцев» (fingerprint):
Чтобы войти на сервер, необходимо ввести yes
.
Fingerprint используется для повышения безопасности путем генерации уникального набора символов. Каждый раз при подключении к серверу ваше устройство, с которого осуществляется подключение, сравнивает ранее сгенерированную комбинацию. Если, например на сервере была переустановлена операционная система, был переустановлен SSH-сервер или же на текущем сетевом адресе произошла смена устройства, но при этом адрес остался прежним, то в таких случаях система будет предупреждать что отпечаток изменился по сравнению с первым подключением.
Использование паролей не является безопасным методом подключения, так как пароль можно попытаться подобрать. Наиболее безопасным методом аутентификации является использование SSH-ключей. О них речь пойдет в следующем разделе.
Подключение по SSH при помощи ключей
Более распространенным и более безопасным способом вместо использования паролей являются SSH-ключи.
В работе используются два типа ключей: открытый (public) и закрытый (private). Открытый ключ используется для шифрования и является публичным — если кто-то вдруг завладеет вашим открытым ключом, то ничего критичного не произойдет. В свою очередь закрытый ключ используется для расшифровки. Закрытый ключ должен храниться только у вас и не в коем случае не быть доступным для третьих лиц. Для использования ключей сначала их необходимо сгенерировать. Для генерации используется команда:
ssh-keygen
Для начала команда предложит вам выбрать директорию, в которую будут сохранены открытый и закрытый ключи. По умолчанию ключи хранятся в скрытой (символ точки) директории .ssh
, которая в свою очередь будет создана в домашней директории того пользователя, из-под которого запущена команда ssh-keygen
. В данном примере ключи будут сохранены в домашней директории пользователя alex
а именно в /home/alex/.ssh
. Также вы можете указать другой путь и директорию куда будут сохранены ключи. Чтобы оставить путь по умолчанию, достаточно нажать на клавишу Enter:
Далее программа предложит задать passphrase — пароль для ключа. Это обеспечит дополнительный уровень защиты. Если кто-то получит доступ к вашему ключу, то ему придется подбирать еще и пароль. Однако стоит заметить, что при использовании passphrase вам придется вводить ее каждый раз при новом подключении по аналогии с использованием паролей. Passphrase можно не использовать. Для этого достаточно при появлении фраз Enter passphrase (empty for no passphrase) и Enter same passphrase again нажать на клавишу Enter:
После этого ssh-keygen
сообщит о том что ключи сгенерированы и сохранены в ранее указанной директории:
Проверим содержимое директории .ssh
(/home/alex/.ssh
):
Где:
id_rsa
— закрытый ключid_rsa.pub
— открытый ключ
Перед тем как подключаться к нужному хосту, необходимо скопировать открытый ключ на этот удаленный хост. Для этого в комплекте с OpenSSH поставляется утилита для копирования открытых ключей на удаленные серверы — ssh-copy-id
. Синтаксис у команды следующий:
ssh-copy-id -i <полный путь до файла открытого ключа- id_rsa.pub> имя_пользователя_на_удаленном_сервере@IP_адрес_или_доменное_имя
Предположим, нам необходимо подключиться к серверу с IP адресом 82.97.250.52 без пароля, только при помощи ключа. Для этого копируем ранее сгенерированный ключ на хост 82.97.250.52:
ssh-copy-id -i /home/alex/.ssh/id_rsa.pub alex@82.97.250.52
Так как мы впервые осуществляем подключение, то нам необходимо ввести yes
:
При копировании ключа нам необходимо ввести пароль от учетной записи пользователя на удаленном хосте. Пароль необходимо вводить только один раз:
После этого ключ будет добавлен:
Теперь можно попробовать зайти на удаленный сервер:
ssh alex@82.97.250.52
Если пароль не был запрошен и вы смогли войти, то аутентификация по ключам успешно работает.
На удаленном хосте переданный открытый ключ был записан в файл authorized_keys
, который находится в скрытой директории .ssh
в домашней директории того пользователя, из-под которого осуществлялось подключение:
Запрет на подключение при помощи пароля
Так как использование паролей при подключении по SSH не является безопасным, то рекомендуется отключить данный метод аутентификации и оставить только вход по ключам.
Для этого откроем на редактирование конфигурационный файл SSH-сервера (sshd_config
) при помощи любого текстового редактора:
nano /etc/ssh/sshd_config
Далее необходимо найти параметр PasswordAuthentication
и изменить значение на no
:
PasswordAuthentication no
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Будьте предельно осторожны при выключении аутентификации по паролю, не убедившись перед этим, что аутентификация по ключам корректно работает. Если вход по ключам не будет работать, а аутентификация по паролю будет выключена — вы не сможете попасть на сервер при помощи SSH. Для решения данной проблемы вы можете использовать веб-консоль которая находится в разделе «Консоль» в панели управления сервера:
Авторизуйтесь под необходимой учетной записью, далее верните значение параметра PasswordAuthentication
в yes
и перезапустите демон SSH.
Смена стандартного порта SSH
По умолчанию сервер SSH работает по 22 порту. Порт можно изменить. Для этого в файле sshd_config
найдите строку Port
. Раскомментируйте при необходимости (удалите символ решетки #
) и задайте любой порт, который не занят на вашем сервере, в диапазоне от 0 до 65536 (кроме портов 0-1023, так как данный диапазон зарезервирован для популярных приложений).
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Теперь при подключении используйте опцию -p
, в которой будет задан новый порт, например:
ssh alex@82.97.250.52 -p 2224
Запрет на подключение по SSH пользователю root
По умолчанию в некоторых дистрибутивах разрешено подключение из-под учетной записи root
. Так как root
-пользователь обладает всеми привилегиями в системе и может выполнять многие опасные действия, то необходимо отключить вход для пользователя root
.
Для этого в файле sshd_config
найдите строку PermitRootLogin
и задайте ей значение no
:
PermitRootLogin no
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Теперь при попытке входа от имени root
-пользователя будет отображаться ошибка: Permission denied, please try again.
Разрешение/запрет на подключение по SSH определенным пользователям
Помимо отключения разрешения на вход для root-пользователя, вы также можете разрешать или запрещать подключение только для определенных пользователей. Для этого в конфигурационном файле sshd_config
используются параметры AllowUsers
и DenyUsers
:
AllowUsers
разрешает определённым пользователям подключение по SSH. Разрешить доступ можно как одному пользователю, так и нескольким сразу, для этого их необходимо перечислить через пробел. Предполагается, что пользователи, которым разрешено подключение, уже созданы в операционной системе.DenyUsers
запрещает определённым пользователям подключение по SSH. Запретить доступ можно как одному пользователю, так и нескольким сразу, для этого их необходимо перечислить через пробел. Предполагается, что пользователи которым запрещено подключение, уже созданы в операционной системе.
Например, разрешим доступ только для пользователей test
и admin
:
AllowUsers test admin
И запретим доступ для пользователей nginx
и websrv
:
DenyUsers nginx websrv
Также разрешать и запрещать доступ можно и для групп:
AllowGroups www
DenyGroups db
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Теперь пользователи, которым запрещен доступ, при попытке входа будут получать ошибку Permission denied, please try again.
Заключение
Протокол SSH является незаменимым средством для подключения к вашим удаленным серверам. Помимо встроенного шифрования, вы также можете гибко настраивать конфигурацию SSH-сервера с целью повышения защиты.
The secure shell protocol (SSH) is the most common method for controlling remote machines over the command line in the Linux world. SSH is a true Linux original, and it is also gaining popularity in the Windows world. There is even official Windows documentation for SSH, which covers controlling Windows machines using OpenSSH.
This article describes how to establish an SSH connection from a Windows machine to a Fedora 33 Linux system using the popular open source tool PuTTY.
Ways to use SSH
SSH uses a client-server architecture, where an SSH client establishes a connection to an SSH server. The SSH server is usually running as a system daemon, so it is often called SSHD. You can hardly find a Linux distribution that does not come with the SSH daemon. In Fedora 33, the SSH daemon is installed but not activated.
You can use SSH to control almost any Linux machine, whether it’s running as a virtual machine or as a physical device on your network. A common use case is the headless configuration of embedded devices, including the Raspberry Pi. SSH can also be used to tunnel other network services. Because SSH traffic is encrypted, you can use SSH as a transport layer for any protocol that does not provide encryption by default.
In this article, I’ll explain four ways to use SSH: 1. how to configure the SSH daemon on the Linux side, 2. how to set up a remote console connection, 3. how to copy files over the network, and 4. how to tunnel a certain protocol over SSH.
1. Configure SSHD
The Linux system (Fedora 33 in my case) acts as the SSH server that allows the PuTTY SSH client to connect. First, check the daemon’s SSH configuration. The configuration file is located at /etc/ssh/sshd_config
and contains a lot of switches that can be activated by commenting out related lines:
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
The default configuration, where no line is uncommented, should work for this example. Check whether the SSH daemon is already running by typing systemctl status sshd
:
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-06-22 11:12:05 UTC; 2 years 11 months ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 577 (sshd)
Tasks: 1 (limit: 26213)
CGroup: /system.slice/sshd.service
└─577 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-[...]
If it’s inactive, start it with the systemctl start sshd
command.
2. Set up a remote console
On Windows, download the PuTTY installer, then install and open it. You should see a window like this:
In the Host Name (or IP address) input field, enter the connection information for your Linux system. In this example, I set up a Fedora 33 virtual machine with a bridged network adapter that I can use to contact the system at the IP address 192.168.1.60
. Click Open, and a window like this should open:
This is an SSH security mechanism to prevent a man-in-the-middle attack. The fingerprint in the message should match the key on the Linux system at /etc/ssh/ssh_host_ed25519_key.pub.
. PuTTY prints the key as an MD5 hash. To check its authenticity, switch to the Linux system, open a command shell, and enter:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
The output should match the fingerprint shown by PuTTY:
$ ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
256 MD5:E4:5F:01:05:D0:F7:DC:A6:32 no comment (ED25519)
Confirm the PuTTY Security Alert by clicking Yes. The host system’s fingerprint is now in PuTTYs trust list, which is located in the Windows registry under:
HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys
Enter your correct login credentials, and you should be on the console in your home directory:
3. Copy files over the network
In addition to the remote console, you can use PuTTY to transfer files via SSH. Look in the installation folder under C:\\Program Files (x86)\\PuTTY
and find pscp.exe
. You can use this to copy files to and from a Linux system.
Open a command prompt with Windows + R and enter cmd. Copy the file MyFile.txt
from your Linux user home directory to your Windows home directory by entering:
C:\"Program Files (x86)"\PuTTY\pscp.exe stephan@192.168.1.60:/home/stephan/MyFile.txt .
To copy a file from the Windows home directory to the Linux user home directory, enter:
C:\"Program Files (x86)"\PuTTY\pscp.exe MyFile.txt stephan@192.168.1.60:/home/stephan/
As you may have already figured out, the copy command’s general structure is:
pscp.exe <source> <target>
4. Tunnel a protocol
Imagine you have a Linux machine that is running an HTTP-based service for some arbitrary application. You want to access this HTTP service from your Windows machine over the internet. Of course, you cannot expose the related TCP port to the public because:
- The server is running HTTP, not HTTPS
- There is no user management nor login at all
At first glance, it looks like an impossible task to set up this architecture without producing a horrible security flaw. But SSH makes it relatively easy to set up a safe solution for this scenario.
I will demonstrate this procedure with my software project Pythonic. Running as a container, Pythonic exposes two TCP ports: TCP port 7000 (main editor) and TCP port 8000 (the code-server source-code editor).
To install Pythonic on a Linux machine, run:
podman pull pythonicautomation/pythonic
podman run -d -p 7000:7000 -p 8000:8000 pythonic
Switch to your Windows machine, open PuTTY, and navigate to Connection -> SSH -> Tunnels. Add the two TCP ports you want to forward:
- Source:
7000
/ Destination:localhost:7000
- Source:
8000
/ Destination:localhost:8000
Then go back to the Session section, and establish an SSH connection as you did before. Open a browser and navigate to https://localhost:7000
; you should see a screen like this:
You have successfully configured port forwarding!
Warning: If you expose TCP Port 22 to the public, don’t use easy-to-guess login credentials. You will receive login attempts from all over the world trying to access your Linux machine with common, standard credentials. Instead, permit only known clients to log in. This login restriction can be achieved using public-key cryptography, which uses a key pair in which the public key is stored on the SSH host machine, and the private key remains at the client.
Debugging
If you are struggling to connect to your Linux machine, you can follow the processes in your SSH daemon with:
journalctl -f -u sshd
This is how an ordinary log-in process looks like with LogLevel DEBUG :
Learn more
This article barely scratched the surface about ways to use SSH. If you are looking for information about a specific use case, you can probably find it among the tons of SSH tutorials on the internet. I use PuTTY heavily at work because its easy configuration and good interoperability between operating systems make it a Swiss Army knife tool for connectivity solutions.
This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.