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.