Ssh передать пароль в командной строке windows

I need to execute ssh from windows command line by providing password in a non interactive manner. I could implement the key based authentication and able to execute the ssh commands just like ss...

I need to execute ssh from windows command line by providing password in a non interactive manner. I could implement the key based authentication and able to execute the ssh commands just like

ssh <user>@<host> <command>

Is there any commands like

ssh <user>@<host> -P <password> <command>

enter image description here

I don’t know if it is feasible. However, there can be some work around for the same. Throw me some ideas to accomplish the same.

msanford's user avatar

msanford

11.6k10 gold badges67 silver badges92 bronze badges

asked Aug 25, 2012 at 0:50

Balachandar's user avatar

4

The sshpass utility is meant for exactly this. First, install sshpass by typing this command:

sudo apt-get install sshpass

Then prepend your ssh/scp command with

sshpass -p '<password>' <ssh/scp command>

This program is easiest to install when using Linux.

User should consider using SSH’s more secure public key authentication (with the ssh command) instead.

Paul's user avatar

Paul

35.3k9 gold badges91 silver badges120 bronze badges

answered Jan 23, 2013 at 21:53

Anish Bhatt's user avatar

Anish BhattAnish Bhatt

1,7732 gold badges10 silver badges3 bronze badges

9

What about this expect script?

#!/usr/bin/expect -f
spawn ssh root@myhost
expect -exact "root@myhost's password: "
send -- "mypasswordr"
interact

answered Sep 8, 2014 at 13:01

Illarion Kovalchuk's user avatar

2

Windows Solution

  1. Install PuTTY
  2. Press Windows-Key + R
  3. Enter putty.exe -ssh [username]@[hostname] -pw [password]

answered Jul 9, 2018 at 11:37

optimiertes's user avatar

optimiertesoptimiertes

3,9221 gold badge21 silver badges15 bronze badges

0

PowerShell solution

Using Posh-SSH:

New-SSHSession -ComputerName 0.0.0.0 -Credential $cred | Out-Null
Invoke-SSHCommand -SessionId 1 -Command "nohup sleep 5 >> abs.log &" | Out-Null

answered Mar 8, 2019 at 4:06

Owain Esau's user avatar

Owain EsauOwain Esau

1,8662 gold badges20 silver badges32 bronze badges

1

This post is a valid solution for your issue.

  1. Install PuTTY on your Windows Machine
  2. Execute ‘plink your_username@yourhost -pw your_password’

If you use the Windows Terminal and you want your shell to log into a remote machine when opening a new tab, you may configure the command line params (Settings -> Shell -> Command line):

C:UsersUSERNAMEAppDataLocalMicrosoftWindowsAppsMicrosoft.PowerShell.IDpwsh.exe
-Command "plink USERNAME@192.168.0.1 -pw PASSWORD"

answered Nov 7, 2021 at 20:34

Bin4ry's user avatar

Bin4ryBin4ry

5908 silver badges34 bronze badges

1

From the terminal I type: ssh user@ip and then it prompts for a password.
Is there a way to specify the password in the ssh command itself?

asked Nov 26, 2020 at 9:26

Rohit sharma's user avatar

0

Use sshpass, one of two forms:

sshpass -ffilename ssh user@ip   # prefer this
sshpass -pPa5sw0rd ssh user@ip   #  avoid this

where your password is literally Pa5sw0rd or it is in the first line of the file filename. Notes:

  • In the manual there is no space after -p or -f, but at least sshpass 1.06 in my Debian 10 allows it; your sshpass may or may not.
  • If your password contains characters your shell will interpret (like $, ' or ;) then you should quote it properly in the command line (but not in the file).
  • Avoid -p. Use chmod 600 filename to make the file private (root will still be able to access it though). Read about security considerations in the manual.

answered Nov 26, 2020 at 10:51

Kamil Maciorowski's user avatar

Kamil MaciorowskiKamil Maciorowski

64.8k22 gold badges118 silver badges175 bronze badges

3

The correct way to do this, is to switch from password authentication to a public/private key pair. This typically needs no reconfiguration at all and is quite easy.

Step 1: If you do not have a key, create one: ssh-keygen will do that for you

Step 2: Authorize this key on the remote host: Run ssh-copy-id user@ip once, using your password

Step 3: From now on ssh user@ip will no longer ask for your password

answered Nov 26, 2020 at 9:57

Eugen Rieck's user avatar

Eugen RieckEugen Rieck

19.6k5 gold badges49 silver badges45 bronze badges

3

Зачем нужен протокол SSH?

Обычные пользователи почти всегда работают с компьютером локально. То есть они физически находятся у компьютера, используют имеющиеся у него устройства ввода-вывода (клавиатуру, мышь, дисплей) для выполнения необходимых операций. Однако, не всегда есть возможность физически находиться у компьютера, с которым нужно работать. Например, если вы хотите создать свой сайт, то он будет размещен на компьютере хостинг-провайдера. Этот компьютер может находиться на другом конце света. Вам нужен способ запускать команды на этом компьютере не выходя из своего дома. При профессиональной работе с компьютерами часто возникает потребность выполнять определенные операции на удаленных машинах. Например, системный администратор может обслуживать компьютерную сеть, состоящую из десятков компьютеров. Было бы очень неудобно постоянно физически перемещаться между компьютерами. Более того, удаленный компьютер может располагаться, например, в центре обработки данных у облачного провайдера, или быть вообще виртуальной машиной на кластере. Такое часто бывает при использовании облачных систем.

Datacenter
Источник: securityboulevard.com.

Специально для таких случаев существуют протоколы удаленного доступа. Они позволяют подключиться к удаленному компьютеру и работать на нем так же, как вы обычно работаете на локальной физической машине. Такие протоколы разделяются на графические и текстовые. Графические протоколы, например, RDP (remote desktop protocol) передают по сети изображение графического интерфейса в одну сторону, движения мыши и события клавиатуры — в другую. Текстовые протоколы, такие как Telnet или SSH, передают только текстовую информацию и позволяют работать в терминале удаленной машины. Здесь мы рассмотрим самый популярный текстовый протокол удаленного доступа — SSH.

SSH — защищенный протокол для удаленного доступа к компьютерам. Через SSH можно выполнять операции в командной строке компьютера, который физически находится в другом месте. Иными словами, SSH — это дистанционная командная строка. Визуально вы работаете на своем компьютере, но в реальности — на другом.

Протокол — это набор соглашений, правил, по которым разные программы могут обмениваться информацией. SSH — это набор правил, который известен и вашему компьютеру, и физически отдаленному компьютеру. Пример: вы вводите команду удаления файла, и эта команда передается на другой компьютер и выполняется там. Ответ (или сообщение об ошибке) возвращается и показывается на вашем компьютере.

При удаленной работе обычно используются существующие открытые каналы коммуникации, то есть компьютерные сети. Почти всегда — подключение происходит через Интернет. Поэтому очень важно обеспечить безопасность соединения. При использовании протокола SSH вся информация передается в зашифрованном виде. Подобно тому, как некоторые сайты работают по HTTPS, шифруя информацию. Например, ваш онлайн-банкинг обязательно должен работать по защищенному соединению. В таком случае даже если всю информацию перехватывает злоумышленник, он не сможет расшифровать её.

Используя SSH можно подключиться к любой удаленной машине при соблюдении некоторых условий. Ни параметры удаленной машины, ни расстояние не имеют значения. Также можно подключаться как к физическим, так и к виртуальным машинам. При подключении, вы даже можете не знать, к чему вы подключаетесь, к физическому компьютеру или к виртуальной машине в датацентре какой-то компании. При работе никакой разницы вы не заметите.

Как и большинство сетевых протоколов, SSH работает по клиент-серверному принципу. То есть на вашем компьютере, за которым вы работаете физически должна быть установлена специальная программа — ssh клиент. С ее помощью вы и будете подключаться к другим машинам. А на удаленной машине, то есть той, к которой вы подключаетесь должна работать другая программа — ssh сервер. Она будет принимать ваше подключение, выполнять ваши команды, следить за правами доступа и так далее. Как настроить и клиент и сервер мы поговорим далее.

Выводы:

  1. При работе часто возникает потребность выполнять операции на разных удаленных хостах.
  2. Обычное незащищенное соединение для этого не подходит из-за проблем с безопасностью.
  3. Протокол SSH позволяет выполнять команды терминала на удаленной машине.
  4. Протокол SSH начинает шифровать соединение еще до ввода пароля пользователя.
  5. Таким образом можно подключаться к любым машинам, физическим и виртуальным.
  6. SSH является клиент-серверным протоколом. На локальной машине работает клиент ssh, на удаленной — сервер.

Что нужно для успешного удаленного доступа?

SSH client and server
Источник: Wikimedia.

Для того, чтобы иметь возможность подключиться к удаленной машине нужно соблюдение нескольких условий. Во-первых, как мы уже говорили, на ней должен быть установлен и работать ssh сервер. Существуют разные сервера, но самым распространенным является свободный и бесплатный сервер openssh. Он существует и для Linux и для Windows и для других операционных систем. Во многие дистрибутивы Linux, ориентированные на серверную работу он устанавливается по умолчанию. Если же его нет, то установить его очень просто командой:

1
$ sudo apt install openssh-server

Естественно, удаленная машин должна быть доступна по сети с локальной. Если удаленная машина выключена, не подключена к сети или подключена к изолированной сети, куда не пройдут пакеты от локальной машины — подключиться вы к ней не сможете. Другими словами, удаленная машина должна пинговаться с локальной.

Обратите внимание, что удаленная машина не должна быть скрыта NAT’ом или каким-либо сетевым экраном, блокирующим входящие соединения. Кстати, домание компьютеры, выходящие в интернет через обычного провайдера, как правило, как раз скрыты за NAT. Поэтому, находясь в своей домашней сети, вы сможете подключиться к другому компьютеру в ней, а извне — нет.

Протокол ssh никак не связан с интернетом. Вы можете подключаться к машинам, которые подключены в общую локальную сеть, независимо от того, есть ли выход в интернет. В любом случае, вы должны знать адрес удаленной машины, чтобы к ней подключиться. Обычно используется IP-адрес. Но если у сервера есть назначенное доменное имя — можете использовать его.

Кроме IP-адреса нужно знать номер сетевого порта, который прослушивает сервер ssh. По умолчанию любая служба ssh использует порт 22. Однако, администраторам при настройке сервера рекомендуется ради безопасности изменить порт на случайный. Поэтому для подключения надо знать, был ли переназначен стандартный порт и, если да, то на какой.

Еще одно необходимое условие — знание учетной записи пользователя на удаленной машине. Помните, что после подключения вы первым делом должны будете авторизоваться на сервере. Поэтому для этого вы должны знать имя пользователя и его пароль. Этот пользователь должен быть зарегистрирован именно на удаленной машине. Ваш локальный пользователь не подойдет. Если вы сами настраиваете сервер, то такое надо предусмотреть заранее. Например завести специального пользователя, предназначенного именно для того, чтобы под ним на эту машину заходили по протоколу ssh.

Еще одно предостережение. На реально используемых серверах обязательно должен стоять файерволл — специальная программа, которая блокирует входящие соединения на определенные порты. Она нужна для безопасности. Так вот, по умолчанию, такие программы блокируют все порты. Если вы хотите какие-то определенные порты использовать, их надо добавить в исключения файервола.

Как мы уже говорили, на локальной машине должне быть установле ssh-клиент. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, и достаточно открыть терминал и воспользоваться командой ssh. В Windows нужно скачать сторонний клиент, например, Putty. SSH-клиентов тоже существует много разных. Есть даже графические клиенты. Но даже в них придется работать в командной строке — ведь сам протокол ssh — чисто текстовый.

Выводы:

  1. Для подключения нужно знать адрес сервера, логин и пароль, порт подключения (по умолчанию, 22) .
  2. Еще нужно, чтобы сетевая инфраструктура была правильно настроена.
  3. Нужно, чтобы на удаленной машине работал сервер SSH.
  4. Самый распространенный сервер — OpenSSH — бесплатный и открытый.
  5. Нужно, чтобы удаленная машина была доступна по сети.
  6. Системные администраторы могут заблокировать доступ к порту ssh.
  7. По умолчанию, порты обычно закрыты, нужно их открыть.
  8. На локальной машине должен быть установлен клиент ssh.
  9. Есть консольные и графические клиенты ssh, но работать все равно придется в терминале.

Как подключиться к серверу из командной строки?

Для подключения нужно воспользоваться командой ssh. при запуске нужно указать адрес сервера, имя пользователя и, опционально, порт подключения. Вот как выглядит команда при использовании консольного клиента (в терминале):

1
$ ssh username@remote_host -p port

Например, для подключения к серверу 52.307.149.244 в аккаунт user нужно ввести:

1
$ ssh user@52.307.149.244

Если не указывать порт, то будет использован порт SSH по умолчанию — 22. Используемый порт задается при настройке SSH-сервера.

При первом подключении к конкретному серверу появится такое сообщение:

1
2
3
The authenticity of host '52.307.149.244 (52.307.149.244)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Введите yes в первый раз.

Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов — fingerprint («отпечатки пальцев»). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Если кто-то переустановит SSH-сервер, или всю операционную систему, или вообще заменит удаленный компьютер, сохранив его адрес, то при следующем соединении вы узнаете об этом, потому что изменится fingerprint. Если fingerprint не меняется, то такое сообщение не будет появляться.

Простейший вариант — подключение по паролю. После ввода команды ssh система запросит пароль:

1
2
$ ssh ivan@52.307.149.244
password: 

Пароль придется вводить каждый раз. Обратите внимание, что пароль нужно вводить уже после установки подключения. Это сделано для того, чтобы передаваемый по сети пароль уже мог шифроваться. Ведь передавать пароли в открытом виде — очень небезопасно.

После подключения вы войдете в командную строку удаленной машины. В командной строке немного чего изменится.

styled-image

Обратите внимание, что изменилось приглашение командной строки — теперь там отображаются данные удаленной машины, другое имя пользователя. Другое приглашение — явный знак того, что вы работаете не на своем локальном физическом компьютере.

Теперь можно вводить любые команды и они будут выполнены на удаленном компьютере. Порядок работы такой же, как и в обычной командной строке.

Для выхода из удаленного сеанса необходимо нажать комбинацию клавиш Ctrl + D. Либо можно ввести команду exit.

Выводы:

  1. Команда ssh username@remote_host осуществляет подключение к удаленному терминалу.
  2. Если вы подключились к этому компьютеру первый раз, нужно будет подтвердить его.
  3. Опция -p позволяет подключиться по любому номеру порта.
  4. После установки соединения вам нужно будет ввести пароль от удаленной учетной записи.
  5. После этого вы сможете работать в командной строке так же, как и на локальной машине.
  6. Для выхода из удаленного сеанса есть команда exit или сочетание Ctrl + D.

Как подключиться к серверу по ключу?

Пи работе с удаленными машинами приходится при каждом подключении вводить пароль. Если вы работаете на разных машинах, приходится запоминать все пароли от всех удаленных компьютеров. Это, конечно, безопасно, но очень неудобно. К счастью, методы асимметричного шифрования позволяют избежать этого и авторизоваться на удаленных машинах без пароля, по ключу.

Асимметричные шифры устроены таким образом, что всегда используют пару ключей — один для шифрования данных, а другой, парный — для расшифровки. Эта пара ключей генерируется вместе специальным алгоритмом. И по одному ключу невозможно восстановить другой. Причем расшифровать данные можно только тем ключом, который был сгенерирован в паре с тем, которым эти данные были зашифрованы.

Поэтому пару ключей можно использовать и для авторизации. Один из ключей — тот, что используется для шифрования — назвается приватным. Его нельзя никому передавать, показывать или пересылать. Его надо хранить в секрете. Второй ключ — публичный — используется для расшифровывания. Вот его можно передавать кому угодно. Обратите внимание, что если какие-то данные удается расшифровать вашим публичным ключом, это значит, что они были зашифрованы вашим приватным ключом, и никаким другим. А так как ваш приватный ключ знаете только вы, значит и отправили эти данные именно вы. Так публичный ключ как бы подтверждает вашу личность.

Обратите внимание, что в такой схеме не очень соблюдается секретность передачи данных — ведь расшифровать их может кто угодно. Подробное рассмотрение алгоритмов шифрования и протоколов и схем их применения далеко выходит за рамки нашей темы. Заметим только, что в реальности для обеспечения секретности, целостности и идентификации в криптографических системах используются разные схемы. Мы сейчас рассматриваем только использование ключей для авторизации на сервере.

Итак, чтобы использовать авторизацию по ключу надо первым делом сгенерировать свою собственную пару ключей. Для этого используется программа ssh-keygen, которая включена в пакет ssh-клиента.

Создадим пару ключей:

Программа запустится и спросит, куда сохранять ключи:

1
2
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Нажмите Enter для сохранения в стандартное место — директорию .ssh/id_rsa в вашей домашней директории.

Программа запросит passphrase. Это вроде пароля для ключа. Пароль используется для дополнительной защиты — его надо будет вводить каждый раз при использовании ключа. Идея в том, что вместо разных паролей придется запомнить только один — от ключа. Можно просто нажать Enter и пропустить этот шаг.

1
2
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Ключи созданы:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       +         |
|      o S   .    |
|     o   . * +   |
|      o + = O .  |
|       + = = +   |
|      ....Eo+    |
+-----------------+

Теперь у вас есть два файла:

  • ~/.ssh/id_rsa — приватный ключ. Никогда никому и никуда не передавайте его!
  • ~/.ssh/id_rsa.pub — публичный ключ. Спокойно распространяйте его.

В Windows можно использовать ssh-gen в подсистеме Ubuntu for Windows или в командной строке Git for Windows. Или создавать ключи графической утилитой вроде PuTTYgen.

После генерации необходимо скопировать ключ на удаленный сервер. Нужно добавить публичный ключ на сервер в файл ~/.ssh/authorized_keys. Самый простой способ — запустить на локальной машине команду для копирования ключа:

1
$ ssh-copy-id -i /home/demo/.ssh/id_rsa ivan@52.307.149.244

Обратите внимание, что при этом придется обязательно ввести пароль от учетки на сервере. Таким образом скопированный ключ подтверждает, что его владелец знает пароль, поэтому в будущем можно его пускать без проверки.

Другой способ — подключиться по паролю, открыть в редакторе файл ~/.ssh/authorized_keys и добавить в конец текст из вашего файла ~/.ssh/id_rsa.pub.

Теперь при подключении пароль запрашиваться не будет. После включения соединений по ключу рекомендуется отключить подключение по паролю в настройках ssh сервера.

Один и тот же публичный ключ можно использовать для авторизации на разных серверах. Просто скопируйте его туда, куда часто заходите. Кроме обычных компьютеров, авторизация через SSH по ключу используется и на многих публичных сервисах. Например, популярный хостинг программных репозиториев GitHub заставляет использовать именно доступ по ключу для синхронизации проектов. Многие облачные сервисы так же имеют возможность авторизации по ключу.

Только заметьте, что если вы скомпрометировали ваш приватный ключ, придется генерировать новую пару ключей. А затем придется рассылать новый публичный ключ по всем свои серверам. Причем, компрометация — это не когда вы его по ошибке где-то опубликовали, это когда возникает малейшее подозрение, что третьи лица могли получить к нему доступ.

Выводы:

  1. Запоминать много паролей от серверов часто неудобно и небезопасно.
  2. Асимметричное шифрование позволяет избежать ввода пароля каждый раз.
  3. Команда ssh-keygen позволяет сгенерировать пару ключей — приватный и публичный.
  4. Приватный ключ надо хранить в секрете. Если он скомпрометирован, придется создавать новую пару.
  5. Публичный ключ может удостоверять подлинность отправителя.
  6. Можно скопировать публичный ключ на сервер командой ssh-copy-id -i.
  7. Ключ может быть разослан на несколько серверов, и на них можно заходить без пароля.
  8. Ключ тоже можно защитить паролем.

Как запомнить частые подключения?

При работе с многими удаленными серверами кроме паролей приходится запоминать еще много информации: ip-адреса, имена пользователей на каждом сервере, номера нестандартных портов, которые тоже могут отличаться, другие опции. Это не так критично, как пароли, но все равно может доставить неудобств.

В стандартном клиенте ssh предусмотрена возможность запомнить частые подключения в конфигурационном файле. Он располагается по адресу ~/.ssh/config. Если его там нет, вполне можно создать новый пустой. Вообще, папка ~/.ssh/ — это общее место, где собираются многие файлы, имеющие отношение к входящим или исходящим подключениям по ssh. Например, именно туда сохраняются файлы ключей и публичные ключи удаленных пользователей.

Этот файл имеет довольно простую структуру. В нем прописывается символьное имя подключения, которые вы будете использовать вместо строки подключения в команде ssh. После этого могут идти несколько опций, например — имя пользователя, адрес хоста, номер порта, адрес публичного ключа, который будет использоваться при подключении. Выглядит это примерно так:

1
2
3
4
5
6
7
8
9
10
11
12
Host targaryen
    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key

Host tyrell
    HostName 192.168.10.20
    user oberyn

Host martell
    HostName 192.168.10.50

У этого файла довольно много опций, но эти — самые полезные. После того, как в файл добавлена запись можно подключаться к хосту только по алиасу, например так:

Все остальные параметры клиент подставит сам.

Выводы:

  1. Файл ~/.ssh/config используется, чтобы запомнить часто использующиеся подключения.
  2. Можно присвоить символьное имя и связать его с адресом, именем пользователя.
  3. В этом файле можно прописать использование определенного файла ключа.
  4. Файл приватного ключа в таком случае выступает идентификацией (identity).

Зачем нужна программа Tmux?

При работе в удаленной сессии есть один подводный камень. Из-за особенности функционирования процессов в Linux, когда мы выходим из сеанса (разлогиниваемся), то все запущенные команды и программы автоматически завершатся. Следующий раз нам приходится начинать работы с самого начала. И нельзя запустить какой-то долгий процесс, чтобы он выполнялся, пока мы отключились. Такое происходит и в случае непреднамеренного отключения, например, при обрыве связи.

Чтобы обойти это ограничение, существуют специальные программы. Они не входят в стандартные дистрибутивы, так что их придется устанавливать отдельно. Такие программы работают резидентно, то есть в режиме сетевой службы и поэтому могут поддерживать сеанс даже после того, как пользователь отключился.

Tmux (terminal multiplexor) — популярная программа, значительно
облегчающая работы в терминале на удаленной машине. Среди
возможностей данной программы:

  • разделение экрана на несколько консолей
  • создание нескольких экранов
  • сохранение выполняющихся процессов на удаленной машине после выхода из сессии
  • расшаривание ssh сессий нескольким пользователям

То есть кроме поддержания сессии tmux сильно “прокачивает” стандартную командную строчку. Это очень упрощает и ускоряет сложную работу на сервере.

Для начала работы необходимо подключиться к удаленной машине по ssh.
Конечно, можно использовать программу tmux на локальной машине для
расширения возможностей терминала, но здесь мы рассмотрим возможности
этой программы при удаленном доступе к терминалу.

При необходимости нужно установить tmux, введя команду

Обратите внимание, что эта программа должна быть установлена именно на той машине, на которой вы будете выполнять команды. То есть, если вы планируете использовать ее для работы на удаленном сервере, то именно в нем она и должна быть установлена. Если она есть только на вашей локальной машине, на сервере она не заработает.

Теперь можно запустить tmux, введя одноименную команду:

На экране мы видим главное окно программы tmux:

Сочетание клавиш <Ctrl>+B позволяет вводить команды tmux. Наиболее
применимые команды:

  • ctrl-b c — запуск нового окна;
  • ctrl-b , — переименование окна;
  • ctlb-b p — переключение к предыдущему окну;
  • ctlb-b n — переключение к следующему окну;
  • ctlb-b w — вывести список окон;
  • ctlb-b % — разделение окна вертикально на две панели;
  • ctlb-b “ — разделение окна горизонтально;
  • ctlb-b d — отсоединиться от сессии;

Обратите внимание, сначала надо зажать <Ctrl>+B именно как комбинацию клавиш. Потом отпустить и сразу нажать клавишу, соответствующую нужной команде. Поначалу такая работа покажется очень неудобной, но со временем вы привыкните к такому оригинальному методу ввода команд.

Обратите внимание на нижнюю строчку. Здесь перечислены открытые окна
терминала. Можно воспринимать их как вкладки, по которым можно
перемещаться. Мы можем создать новое окно (ctrl-b c):

Теперь мы видим, что в нижней строке появилось окно 1. Звездочкой
обозначено текущее окно.

Мы можем также переименовать окно (ctrl-b ,), чтобы лучше ориентироваться. Это бывает полезно для организации рабочего пространства.

Теперь мы имеем второе окно (под номером 1, так как нумерация начинается с 0) с именем window1.

Давайте для иллюстрации запустим в первом окне команду htop:

Tmux позволяет вывести список всех созданных окон (ctrl-b w), в котором можно
перемещаться между ними. Также доступен предварительный просмотр
содержимого каждого окна:

Работая в этой программе можно также разделять пространство в отдельно
взятом окне на две панели. В каждой панели можно работать независимо,
вводить команды и наблюдать результат одновременно.

Текущее окно или панель можно разбить на две панели как вертикально (ctrl-b %), так и горизонтально (ctrl-b «). Панели можно дробить неограниченное число раз:

При выполнении команды exit (или ctrl-d) панель закрывается.

Если эта панель была единственной в окне — то закроется все окно, а если окно было единственным — программа tmux завершится.

Еще одной возможностью tmux является работа с сессиями. Если
использовать сессии, то вместо выхода из сессии подключения
к удаленной машине можно отключиться от сессии, а при повторном
подключении сессия сессия сохранит свое состояние. То есть, все
процессы, запущенные на удаленной машине так и будут продолжать
выполняться.

Для запуска сессии необходимо запустить tmux со специальным параметром, указав имя сессии:

Запустим в этой сессии какой-нибудь интерактивный процесс:

Нажав сочетание клавиш ctrl-b d, отсоединимся от сессии:

При помощи команд терминала можно убедиться, что программа, которую мы запустили все еще работает, несмотря на то, что мы вышли из
родительского процесса.

Можно даже выйти из подключения к удаленной машине и спустя некоторое
время зайти обратно.

При запуске tmux можно вывести список всех открытых сессий:

Соответственно, можно вместо запуска нового терминала подключиться к
одной из существующих сессий:

Как мы можем наблюдать, терминал остался в том же состоянии, в котором мы его оставили, когда выходили из сессии:

Выводы:

  1. При отключении от удаленного хоста все запущенные процессы завершатся.
  2. Иногда нужно запустить процесс так, чтобы он продолжался на сервере после отключения.
  3. Для этого существуют специальные резидентные программы, например, tmux.
  4. Tmux организует сессии, которые продолжаются даже после отключения пользователя.
  5. Также вы можете продолжать работу с того места, с которого отключились.
  6. Tmux позволяет создавать несколько вкладок, разбивать окно терминала на области.
  7. Tmux сильно упрощает работу с терминалом и с удаленными серверами.
  8. Для работы tmux должен быть установлен на удаленном сервере.

Перейти к содержанию

На чтение 3 мин Опубликовано 15.01.2019


Системы Windows претерпели много улучшений, поэтому вам не нужно устанавливать инструмент, но вы можете использовать доступные средства.

В этом уроке мы узнаем, как подключить Linux-машину из Windows с помощью встроенных инструментов.

Содержание

  1. Что нужно знать о SSH
  2. 2) Соединение SSh с Windows Powershell и командной строкой
  3. а) SSh из Windows Powershell
  4. б) SSH из командной строкой

Что нужно знать о SSH

Secure Shell – это защищенный и зашифрованный протокол соединения, позволяющий осуществлять удаленный и безопасный вход по незащищенным соединениям.

Соединение работает в режиме клиент-сервер, поэтому соединение устанавливается клиентом SSH, подключающимся к серверу SSH.

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

  • Пароль: SSH работает как обычный процесс для локального компьютера, что означает, что вам нужно иметь имя пользователя и пароль существующей учетной записи на сервере.
  • Открытый ключ: принцип состоит в том, чтобы иметь пару открытый ключ криптографического ключа и закрытый ключ, где открытый ключ сконфигурирован на сервере, чтобы разрешить доступ и предоставить любому, у кого есть копия закрытого ключа, доступ к серверу.

1) Установить функцию OpenSSH в Windows 10 клиенте

Компьютеры с Windows теперь позволяют вам использовать собственные инструменты для установки SSH-соединения, но сначала вам нужно убедиться, что установлена функция Openssh Windows Client.

Обычно он не устанавливается по умолчанию, поэтому сначала вам нужно будет это сделать

Зайдите в Windows -> Settings -> Apps -> Manage optional feature 

Нажмите Add a feature 

Выберите OpenSSH Client и установите

2) Соединение SSh с Windows Powershell и командной строкой

Теперь вы можете использовать командную строку или Windows PowerShell для доступа к вашему Linux-серверу через ssh.

а) SSh из Windows Powershell

Собственный инструмент Windows Powershell позволяет удаленно подключаться к серверу через ssh.

Вы просто должны открыть его с Windows + R, а затем нажмите клавишу A

Теперь введите команду ssh для подключения к удаленному серверу Linux: ssh root@hostname-or-ip-address

б) SSH из командной строкой

Чтобы удаленно получить доступ к вашему серверу с помощью команды, вам просто нужно запустить его с помощью комбинации клавиш Windows + r и затем ввести cmd

Теперь в командной строке вы можете использовать команду ssh, как в случае с powershell

Теперь вы знаете, как можно подключиться к удаленному серверу Linux с помощью SSH с помощью встроенных в Windows инструментов.

Вы также можете использовать инструмент putty, но теперь проще и удобнее использовать инструменты, предлагаемые по умолчанию.

Пожалуйста, не спамьте и никого не оскорбляйте.

Это поле для комментариев, а не спамбокс.

Рекламные ссылки не индексируются!

SSH — защищенный протокол для удаленного доступа к компьютерам. Через SSH можно выполнять операции в командной строке компьютера, который физически находится в другом месте.

Иными словами, SSH — это дистанционная командная строка. Визуально вы работаете на своем компьютере, но в реальности — на другом.

  • Что значит «протокол»?
  • Что значит «защищенный протокол»?
  • Для чего нужен SSH?
  • Как подключаться по SSH?
  • Подключение по SSH по паролю
  • Подключение по SSH по ключу, без пароля
  • ssh-agent
  • Форвардинг (проброс) ключей
  • Частые вопросы
  • Дополнительные ссылки

Что значит «протокол»?

Протокол — это набор соглашений, правил, по которым разные программы могут обмениваться информацией. SSH — это набор правил, который известен и вашему компьютеру, и физически отдаленному компьютеру.

Пример: вы вводите команду удаления файла. Эта команда передается на другой компьютер и выполняется там. Ответ (или сообщение об ошибке) возвращается и показывается на вашем компьютере.

Что значит «защищенный протокол»?

По такому протоколу работают сайты с HTTPS и онлайн-банкинг. При защищенном соединении все данные передаются в зашифрованном виде. Даже если злоумышленник перехватит информацию, он не сможет расшифровать ее.

Для чего нужен SSH?

Не всегда есть возможность физически находиться у компьютера, с которым нужно работать. Например, если вы хотите создать свой сайт, то он будет размещен на компьютере хостинг-провайдера. Этот компьютер может находиться на другом конце света. Чтобы запускать команды с него без физического доступа, вам понадобится SSH-ключ.

Как подключаться по SSH?

Для подключения к удаленной машине по SSH нужен клиент — специальная программа. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, поэтому достаточно просто открыть терминал.

Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт. Вот как выглядит команда при использовании консольного клиента (в терминале):

ssh username@remote_host -p port

Например, для подключения к серверу 52.307.149.244 в аккаунт ivan нужно ввести:

ssh ivan@52.307.149.244

Если не указывать порт, то будет использован порт SSH по умолчанию — 22. Используемый порт задается при настройке SSH-сервера — программы, которая запущена на удаленном компьютере и ожидает подключения извне.

Fingerprint

При первом подключении появится сообщение:

The authenticity of host '52.307.149.244 (52.307.149.244)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Введите yes в первый раз.

Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов — fingerprint («отпечатки пальцев»). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Представьте, что кто-то внёс изменения в систему, например:

  • Переустановил SSH-сервер
  • Переустановил всю операционную систему
  • Заменил удаленный компьютер, сохранив его адрес

Даже в этом случае вы заметите изменения, потому что fingerprint тоже изменится.

Если fingerprint не меняется, то такое сообщение не будет появляться.

Подключение по SSH по паролю

Простейший вариант — подключение по паролю. После ввода команды ssh система запросит пароль:

ivan@52.307.149.244's password:

Пароль придется вводить каждый раз.

Подключение по SSH по ключу, без пароля

Для удобного подключения по SSH (и многим другим сервисам) без ввода пароля можно использовать ключи.

Нужно создать пару ключей: приватный (закрытый) ключ и публичный (открытый) ключ. Приватный ключ нужно хранить и никогда никому не показывать. Публичный ключ можно показывать всем и распространять свободно.

Эти ключи связаны друг с другом таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим. Например, если ваш друг зашифрует письмо вашим публичным ключом, то прочитать его сможете только вы, потому что для этого нужен ваш приватный ключ. И наоборот: если вы зашифруете что-то своим приватным ключом, то расшифровать его можно только вашим публичным ключом. Так как публичный ключ доступен всем, любой может расшифровать это сообщение. Но он может быть уверен, что сообщение пришло именно от вас. В этом заключается идея цифровой подписи.

Генерация ключей

Создадим пару ключей:

ssh-keygen

Программа запустится и спросит, куда сохранять ключи:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Нажмите Enter для сохранения в стандартное место — директорию .ssh/id_rsa в вашей домашней директории.

Программа запросит passphrase. Это вроде пароля для ключа. Можно просто нажать Enter и пропустить этот шаг. Или ввести passphrase — тогда его нужно будет вводить каждый раз, когда используется ключ.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Ключи созданы:

Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       +         |
|      o S   .    |
|     o   . * +   |
|      o + = O .  |
|       + = = +   |
|      ....Eo+    |
+-----------------+

Теперь у вас есть два файла:

  • ~/.ssh/id_rsa — приватный ключ. Никогда никому и никуда не передавайте его!
  • ~/.ssh/id_rsa.pub — публичный ключ. Спокойно распространяйте его.

В Windows можно использовать ssh-gen в подсистеме Ubuntu for Windows или в командной строке Git for Windows.

Загрузка публичного ключа на сервер

Нужно добавить публичный ключ на сервер в файл ~/.ssh/authorized_keys. Самый простой способ — запустить на локальной машине команду для копирования ключа:

ssh-copy-id -i /home/demo/.ssh/id_rsa.pub ivan@52.307.149.244

Другой способ — подключиться по паролю, открыть в редакторе файл ~/.ssh/authorized_keys и добавить в конец текст из вашего файла ~/.ssh/id_rsa.pub.

Теперь при подключении пароль запрашиваться не будет1.

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

ssh-agent

При работе с ключами возможны две неудобные ситуации:

  1. Если при создании ключа вы указали passphrase (пароль для ключа), то вам придется вводить пароль при каждом подключении
  2. Если у вас есть несколько ключей для разных целей, то при соединении по ssh придется указывать нужный ключ вручную

ssh-agent решает эти проблемы. Этот агент аутентификации (authentication agent) работает на фоне в *nix-системах. В некоторых других системах приходится устанавливать и настраивать его автозапуск самостоятельно.

Если добавить ключ к агенту, то:

  1. для него больше не будет спрашиваться passphrase
  2. не нужно будет вводить ключ вручную — он будет автоматически использован при соответствующем подключении

ssh-add /home/demo/.ssh/id_rsa добавит ключ id_rsa в запущенный в системе агент. Если у него есть passphrase, то агент попросит ввести его.

Если запустить ssh-add без аргументов, то будут добавлены ключи ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 и ~/.ssh/identity.

Список добавленных в агент ключей можно посмотреть командой ssh-add -L:

→ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC91r/+5WEQHcxVMrxpP9jKuONjlrnEHshfG3v/ab2NKDSljdskODOIsdhaaoDoiSADhAaoDISHasoiDiASisjadOHISDdKJDASHSidshIHDSIHDIAsdjasAs7XG/drBhi16zQ2e8VcLD7bVQS1Cpo0O1tP+93YQBvcIE02RltqVKYo7BlgCaJzpdowK8fHSzpfCYsEFjdjosOjfdsjdjkAJOKkKKHJHhaIiAiaihsiIoqkpqdmlnvnuuUSCaAS8aDhajiadiiAahhakKAKDHAKurmD08jnX9HfH/d15pLK/Glo1Su6iEOU3bW8k92QlY54pPFLKiNRPFuUryE5md7T /Users/demo/.ssh/some_key.pem
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsLC9WpSZ/9YpQ2z1FTSsORcP+ohzCdVjYaoc3C0fRnUbkp4SnvMHFTHNFFod0FhV0cQcOLvBsZAK/0tUPIXeDDFvYD70r5i0AsQbqA0k7gK3b3MP7tmnPxMHd607TI+1FMO54Yig0vnpZOgKmgCsxWq6tckwyLB91BlPiGxLBZiu5yPDIguEQCSnAwkF0vjqrNGsoHB4+fkj0USfjiifsjihf39hifSIHiJFHSijshfj39jfsjisfiisfiissr893IFsifijfsjSOIiAShadfhssU0q0JpjaDEWcMmYXmuz3xSnbhkueGLBXMU2zXDFDWCDSHq9/oRr29UAfVaHAMw== /Users/demo/.ssh/id_rsa

ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.

Форвардинг (проброс) ключей

Представим, что вы подключились к удаленному серверу X. Дальше вы хотите подключиться с него к другому серверу Y — например, чтобы сделать git pull с GitHub. В этом случае придется держать копию ваших ключей на сервере X.

Утилита ssh с флагом -A позволяет «пробросить» ключи с подключаемой машины в удаленную:

ssh -A ivan@52.307.149.244

Ключи, добавленные к агенту аутентификации (ssh-agent), станут доступными на удаленном сервере. При этом файлы-ключи физически не будут находиться на сервере.

Частые вопросы

Чем Telnet отличается от SSH?

Telnet это конкретная программа с графическим интерфейсом, с помощью которой можно соединяться по SSH. Обычно ей пользуются только Windows пользователи, в Linux и MacOS используют консольную утилиту ssh.

Дополнительные ссылки

  1. Основы SSH / Видео на канале Хекслета
  2. SSH Essentials: Working with SSH Servers, Clients, and Keys
  3. Памятка пользователям ssh

  1. Возможность и специфика подключения по ключу зависит от настроек SSH-сервера. Возможно такое, что подключение по ключу запрещено администратором.

Рахим Давлеткалиев

Like this post? Please share to your friends:
  • Ssh не является внутренней или внешней командой windows 10
  • Ssh клиент для командной строки windows
  • Ssh клиент для windows с графическим интерфейсом
  • Ssh клиент для windows на русском
  • Ssh клиент для windows server 2016