Secure Shell

Secure Shell

Картинка к публикации: Secure Shell

SSH (Secure Shell)

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

История SSH началась в 1995 году, когда Финн Берглинд и Тату Юрнонен из фирмы SSH Communications Security начали разработку безопасного протокола для удаленного доступа. Их целью было создание более безопасной замены старого протокола Telnet, который отправлял пароли в открытом виде, что делало его уязвимым для атак хакеров.

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

Одним из основных преимуществ SSH является его безопасность. SSH использует шифрование для защиты данных, передаваемых через сеть, что делает его надежным и защищенным протоколом для удаленного доступа. Это также позволяет избежать необходимости в использовании VPN для удаленного доступа, что делает SSH более удобным в использовании.

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

Команды SSH


ssh

это команда, которую нужно использовать для установления соединения SSH с удаленным узлом. Команда выглядит следующим образом:

ssh [user]@[hostname or IP address]

где [user] - имя пользователя на удаленном узле, [hostname or IP address] - имя хоста или IP-адрес удаленного узла.

Команда ssh может использоваться с различными параметрами, которые позволяют настроить соединение с удаленным узлом. Ниже перечислены некоторые наиболее распространенные параметры команды ssh:

  • -p <port>: указывает номер порта, на котором работает ssh-сервер на удаленном узле. По умолчанию ssh использует стандартный порт 22, но иногда он может быть изменен на другой номер порта.
  • -i <identity_file>: указывает путь к файлу приватного ключа, который будет использоваться для аутентификации на удаленном узле. Если не указано, будет использоваться файл ~/.ssh/id_rsa.
  • -X: включает проброс графического интерфейса (X11 forwarding), позволяя запускать графические приложения на удаленном узле и отображать их на локальном компьютере.
  • -L <local_port>:<remote_host>:<remote_port>: настраивает локальный порт перенаправления (port forwarding), позволяя перенаправлять трафик от локального порта на удаленный хост и порт.
  • -R <remote_port>:<local_host>:<local_port>: настраивает удаленный порт перенаправления, позволяя перенаправлять трафик с удаленного порта на локальный хост и порт.
  • -C: включает сжатие трафика, уменьшая объем передаваемых данных и ускоряя передачу данных в некоторых случаях.
  • -v: выводит подробную отладочную информацию, которая может быть полезна при решении проблем с соединением.

Это только некоторые из параметров, которые могут быть использованы с командой ssh. Чтобы узнать полный список параметров, можно выполнить команду man ssh в терминале.


scp

команда scp используется для копирования файлов между локальной машиной и удаленной машиной через SSH-соединение. Команда выглядит следующим образом:

scp [source] [destination]

где [source] - путь к файлу или директории на локальной машине, а [destination] - путь к файлу или директории на удаленной машине.

Она может использоваться со следующими параметрами:

  • -P <port>: указывает номер порта, на котором работает ssh-сервер на удаленном узле. По умолчанию scp использует стандартный порт 22, но иногда он может быть изменен на другой номер порта.
  • -r: позволяет копировать каталоги и их содержимое рекурсивно.
  • -p: сохраняет время создания, изменения и доступа к файлам и каталогам.
  • -q: отключает вывод информации о ходе выполнения команды.
  • -v: включает подробный вывод информации о ходе выполнения команды.
  • -C: включает сжатие данных при передаче, что может ускорить копирование файлов через медленные сети.

Пример использования команды scp:

scp -P 2222 file.txt user@remote-host:/path/to/destination

Эта команда скопирует файл file.txt с локальной машины на удаленную машину с адресом remote-host, используя порт 2222 и имя пользователя user. Файл будет скопирован в каталог /path/to/destination на удаленной машине. Если каталога не существует, он будет создан автоматически. Если вы хотите скопировать целый каталог, вам нужно добавить флаг -r:

scp -P 22 -r folder user@remote-host:/path/to/destination

Эта команда скопирует каталог folder с локальной машины на удаленную машину с адресом remote-host, используя порт 22 и имя пользователя user. Каталог folder и его содержимое будут скопированы в каталог /path/to/destination на удаленной машине.


ssh-copy-id

команда ssh-copy-id используется для копирования публичного ключа SSH на удаленный узел, чтобы обеспечить безопасную аутентификацию. Команда выглядит следующим образом:

ssh-copy-id [user]@[hostname or IP address]

где [user] - имя пользователя на удаленном узле, [hostname or IP address] - имя хоста или IP-адрес удаленного узла.

Она может использоваться со следующими параметрами:

  • -i <identity_file>: указывает путь к файлу приватного ключа, который должен быть скопирован на удаленный узел. Если не указано, будет использоваться файл ~/.ssh/id_rsa.pub.
  • -p <port>: указывает номер порта, на котором работает ssh-сервер на удаленном узле. По умолчанию ssh-copy-id использует стандартный порт 22, но иногда он может быть изменен на другой номер порта.
  • -o <ssh_option>: позволяет передавать дополнительные параметры ssh-клиенту при подключении к удаленному узлу. Этот параметр может использоваться несколько раз для передачи нескольких опций.

Пример использования команды ssh-copy-id:

ssh-copy-id -i ~/.ssh/my_key.pub -p 2222 user@remote-host

Эта команда скопирует публичный ключ, который находится в файле ~/.ssh/my_key.pub, на удаленный узел с адресом remote-host, используя порт 2222 и имя пользователя user. После выполнения этой команды вы сможете подключаться к удаленному узлу с помощью команды ssh без необходимости вводить пароль для аутентификации.


ssh-add

команда ssh-add используется для добавления закрытых ключей SSH в ssh-agent, чтобы не вводить пароль каждый раз при подключении к удаленному узлу. Команда выглядит следующим образом:

ssh-add [path/to/private/key]

где [path/to/private/key] - путь к закрытому ключу SSH.

Она может использоваться со следующими параметрами:

  • -D: удаляет все идентификаторы из ssh-agent.
  • -d: удаляет конкретный идентификатор из ssh-agent.
  • -t <lifetime>: устанавливает время жизни идентификатора в секундах.
  • -c: запрос пароля при использовании идентификатора.
  • -l: выводит список добавленных идентификаторов.
  • -s <socket>: указывает альтернативный путь к сокету ssh-agent.
  • -E <file>: указывает файл для вывода отладочной информации.

Пример использования команды ssh-add:

ssh-add ~/.ssh/id_rsa

Эта команда добавляет закрытый ключ id_rsa в ssh-agent, чтобы не вводить пароль каждый раз при подключении к удаленному узлу. Если у вас есть несколько закрытых ключей, вы можете добавить их все сразу, используя знак *:

ssh-add ~/.ssh/*

Эта команда добавляет все закрытые ключи в каталоге ~/.ssh/ в ssh-agent. Если вы хотите удалить идентификатор, используйте опцию -d:

ssh-add -d ~/.ssh/id_rsa

Эта команда удаляет идентификатор для закрытого ключа id_rsa.


ssh-agent

команда ssh-agent запускает программу-агент, которая хранит приватные ключи SSH и предоставляет доступ к ним без ввода пароля. Команда выглядит следующим образом:

eval $(ssh-agent)

Она может использоваться со следующими параметрами:

  • -d: уничтожает агента.
  • -k: уничтожает все ключи, связанные с агентом.
  • -a <path>: указывает альтернативный путь к сокету ssh-agent.
  • -t <lifetime>: устанавливает время жизни сокета в секундах.
  • -s <socket>: указывает альтернативный путь к сокету ssh-agent.

Пример использования команды ssh-agent:

eval `ssh-agent`

Эта команда запускает программу-агент и выводит на экран команды, которые нужно выполнить, чтобы настроить переменные среды. Чтобы добавить закрытый ключ в ssh-agent, выполните команду ssh-add:

ssh-add ~/.ssh/id_rsa

Эта команда добавляет закрытый ключ id_rsa в ssh-agent, чтобы не вводить пароль каждый раз при подключении к удаленному узлу.

Если вы хотите использовать альтернативный путь к сокету ssh-agent, используйте опцию -a:

ssh-agent -a /tmp/my-ssh-agent.sock

Эта команда запускает программу-агент и создает сокет /tmp/my-ssh-agent.sock, который можно использовать для подключения к ssh-agent.


sshfs

команда sshfs позволяет монтировать удаленную файловую систему на локальной машине через SSH. Команда выглядит следующим образом:

sshfs [user]@[hostname or IP address]:[remote_directory] [local_directory]

где [user] - имя пользователя на удаленном узле, [hostname or IP address] - имя хоста или IP-адрес удаленного узла, [remote_directory] - путь к директории на удаленном узле, которую необходимо монтировать, [local_directory] - путь к локальной директории, в которую будет смонтирована удаленная директория.

Она может использоваться со следующими параметрами:

  • -p <port>: указывает порт для подключения к удаленному хосту по SSH.
  • -o <option>: задает дополнительные опции монтирования, такие как IdentityFile, User, LogLevel и другие.
  • -f: запускает sshfs в фоновом режиме.
  • -s: выводит список доступных точек монтирования.
  • -h: выводит справку по команде sshfs.

Пример использования команды sshfs:

sshfs user@remotehost:/remote/directory /local/directory

Эта команда монтирует удаленную файловую систему на локальной машине в каталог /local/directory. При этом подключение к удаленному хосту происходит по учетной записи user и используется стандартный порт SSH.

Если необходимо указать другой порт для подключения, используйте опцию -p:

sshfs -p 2222 user@remotehost:/remote/directory /local/directory

Эта команда монтирует удаленную файловую систему, подключаясь к удаленному хосту по порту 2222.

Вы также можете использовать опцию -o для настройки дополнительных параметров монтирования. Например, чтобы указать файл ключа для аутентификации, используйте опцию IdentityFile:

sshfs -o IdentityFile=/path/to/key user@remotehost:/remote/directory /local/directory

Эта команда монтирует удаленную файловую систему, используя ключ для аутентификации, расположенный по пути /path/to/key.


ssh-keygen

команда ssh-keygen используется для генерации пары ключей SSH.

Ключи SSH являются центральным элементом системы SSH. Они используются для аутентификации пользователя на удаленном узле и обеспечения безопасности соединения.

Ключи SSH бывают двух типов: публичные (public) и приватные (private). При подключении к удаленному узлу, клиент отправляет свой публичный ключ на сервер, который затем проверяет, соответствует ли он приватному ключу, хранящемуся на локальном компьютере. Если ключи совпадают, пользователь получает доступ к удаленному узлу без необходимости вводить пароль.

Команда ssh-keygen используется для создания и управления ключами SSH. По умолчанию, команда ssh-keygen создает RSA-ключи, но также поддерживаются другие типы ключей, такие как DSA и ECDSA.

Создание нового ключа выполняется следующей командой:

ssh-keygen -t rsa -b 2048 -C "your_email@example.com"

где -t rsa указывает на тип ключа, -b 2048 указывает на длину ключа (2048 бит в данном случае), а -C "your_email@example.com" позволяет добавить комментарий к ключу. При выполнении этой команды, вас попросят указать место, где должен быть сохранен новый ключ, а также пароль, который будет использоваться для защиты приватного ключа.

Ключи SSH, созданные с помощью команды ssh-keygen, хранятся в двух файлах: приватный ключ (обычно ~/.ssh/id_rsa) и публичный ключ (обычно ~/.ssh/id_rsa.pub). Публичный ключ можно отправлять на удаленные узлы, а приватный ключ должен оставаться на локальной машине.

После создания ключей, вы можете использовать команду ssh-copy-id, чтобы скопировать публичный ключ на удаленный узел:

ssh-copy-id [user]@[hostname or IP address]

где [user] - имя пользователя на удаленном узле, [hostname or IP address] - имя хоста или IP-адрес удаленного узла.

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

Вывод ключей может быть выполнен с помощью команды ssh-add -l, которая показывает список ключей, которые были добавлены в ssh-agent на текущей сессии. 


ssh-keyscan

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

ssh-keyscan [hostname or IP address]

где [hostname or IP address] - имя хоста или IP-адрес удаленного узла.

Некоторые из наиболее часто используемых параметров:

  • -H: сканировать только публичный ключ хоста и игнорировать ключи пользователей.
  • -T: установить время ожидания подключения к хосту.
  • -p: указать порт, который нужно использовать для подключения к удаленному узлу.
  • -f: указать файл, в котором хранятся хосты, ключи которых нужно получить.
  • -v: выводить более подробную информацию о процессе сканирования.

Например, команда ssh-keyscan -H example.com сканирует только публичный ключ хоста example.com, игнорируя ключи пользователей, а команда ssh-keyscan -p 2222 example.com указывает порт 2222 для подключения к удаленному хосту example.com.


ssh-keysign

команда ssh-keysign используется для подписи сообщений с помощью ключей SSH. Команда может использоваться, например, для подписи сертификатов SSL/TLS. Команда выглядит следующим образом:

ssh-keysign [path/to/key] [path/to/message]

где [path/to/key] - путь к ключу SSH, который будет использоваться для подписи сообщения, [path/to/message] - путь к файлу с сообщением, которое нужно подписать.

Команда ssh-keysign используется в качестве служебной команды и не предоставляет опций для использования. Она вызывается автоматически при подписи сообщений с помощью ключей SSH при использовании других приложений, таких как sshd или ssh-agent.


 


Читайте также:

ChatGPT
Eva
💫 Eva assistant