ControlMaster
Если вы подключаетесь к удаленному хосту SSH с использованием других методов аутентификации, кроме аутентификации на основе ключей, например двухфакторной, на основе пароля или ключа SSH с парольной фразой, вам может потребоваться вводить необходимую информацию несколько раз.
Вместо того, чтобы открывать несколько соединений SSH, вы можете использовать опцию (только на клиентах macOS/Linux), чтобы повторно использовать существующее соединение и сократить количество раз, когда вы должны вводить вашу фразу-пароль.
Чтобы использовать эту функцию, добавьте следующее в ваш конфигурационный файл SSH:
Использование секретного ключа для подключения по SSH
Этот раздел посвящен настройке SSH-клиентов для аутентификации по RSA-ключам на сетевом оборудовании (или другом оборудовании, при условии, что оборудование и ПО поддерживает аутентификацию по публичным ключам). Мы рассмотрим настройку использования публичного ключа в самых популярных программах: SecureCRT и PuTTY.
SecureCRT
В окне настроек SSH есть список Authentication. В нём необходимо увеличить приоритет PublicKey до самого высокого — сделать верхним в списке.
Затем перейдите в параметры PublicKey и выберите файл приватного ключа. Самый верхний переключатель позволяет использовать глобальные настройки секретного ключа или сеансовые настройки — другой секретный ключ (ключ не по умолчанию) — только для этого подключения.
Настраиваем глобальный публичный ключ: в меню Options → Global options → Категория SSH2.
PuTTY
В настройках SSH (Connection → SSH → Auth) в поле “Private key file for authentication” укажите файл Putty Private Key (*.ppk):
MAC OS X
Настройка стандартного клиента для использования публичных ключей:
- Подключение с нестандартным ключом (non-default key), указанным вручную: artemiy-2:~ ArtemiySP$ ssh -i ~/Documents/python/r4 The authenticity of host ‘10.31.73.29 (10.31.73.29)’ can’t be established. RSA key fingerprint is SHA256:fxOLFKU6YGyIqisrIh2P0O52Rr6Wx/wsSAcHsTz8fo0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘10.31.73.29’ (RSA) to the list of known hosts. CSR-4#
- Подключение с нестандартным ключом (non-default key), указанным вручную: artemiy-2:~ ArtemiySP$ ssh -i ~/Documents/python/r5 The authenticity of host ‘10.31.73.30 (10.31.73.30)’ can’t be established. RSA key fingerprint is SHA256:4l67C4Il4pTaqYT4vrtWr0aY7rPmNWKsjRv2zlYtQIU. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘10.31.73.30’ (RSA) to the list of known hosts. MGTU#exit Connection to 10.31.73.30 closed.Ошибка примера
Я не смог сделать снимок с запросом пароля — пароль записался в открытую сессию пользователя. Для запроса пароля в MAC OS X — необходимо разлогиниться и залогиниться снова.
- Подключение с ключом по умолчанию (default key – система сама найдет и использует Default public key): artemiy-2:~ ArtemiySP$ ssh The authenticity of host ‘10.31.73.31 (10.31.73.31)’ can’t be established. RSA key fingerprint is SHA256:2/ysACJQw48Q8S45ody4wna+6nJspcsEU558HiUN43Q. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘10.31.73.31’ (RSA) to the list of known hosts. PR#exit Connection to 10.31.73.31 closed. artemiy-2:~ ArtemiySP$
Как упростить работу с SSH на MAC OS X:
- Создаём SSH Aliases.
- В SSH Aliases сразу задаём пользователей.
- Сразу прописываем местонахождение ключей.
Местонахождение Aliases и преднастроенная конфигурация SSH указаны в файле ~/.ssh/config (/Users//.ssh/config). Заполняется таким образом:
host r4 Hostname 10.31.73.29 Port 22 User r4 IdentityFile ~/Documents/python/r4 host r5 Hostname 10.31.73.30 Port 22 User r5 IdentityFile ~/Documents/python/r5 host r6 Hostname 10.31.73.31 Port 22 User r6 Примечание: у меня некорректно настроено подключение по умолчанию (как правильно, я не знаю), потому что подключение к хосту R6 (10.31.73.31) выполняется очень долго. Рекомендуется указать сразу указать путь к ключу по умолчанию.
Пример подключения по ssh используя публичные ключи и файл config:
artemiy-2:Documents ArtemiySP$ ssh r5 MGTU#exit Connection to 10.31.73.30 closed by remote host. Connection to 10.31.73.30 closed. artemiy-2:Documents ArtemiySP$ ssh r4 CSR-4#exit Connection to 10.31.73.29 closed by remote host. Connection to 10.31.73.29 closed. artemiy-2:Documents ArtemiySP$ ssh r6 PR#exit Connection to 10.31.73.31 closed. artemiy-2:Documents ArtemiySP$ ssh r6 PR#
Локальный способ для Linux (ssh)
Для всех исходящих SSH сессий
Если такая проблема присутствует у вас при подключении к различным серверам и везде рвутся соединения после определенного периода бездействия, то скорей всего проблема на вашей стороне. Исправить это можно явно задав соответствующие опции для .
Для этого открываем файл и в самый низ этого файла добавляем следующие строчки:
— Данный параметр определяет как часто ваш ПК с которого установлена SSH сессия (клиент) будет отправлять на сервер SSH к которому вы подключились пакет, говорящий «я живой». В нашем примере это будет происходить каждые 60 секунд. — Данный параметр определяет, сколько раз такой пакет «я живой» будет отправлен на сервер в том случае, когда от сервера не последовало ответа, прежде чем принудительно разорвать соединение. В нашем примере 5 раз.
С такими настройками сессия будет висеть 60 * 5 = 300 секунд, после чего автоматически оборвется (только в случае, когда сервер вам не отвечает 5 раз подряд).
После внесения этих изменений, к любому новому соединению через или должны применяться эти настройки.
Для выборочных исходящих SSH сессий
Если вы не хотите менять параметры для ssh через файл конфигурации, то существует способ указывать эти настройки только для определенных хостов, для этого вводим команду для соединения вот таким образом:
9 ответов
Лучший ответ
- В вашем профиле GitHub есть кнопка . Он расположен в правом верхнем углу веб-страницы.
- Нажмите на нее, и вы увидите левое меню .
- Внутри этого меню найдите параметр и нажмите его.
- Вы увидите опцию для добавления нового ключа.
27
Evgeny Karkan
24 Июл 2016 в 22:19
-
сгенерируйте свой ключ
SSH — серийник
-
Визуализируйте свои ключи
ls ~ / .ssh
id_rsa id_rsa.pub
-
Запустить агент
eval
-
Запустить агент
ssh-add ~ / .ssh / id_rsa
8
Waldeyr Mendes da Silva
22 Май 2018 в 16:06
Мне нужно было указать, какой хост будет использовать какой SSH-ключ. В папке SSH на локальном компьютере, обычно в разделе , создайте / отредактируйте файл с именем , используя предпочтительный редактор, например vim или gedit .
И добавьте следующее с вашими git Host , HostName и ssh IdentityFile (путь к файлу закрытого ключа ssh):
3
Waqleh
23 Июл 2018 в 17:06
Получил после того, как потратил много времени …
В принятом ответе Shravan40 все было нормально, но я, идиот, добавил на github.com новый репозиторий с добавлением нового README.md, и это вызвало ошибку
После множества попыток я добавил новый репозиторий без нового README.md, и все было в порядке, но я не знаю причины. До вчерашнего дня при новой попытке я наконец заметил это …
Итак, мое решение в дополнение к ответу Shravan40s:
Может это кому то поможет …
-1
Ulli H
29 Июл 2016 в 14:43
За свой короткий опыт использования git с Linux я обнаружил, что есть два простых ответа на эту ошибку.
Запустите эти команды в этом порядке
Это изменит конфигурацию вашего файла конфигурации для использования источника HTTPS вместо SSH.
Теперь попробуйте запустить команды push или pull.
ИЛИ
Перезагрузите виртуальную машину Linux (если вы ее используете) и / или хост-машину. Перезагрузка неоднократно решала проблему.
-1
Blusteel408
6 Мар 2020 в 19:44
У меня была такая же проблема с моим ssh-соединением. Я пробовал работать через ssh, но не нашел рабочего решения. Итак, в этом случае я изменил свой удаленный URL-адрес с SSH на HTTPS. Я использовал команду: . Вы можете увидеть, что ваш удаленный URL-адрес изменился, используя: .
Более подробную информацию можно найти здесь
Это изменит ваш удаленный URL-адрес на HTTPS, поэтому теперь вам нужно будет ввести свое имя пользователя и пароль GitHub, чтобы отправить свой проект в удаленное репо. Я знаю, что ssh проще, чем HTTPS, что означает, что вам не нужно вводить свое имя пользователя и пароль, но это может быть полезно, если вы не нашли решения для его исправления через ssh, и вы спешите, чтобы код в ваше репо.
5
shreeshr
9 Ноя 2019 в 17:52
- Сгенерируйте ключ SSH с помощью .
- Скопируйте вывод в буфер обмена
- Вставьте скопированный выше вывод в форму по адресу https://github.com/settings/ssh/new
27
Shravan40
17 Май 2020 в 12:17
-
убедитесь, что вы правильно назвали файлы «открытый ключ» и «закрытый ключ»; в точности как «id_rsa» и «id_rsa.pub». Это то, что вы можете найти в папке users / .ssh.
-
добавить публичный ключ в GitHub
-
Перезагрузите терминал (поддерживается bash) и попробуйте снова клонировать
Если у вас есть доступ для записи в репо, вы должны быть готовы выполнить эти изменения.
Говоря по опыту (потратив час), я не смог найти ни на одном форуме информации, в которой говорилось бы, что мы должны явно сохранять имена частного и общедоступного файла, как указано выше.
Удачного кодирования!
Vikas Pandey
21 Сен 2017 в 17:13
Если кто-то из вас сталкивается с такой же проблемой на Bitbucket, то вот решение:
Проблема: —— Демо @ L90TQCLQ MINGW64 / u / works (мастер) $ git clone ssh: //git@bitbucket.internal.abc.com: 5449 / rem / jenkinspipeline.git Клонирование в jenkinspipeline … git@bitbucket.internal.abc.com: В доступе отказано (публичный ключ). фатальный: не удалось прочитать из удаленного репозитория .
Убедитесь, что у вас есть правильные права доступа и репозиторий существует.
Решение: Демо @ L90TQCLQ MINGW64 / u / works (мастер) $ cat
Перейти к: https: //bitbucket.internal. abc.com/plugins/servlet/ssh/projects/REM/repos/jenkinspipeline/keys 1) Добавить ключи Скопируйте / вставьте туда значение ключа id_rsa.pub:
Готово! Теперь вы можете клонировать репозиторий git
KDemo @ L90TQCLQ MINGW64 / u / works (master) $ git clone ssh: //git@bitbucket.internal.abc.com: 5449 / rem / jenkinspipeline.git Клонирование в ‘jenkinspipeline’ … удаленный: Перечисление объектов: 1146, сделанный. удаленный: Подсчет объектов: 100% (1146/1146), готово. remote: Сжатие объектов: 100% (987/987), готово. удаленный: Всего 1146 (дельта 465), повторно используется 0 (дельта 0) Принимающие объекты: 100% (1146/1146), 149,53 КБ | 172.00 КБ / с, готово. Разрешение дельт: 100% (465/465), выполнено.
nk07
12 Дек 2019 в 10:57
Назначение ssh_config
В ежедневной работе системного администратора использование ssh-клиента (OpenSSH client) — обычная практика. Однако, прописывание длинных и сложных команд по конфигурированию параметров SSH вручную, в командной строке в терминале, отнимает у специалиста много лишнего времени. Начинающие администраторы, инженеры и пользователи Linux возможно не знакомы с таким простым и удобным способом настройки параметров SSH, как использование файла ssh_config.
В каких же случаях вам необходим ssh config? Представьте себе ситуацию, когда ваша задача — ежедневное подключение к нескольким удаленным серверам, причем с различными настройками (IP-адресом, логином и паролем, номерами портов и другими параметрами командной строки). Согласитесь, что вводить каждый раз все эти данные вручную — это нерациональная трата рабочего времени. Как же решить такую проблему? Одно из возможных решений — создание ssh bash alias (псевдонима) для каждого соединения с удаленным сервером. Однако, можно предложить более оптимальный вариант — создать файл конфигурации для каждого пользователя, в котором будут храниться различные параметры SSH для каждого удаленного хоста, к которому вы будете подключаться.
В данной статье мы рассмотрим настройку файла ssh_config только для клиента OpenSSH на локальной машине пользователя (не затрагивая установки на удаленном сервере).
Установка
Установите пакет .
Совет:
- Можно использовать Google Authenticator c sshfs для дополнительной безопасности.
- Также можно использовать SSH keys вместо традиционного ввода пароля.
Монтирование
Для того, чтобы примонтировать каталог, используя SSH, пользователь должен иметь доступ к нему. Монтирование удаленной директории:
$ sshfs host: mountpoint
Например:
$ sshfs myuser@mycomputer:/remote/path /local/path -C -p 9876
Где является номером порта, — использование сжатия. Для дополнительных опций смотрите раздел .
Если не указан путь, то по умолчанию он указывает на удаленную домашнюю директорию пользователя. Имя пользователя по умолчанию и опции могут быть заданы в . Смотрите .
SSH запросит пароль, если необходимо. Если вы не хотите постоянно вводить пароль, прочитайте SSH keys.
Настройка файла известных пользователю хостов
Файл известных хостов позволяет клиенту аутентифицировать удаленные серверы. Он содержит список ключей для удаленных серверов, к которым подключился пользователь. Это помогает пользователю убедиться, что он не подключается к неправильным удаленным серверам. Каждый раз, когда вы устанавливаете ssh-соединение с удаленным сервером, он показывает вам открытый ключ и подтверждение соответствующего закрытого ключа.
Отпечатки удаленного сервера добавляются в файл know_hosts , если у вас их еще нет, так что каждый раз, когда вы обращаетесь к одному и тому же серверу, он сверяется с существующим отпечатком. Вот почему, если вы переустановите удаленный сервер и снова попытаетесь подключиться к нему по ssh, вы получите предупреждение о неизвестном отпечатке пальца, поскольку он мог измениться в процессе переустановки. Эта проверка выполняется с помощью параметра StrictHostKeyChecking . Вы также можете передать известный путь к файлу hosts.
Как редактировать файл на другом компьютере через ssh
Когда нужно отредактировать файл, размещённый на удалённом хосте, было бы здорово, если бы можно было отредактировать его локально так, будто бы это локальный файл. Конечно, можно поднять NFS через ssh туннель для достижения этого, но это было бы слишком излишним для использования один раз. Отсюда вопрос: есть ли способ отредактировать через ssh размещённый на другом компьютере файл?
Вот когда vim (сокращение от «Vi IMproved» — улучшенный Vi) может помочь. vim можно рассматривать как «vi на стероидах», с расширяемыми функциями, которые здорово улучшают дефолтное окружение редактора vi. Расширяемость vim достигается благодаря использованию «плагинов». Один из таких плагинов — это netrw, который задействует чтение и запись файлов по сети. netrw поддерживает различные протоколы уровня приложений, включая ftp, http, scp, rsync и rcp.
Если вы хотите отредактировать удалённый файл через ssh с использованием vim, вы можете сделать так.
sudo apt install vim vim scp://ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ_ХОСТ//home/user/path/file
Реальный пример команды:
vim scp://root@192.168.1.123//root/prs.txt
Обратите внимание на двойной слеш «» для каталога root на удалённом хосте. Вышеприведённая команда vim откроет файл, размещённый на удалённом хосте для редактирования
За сценой, vim использует scp для получения запрошенного файла с удалённого хоста, размещает файл в /tmp и, наконец, открывает его для редактирования.
Когда вы попытаетесь сохранить изменения в файле, изменения, в первую очередь, будут применены к локальной копии в /tmp, которая затем выгрузиться через scp на удалённый хост.
Поскольку за сценой сетевая передача осуществляется плагином netrw, вы можете редактировать любой удалённый файл транспарентно, используя традиционный интерфейс vi.
Внимание, этот фокус не работает в Cygwin — только в настоящем Linux.
Проверьте, что вы подключились к нужному серверу
Будьте внимательны при вводе команд с клавиатуры. В некоторых случаях корпоративная сеть может привести к проблемам разрешения записи DNS.
Для того, чтобы убедиться в том, что вы подключаетесь к нужному домену, введите следующую команду, добавив в строке номер порта :
ssh -vT ‘-p 25000’ OpenSSH_7.1p2, OpenSSL 1.0.2g 1 Mar 2016 |
Как выбрать интерфейс (IP) для прослушивания
В системе может быть несколько сетевых интерфейсов с несколькими IP адресами, по умолчанию sshd прослушивает их все, в том числе IPv6 адреса:
ListenAddress 0.0.0.0 ListenAddress ::
Если вы хотите, чтобы компьютер в локальной сети был доступен только для устройств в локальной сети, то можно указать его локальный IP:
ListenAddress 192.168.1.20
Кстати, смотрите статью «Как настроить Kali Linux на использование статичного IP адреса».
Директиву ListenAddress можно использовать несколько раз в одном конфигурационном файле. Разрешены следующие форматы:
ListenAddress hostname|address ListenAddress hostname:port ListenAddress IPv4_address:port ListenAddress :port
Если порт не указан, то sshd будет прослушивать на указанном порту в соответствии со всеми установленными опциями Port в этом файле.
Квалификатор rdomain является необязательным, он имеет отношение к маршрутизации.
Также обратите внимание, что с ListenAddress обязательно должен быть указано имя хоста (адрес) ИЛИ порт. Можно указать отдельно имя хоста (адрес), можно указать отдельно порт, а также можно указать их вместе
Во всех вариантах rdomain может отсутствовать.
Опции командной строки (об их использовании далее) имеют приоритет над директивами конфигурационного файла. В том числе опция для установки используемого порта приводят к тому, что Port в конфигурационном файле игнорируется. Но порты указанные с ListenAddress перезаписывают порты в строке команды.
Вы можете указать конкретный IP, который будет прослушиваться в ожидании подключений. А опцией AddressFamily вы можете выбрать для прослушивания все адреса, только IPv4 или только IPv6:
AddressFamily any
Варианты:
- any (по умолчанию — любые адреса),
- inet (использовать только IPv4),
- inet6 (использовать только IPv6),
Автомонтирование
Автоматическое монтирование происходит при загрузке или по запросу (для получения доступа к каталогу). В любом случае настройка будет происходить в fstab.
Примечание: Запомните, что автоматическое монтирование выполняется с правами суперпользователя, поэтому вы не можете использовать обычного пользователя.
Чтобы разрешить суперпользователю использовать ключ SSH обычного пользователя, нужно указать полный путь в опции .
Самое главное — используйте хотя бы раз каждую примонтированную файловую систему sshfs в режиме суперпользователя, таким образом подписи хоста будут добавлены в файл .
По запросу
Посредством systemd можно монтировать по запросу, используя .
Например:
user@host:/remote/folder /mount/point fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/user/.ssh/id_rsa,allow_other,reconnect 0 0
Главные опции — noauto,x-systemd.automount,_netdev.
- noauto — монтирование не будет происходит при загрузке.
- x-systemd.automount — делает магию, связанную с запросом.
- _netdev — показывает, что это сетевое устройство, а не блочное (без этой опции может появится ошибка «No such device»)
Примечание: После редактирования , (пере)запустите соответствующий сервис: ; можно найти , используя
При загрузке
Пример того, как использовать sshfs для монтировании удаленной файловой системы при помощи
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs defaults,_netdev 0 0
Для примера возьмите линию из fstab
llib@192.168.1.200:/home/llib/FAH /media/FAH2 fuse.sshfs defaults,_netdev 0 0
Выше приведенная строка будет работать только в том случае, если вы используете SSH ключ. Смотрите SSH keys.
Если вы не единственный пользователь, использующий sshfs:
user@domain.org:/home/user /media/user fuse.sshfs defaults,allow_other,_netdev 0 0
Очень важно убедится в том, что параметр _netdev установлен, чтобы быть уверенным в доступности сети перед монтированием.
Безопасный доступ пользователей
Когда используется автомонтирование через fstab, файловая система будет монтироваться от суперпользователя. По умолчанию, это приводит к нежелательным результатам, если вы хотите получать доступ как обычный пользователь и ограничить доступ другим пользователям.
Пример конфигурации:
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,follow_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0
Описание опций:
- allow_other — позволяет другим пользователям, отличным от монтирующего (то есть обычным пользователям), получать доступ к тому, что монтируется.
- default_permissions — позволяет ядру проверять права, иначе говоря использовать актуальные права на удаленной файловой системе. А также запрещает доступ всем, кроме объявленных в allow_other.
- uid, gid — устанавливает владельца файлов в соответствии с переданными значениями; uid — это числовой идентификатор пользователя, gid — числовой идентификатор группы пользователя.
Принцип работы ssh_config
Параметры конфигурации SSH соединения можно прописать с помощью трех указанных ниже способов*:
- в опциях, задаваемых с помощью командной строки;
- в настройках файла конфигурации конкретного пользователя ~/.ssh/ssh_config;
- в общесистемном конфигурационном файле (для всех пользователей данного локального компьютера) /etc/ssh/ssh_config;
*Примечание: наибольший приоритет имеет командная строка, затем идет ~/.ssh/ssh_config и в последнюю очередь уже /etc/ssh/ssh_config.
Покажем на простом примере, как создать и отредактировать под Ubuntu ssh config file для конкретного пользователя локальной машины.
Если файл ssh_config не создан, то необходимо его создать с помощью команды:
touch ~/.ssh/config
На следующем этапе нужно отредактировать данный файлв nano ~/.ssh/config таким образом:
Host freehostUA HostName 178.20.153.253 Port 22 User root
Где: Host — это alias (псевдоним) для нашего SSH-соединения, HostName — IP адрес VPS (или имя хоста, если включен DNS), Port — номер порта, User — имя пользователя.
С помощью несложных настроек мы создали alias для нашего VPS на FREEhost.UA, таким образом, соединиться с нашим удаленным сервером можно будет с помощью простой команды в терминале:
ssh freehostUA
Ниже опишем, что означают параметры, используемые в ssh_config, а также дадим примеры типовых настроек.
Linux подобную ОС Ubuntu можно установить на наш VPS хостинг.
Параметры ssh_config
Все параметры, которые вы сможете использовать в работе с файлом ssh_config можно посмотреть, выполнив команду:
man ssh_config
Для решения типовых задач в работе системного администратора советуем обратить внимание на следующие параметры настроек*:
- Host — alias (псевдоним), произвольное наименование хоста.
- HostName — IP адрес удаленного сервера или имя хоста (если настроен DNS).
- Port — номер порта (если он нестандартный, по умолчанию используется порт 22).
- User — имя пользователя.
- IdentityFile — указывается путь к SSH-ключу, который используется для аутентификации при соединении с удаленным сервером (как правило, применяется в том случае, когда ключи не хранятся в директории «по умолчанию»).
- IdentitiesOnly — сообщает клиенту SSH, какой именно ключ следует использовать для аутентификации на сервере (а не любые ключи, которые находятся в папке для ключей «по умолчанию»). В некоторых случаях может использоваться вместе с параметром IdentityFile, если этот параметр прописан в файле ssh_config, то будут проверены все ключи, даже те, которые пользователь введет в командной строке.
- ServerAliveInterval и ServerAliveCountMax — ssh-клиент будет запрашивать ответ от удаленного хоста, даже если он не получает никаких данных в указанный интервал времени. Эти параметры помогут предотвратить сбрасывание соединения по причине отсутствия активности.
- CertificateFile — используется опционально, совместно с параметром IdentityFile для точного указания сертификата, который необходимо предоставить для аутентификации.
- PreferredAuthentications — параметр, который устанавливает в каком порядке будут использоваться методы аутентификации (по умолчанию: gssapi-with-mic, hostbased аутентификация, аутентификация на базе SSH-ключей, keyboard-interactive и вход по паролю).
- SetEnv и SendEnv — эти параметры разрешают ssh-клиенту передавать локальные переменные среды на указанный удаленный хост, при этом сервер должен быть настроен для приема этих переменных. Для этого системный администратор должен на удаленном сервере в файле /etc/ssh/sshd_config установить значение Yes для параметра AcceptEnv.
- HostKeyAlias — клиенту SSH дается указание использовать псевдоним ключа (key alias) из файла ~/.ssh/known_hosts вместо HostName. Данный параметр будет полезен для хостов с динамическими IP-адресами.
- ProxyJump — с помощью этой опции можно организовать SSH Jump Server (jump host или bastion host), используя флаг –J при написании команды.
- ForwardAgent и AddKeysToAgent — эта опция служит для организации безопасного проброса ключа (agent forwarding), позволяет осуществить доступ удаленного хоста к локальному SSH-агенту пользователя.
*Примечание: ниже покажем на примерах, как использовать данные опции в файле ssh_config.
Как установить SSH MITM
В качестве машины атакующего я буду использовать Kali Linux. Там уже имеются программы tshark, ettercap, arpspoof, nmap и iptables. Поэтому устанавливаем оставшиеся зависимости и SSH MITM следующим образом:
sudo apt install python3-netaddr python3-netifaces git clone https://github.com/jtesta/ssh-mitm cd ssh-mitm/ export LANG=en_US.utf-8 sudo ./install.sh
Обратите внимание на строку export LANG=en_US.utf-8 — если у вас система на английском языке, то эту строку можно пропустить. Она нужна поскольку будет скачен исходный код SSH и будет проверена его подлинность с помощью GPG
Но дело в том, что GPG выводит сообщения на языке системы, а проверка в установочном скрипте install.sh выполняется только для английского языка. В общем, если не выполнить эту команду, то установка не завершиться из-за того, что установочный скрипт будет всё время спотыкаться о проверку подписи.
Также ближе к концу установки программа напишет:
Kali Linux detected with no AppArmor installed. For added safety, it is highly recommended (though not required) that sshd_mitm is run in a restricted environment. Would you like to automatically enable AppArmor? (y/n) n
Я выбрал «n».
Автономный удаленный компьютер
В настоящее время это экспериментальная функция, но она будет включена по умолчанию в следующем выпуске.
Если вы ограничены брандмауэром или ваша компания блокирует ваши виртуальные машины, и они не могут подключиться к Интернету, расширение Remote-SSH не сможет подключиться к вашей виртуальной машине, поскольку VS Code должен загрузить компонент, называемый VS Code Server, на удаленную машину.
Однако теперь вы можете решить эту проблему с помощью нового пользовательского параметра в расширении Remote-SSH. Если вы включите параметр , расширение сначала установит VS Code Server на клиент, а затем скопирует его на сервер через SCP.
Создание файла конфигурации пользователя ssh
Теперь давайте создадим файл конфигурации (если он еще не существует) с профилем для указанного выше подключения и увидим разницу в подключении
Возможно, вам потребуется установить разрешения для файла конфигурации
Добавьте приведенный ниже контент в файл
Где:
- server1 — псевдоним удаленного сервера, используемый для ssh
- 192.168.50.2 — IP-адрес удаленной системы
- root — это имя учетной записи пользователя в удаленной системе, под которой мы будем входить.
- 20222 — это сервисный порт SSH, настроенный в удаленной системе.
После сохранения файла подключитесь к server1, как показано ниже. Вам будет предложено ввести пароль.
Как видите, нам нужно только запомнить имя профиля. Ssh будет искать соответствующую информацию в файле конфигурации и использовать определенные параметры для доступа. Вы можете добавить столько профилей, сколько сможете, как показано ниже: