105 команд для работы с сервером linux по ssh

Редактирование прав

Все, что нужно для разрешения проблем, связанных с правами в Linux.

sudo — выдает права суперпользователя. Используется перед любой командой, если нужно выполнить ее от имени администратора. Многие программы и операции запускаются исключительно при наличии этих прав, так что sudo используется часто. Например, чтобы обновить список пакетов в Fedora, введем: sudo dnf update. При этом система запросит пароль администратора.

sudo su — на время превращает все вводимые в терминал команды в команды суперпользователя. Пригодится, если предстоит вносить много изменений в системные файлы, которые нельзя редактировать без соответствующих прав.

sudo !! — запускает предыдущую команду от имени администратора. Пригодится, если уже ввели команду, требующую прав суперпользователя, но забыли их затребовать. Не придется вводить весь текст заново. Достаточно сокращенной версии.

chmod — корректирует права доступа к выбранному файлу. Применяется исключительно с набором опций, обозначающих список прав. Допустим, я хочу выдать права на чтение и запись файла Timeweb.html на рабочем столе. Для этого введу в терминал: chmod 777 ~/Desktop/timeweb.html. Теперь его можно открывать и редактировать. Аналогичным образом пользователи поступают с системными файлами, когда приходит время что-то в них менять. По умолчанию большая их часть защищена от записи.

chown — назначает владельца для выбранной директории, документа, картинки или любого другого элемента в файловой системе. Синтаксис следующий: chown имя учетной записи, которому надо передать права путь до файла, права на который нужно передать. На примере этого может выглядеть следующим образом: есть пользователь Timeweb, которому я хочу передать права на файл timeweb-file.txt с рабочего стола. Сделаю это командой:

chown Timeweb ~/Desktop/timeweb-file.txt

Шаг 4: Защита демона sshd

После установки сервера SSH, первым делом исправить файл sshd_config. В нем запретить удалённый доступ пользователя root и разрешить доступ только для доверенных пользователей. Настраиваем от непривилегированного пользователя, используя sudo.

Первое действие перед правкой любого файла — это бекап этого файла, делаем:

remuserbak@vps:~$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
 password for remuserbak:

Посмотреть текущее настройки демона ssh

sudo sshd -T

Отключение SSH-логин для пользователя root, используя параметр PermitRootLogin no.

remuserbak@vps:~$ sudo nano etcsshsshd_config
 
# Authentication:
PermitRootLogin no # запретить удалённый доступ для root
AllowUsers user1 user2 # список пользователей, которым разрешён доступ по SSH

После внесения изменений в sshd_config — перегружаем демона SSH

$ sudo systemctl restart ssh.service

Теперь при попытке залогинеться с пользователем root, в логах вы увидите запись:

User root from 222.187.238.57 not allowed because not listed in AllowUsers

Всё, у вас демон SSH минимально защищен!

Дополнительные параметры sshd_config, которые можно менять, под ваши задачи и условия, но не делайте это без нужды и предварительно изучите руководство man 5 sshd_config

  • LoginGraceTime 120: Сервер отключается по истечении этого времени, если пользователю не удалась регистрация в системе. Если стоит значение 0, то время ожидания не ограничено. Значение по умолчанию — 120 секунд.
  • StrictModes yes: Проверять наборы прав доступа и принадлежность конфигурационных файлов и домашнего каталога пользователя перед разрешением регистрации в системе. Это рекомендуется выполнять потому, что новички иногда оставляют свои каталоги или файлы доступными для записи всем. Значение по умолчанию — yes.
  • AddressFamily inet: Семейство адресов которое должна использовать служба sshd, допустимые значения: any, inet (только IPv4) и inet6 (только IPv6). Значение по умолчанию — any.
  • Port 22: Порт, на котором следует ожидать запросы на ssh соединение. Значение по умолчанию — 22.

ssh-copy-id

Я предпочитаю использовать с флагом -i и задавать путь до нужного ключа

sudo ssh-copy-id -i ~/.ssh/andrei-key.pub andrei@192.168.0.2

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: «/home/andrei/.ssh/andrei-key.pub»
The authenticity of host ‘192.168.0.2 (192.168.0.2)’ can’t be established.
ECDSA key fingerprint is SHA256:abcdefgh1234567890abcdefgh1234567890abc+def.
Are you sure you want to continue connecting (yes/no/)?

Введите yes

Are you sure you want to continue connecting (yes/no/)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
andrei@192.168.0.2’s password:

Введите пароль

Number of key(s) added: 1

Now try logging into the machine, with: «ssh ‘andrei@192.168.0.2′»
and check to make sure that only the key(s) you wanted were added.

Теперь на хосте 192.168.0.2 в файле
/home/andrei/.ssh/authorized_keys
появилась новая запись вида

ssh-rsa AAAAB3NzaC1y … lseP/jXcq … Uydr/2CwQ &hellip ++TpY19pHqD/AnhL … Az62T/Ipyx … 8U2T andrei@host.andrei.com

Знак … заменяет длинные последовательности случайных символов для экономии места.

Проверить ключ можно командой

ssh -i ~/.ssh/mykey user@host

В нашем случае

ssh -i ~/.ssh/andrei-key andrei@192.168.0.2

Если вы не задавали пароль для ключа, то попадёте на удалённый хост без лишних движений

Last login: Sun Jan 10 16:48:27 2021 from 192.168.0.1

Automate with SSH keys, but manage them

SSH keys can be used to automate access to servers. They are commonly used in scripts, backup systems, configuration management tools, and by developers and sysadmins. They also provide single sign-on, allowing the user to move between his/her accounts without having to type a password every time. This works even across organizational boundaries, and is highly convenient.

However, unmanaged SSH keys can become a major risk in larger organizations.

  • ssh-keygen — Create keys

  • ssh-copy-id — Provision access on servers

  • authorized_keys — Authorized keys file format

The PrivX On-Demand Access Manager can be used as an alternative for SSH keys, eliminating the need for permanent keys and passwords on servers entirely.

Работа с содержимым файлов

Конкатенация содержимого файлов

Команда cat позволяет выполнить конкатенацию (объединение) содержимого файлов и печать его в стандартный поток вывода. Данная команда зачастую используется просто для просмотра содержимого файла.

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

username@server:~/test_home$ cat test.txt
1
2
3
4
5
username@server:~/test_home$

Данную команду можно использовать в сочетании с командами head и tail для вывода определённого количества строк от начала или конца файла соответственно.

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

username@server:~/test_home$ cat test.txt | head -2
1
2
username@server:~/test_home$ cat test.txt | tail -1
5

Данные команды позволяют вывести 2 первых строки и 1 последнюю строку файла  test.txt.

Поиск по содержимому файла

grep — это популярная команда, позволяющая найти содержимое файлов.

Например, у нас есть файл test1.txt, который имеет следующее содержимое:

username@server:~/test_home$ cat test1.txt

1 first string
2 second string
3 another example of a string
4 something in here
5 andalsohere

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

username@server:~/test_home$ grep 'string' test1.txt
1 first string
2 second string
3 another example of a string
username@server:~/test_home$ grep 'th' test1.txt
3 another example of a string
4 something in here
username@server:~/test_home$ grep 'here' test1.txt
4 something in here
5 andalsohere

Данная команда имеет огромное количество способов применения. За дополнительной информацией вы можете обратиться к официальной документации, либо к свободным источникам в интернете.

Пример. Скрипт. Копирование файла с удаленного компьютера.

Задача. На удаленном компьютере Anacron запускает один раз в сутки. Нужно создать скрипт который будет копировать удаленные backup-копии на локальный сервер бекапов. Скрипт запустим при помощи Использование планировщика cron в Linux.

$ ssh-keygen -t dsa
$ ls
id_dsa  id_dsa.pub
$ chmod 600 id_dsa

Поместим публичный ключ файл ~/.ssh/authorized_keys на удаленном компьютере.

$ ssh-copy-id -i id_dsa.pub USER@HOST

Скрипт:

#!/bin/bash
 
# Copy PostgreSQL
 
SFTP='/usr/bin/sftp'
DIR='/home/backups_mbill_sql/'
HOST='user@host:/home/backups_mbill_sql/'
FILES="psql-`date +%d.%m.%Y`*.sql"
 
$SFTP $HOST$FILES $DIR

Настройка ssh клиента

В Debian настройки клиентской части ssh делятся на глобальные и пользовательские. Глобальные клиентские настройки находятся в файле /etc/ssh/ssh_config и применяются ко всем пользователям. Пользовательские настройки могут находиться в домашнем каталоге пользователя, в ~/.ssh/config и применяются к одному пользователю. Файл пользовательских настроек не создаётся автоматически в отличие от файла глобальных настроек клиентской части ssh. Для большинства выполняемых задач подойдут настройки по умолчанию, но для удобства использования, так сказать для тюнинга или для выполнения нестандартных задач клиентские настройки изменяются. Рассмотрим вкратце некоторые из этих настроек. Полезно помнить о приоритетах настроек: высший приоритет имеют ключи командной строки, затем следуют настройки пользователя, а после них используются глобальные настройки клиентской части.

Параметр Host. Ограничивает множество хостов, к которым применяются последующие (до ближайшей новой директивы Host) директивы, по указанным шаблонам (хост должен соответствовать хотя бы одному шаблону). Шаблон, состоящий из одного символа *, соответствует любому хосту. Под хостом в данном контексте понимается аргумент имя_хоста передаваемый в командной строке (т.е. никаких преобразований перед сравнением не выполняется).

Параметр HostName. Устанавливает соответствие между псевдонимами, сокращениями и настоящими именами хостов. По умолчанию используется имя, передаваемое в командной строке. Допустимо непосредственное указание IP-адресов.

Параметр Port. Порт на удалённой машине, к которому следует подключаться. Значение по умолчанию — 22

Параметр User. Имя пользователя, которое следует использовать при регистрации в удалённой системе. Полезно, когда на разных серверах используются разные имена, т.к. избавляет от надобности вспоминать каждый раз нужное имя.

В качестве примера я создам файл пользовательских настроек /home/selifan/.ssh/config следующего содержания:

Host sunup

HostName sunup.aitishnik.local

Port 2203

User andrey

Host windbag

HostName windbag.nnov.ru

Port 2280

User joker

Host 212.177.65.1

HostName 212.177.65.1

Port 2222

User forester

Теперь при подключении к компьютерам sunup.aitishnik.local, windbag или по ip адресу 212.177.65.1 мне не нужно вспоминать, ни имя пользователя, ни ssh порт подключения, достаточно после ssh набрать имя сервера. Просто и удобно! Описания всех параметров, значений и некоторых примеров находятся в man ssh_config. Продолжаем настраивать SSH и читаем «Генерация ключей SSH».

Об авторе:

Меня зовут Андрей Золкин. Из более, чем пятнадцати лет работы в сфере информационных технологий, десять лет работаю с системами, базирующимися на открытом исходном коде. На страницах сайта Aitishnik.Ru веду блоги по CMC Joomla и Debian GNU/Linux.

Как ограничить доступ по SSH

Сменить порт

Port 9724

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

Здесь мы определяем, что связь возможна только по протоколу v2

Protocol 2

Запретить авторизацию под root

PermitRootLogin no

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

MaxAuthTries 2

Количество попыток ввода пароля. По умолчанию 6. При неудачном переборе сеанс связи обрывается.

Уменьшить время ожидания авторизации

LoginGraceTime 30s

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

Закрыть доступ по IP

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

  1. Открываем и добавляем туда
    SSHD: 192.168.1.1

    где — ваш IP. Если у вас динамический IP, и запишите Вашу подсеть вместо IP, например:

    SSHD: 192.168.0.0/16
  2. Открываем и добавляем туда:
    SSHD: ALL

Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.

Цель

Переадресация портов позволяет удаленным компьютерам (например, компьютерам в Интернете ) подключаться к определенному компьютеру или службе в частной локальной сети (LAN).

В типичной жилой сети узлы получают доступ в Интернет через DSL или кабельный модем, подключенный к маршрутизатору или преобразователю сетевых адресов (NAT / NAPT). Хосты в частной сети подключены к коммутатору Ethernet или обмениваются данными через беспроводную локальную сеть . Внешний интерфейс устройства NAT настроен с использованием общедоступного IP-адреса. С другой стороны, компьютеры за маршрутизатором невидимы для хостов в Интернете, поскольку каждый из них обменивается данными только с частным IP-адресом.

При настройке переадресации портов сетевой администратор выделяет один номер порта на шлюзе для исключительного использования связи со службой в частной сети, расположенной на определенном хосте. Внешние хосты должны знать этот номер порта и адрес шлюза для связи с внутренней службой сети. Часто номера портов хорошо известных Интернет-служб, такие как номер порта 80 для веб-служб (HTTP), используются при переадресации портов, так что общие Интернет-службы могут быть реализованы на узлах в частных сетях.

Типичные приложения включают следующее:

  • Запуск общедоступного HTTP- сервера в частной локальной сети
  • Разрешение доступа Secure Shell к узлу в частной локальной сети из Интернета
  • Разрешение FTP- доступа к хосту в частной локальной сети из Интернета
  • Запуск общедоступного игрового сервера в частной локальной сети

Администраторы настраивают переадресацию портов в операционной системе шлюза. В ядрах Linux это достигается с помощью правил фильтрации пакетов в компонентах ядра iptables или netfilter . Операционные системы BSD и macOS до Yosemite (OS 10.10.X) реализуют его в модуле Ipfirewall (ipfw), а операционные системы macOS, начиная с Yosemite, реализуют его в модуле Packet Filter (pf).

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

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

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

Unix-подобные операционные системы иногда используют переадресацию портов, когда номера портов меньше 1024 могут быть созданы только программным обеспечением, запущенным от имени пользователя root. Запуск с привилегиями суперпользователя (для привязки порта) может представлять угрозу безопасности для хоста, поэтому переадресация портов используется для перенаправления порта с меньшим номером на другой порт с большим номером, чтобы прикладное программное обеспечение могло работать как обычное рабочее системный пользователь с ограниченными правами.

Universal Plug и Play протокол (UPnP) обеспечивает возможность автоматической установки экземпляров переадресации портов в жилых интернет — шлюзов. UPnP определяет протокол Интернет-шлюза (IGD), который является сетевой службой, с помощью которой Интернет-шлюз объявляет о своем присутствии в частной сети через протокол обнаружения простых служб (SSDP). Приложение, предоставляющее услуги на основе Интернета, может обнаруживать такие шлюзы и использовать протокол UPnP IGD, чтобы зарезервировать номер порта на шлюзе и заставить шлюз пересылать пакеты в свой прослушивающий сокет .

Как настроить авторизацию по ключу

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

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

  1. 1.
    Откройте терминал.
  2. 2.

    Выполните команду:

  3. 3.

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

    Debian 9 настройка SSH

  4. 4.

    Введите пароль, чтобы защитить открытый ключ:

  5. 5.

    Повторите пароль:

  6. 6.

    Если создание ключей прошло корректно, вы увидите сообщение:

  7. 7.

    Скопируйте открытый ключ:

    Где:

  8. 8.

    Чтобы продолжить подключение, введите yes:

  9. 9.

    Если передача ключа прошла успешно, вы увидите сообщение:

  1. 1.
    Откройте терминал.
  2. 2.

    Создайте резервную копию конфигурационного файла с помощью команды:

  3. 3.

    Откройте конфигурационный файл командой:

  4. 4.

    Раскомментируйте строку «PubkeyAuthentication» и укажите в ней значение «yes»:

    Чтобы сохранить изменения, нажмите Ctrl + O и Enter. Затем закройте редактор сочетанием клавиш Ctrl + X.

  5. 5.

    Чтобы применить настройки, выполните команду:

Готово, вы настроили авторизацию по ключу.

Server-Side Configuration

The option in the OpenSSH server configuration file must be enabled on the server to allow port forwarding. By default, forwarding is allowed. Possible values for this option are or to allow all TCP forwarding, to prevent all TCP forwarding, to allow local forwardings, and to allow remote forwardings.

Another option of interest is , which can be used to forward Unix domain sockets. It allows the same values as . The default is .

For example:

The configuration option as described above also affects remote port forwardings. Possible values were (only local connections from server host allowed; default), (anyone on the Internet can connect to remote forwarded ports), and (client can specify an IP address that can connect, anyone can if not specified).

Примеры

Существует большое количество методов использования утилиты. Большинство из них неизвестны современному пользователю операционной системы Линукс.

Рассмотрим подключение к серверу.

При присоединении с использованием утилиты в командной строке потребуется ввести:

Например, нам надо подключиться к компьютеру в локальной сети debian, под пользователем slon.

Все современные пользователи первоначально присоединяются к удаленной хосту (компьютеру). Только после этого они вводят требуемые команды. Утилита ssh дает возможность выполнить необходимую задачу без обязательного запуска терминала на удаленной машине.

Предположим нам надо запустить команду top на удаленном компьютере.

К примеру, требуется запустить скрипт bash на удаленном компьютере. Сам файл bash.sh находится на локальном компьютере . Для этих целей необходимо провести перенаправление ввода bash.

С использованием утилиты пользователю предоставляется возможность сохранить бекап локального диска на удаленной серверной машине. Для этих целей нужно перенаправлять вывод dd с использованием оператора перенаправления.  Далее вывод dd сохраняется в файле copiadiska.img.

Для восстановления прежнего состояния локального диска используется созданная ранее копия. Для этого в командной строке нужно ввести:

При использовании команды ssh для входа в удаленный сервер нередко требуется пароль. Это создает дополнительные неудобства, но дает возможность обезопасить вас от злоумышленников. Несмотря на защиту, пароль можно подобрать.

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

Это поведение весьма просто настроить. Изначально необходимо задать ключ. Для этого потребуется ввести:

При создании ключа пользователю необходимо ответить на определённый перечень вопросов. Если вы желаете присоединиться к удаленной машине без обязательного введения пароля, в области «Passphare» нужно оставить пустое место.

Далее ключ отправляется на удаленную машину, вводится:

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

Стоит отметить, размещать пароли в обыденных текстовых файлах не стоит. Ими могут воспользоваться злоумышленники Но если это потребуется, такой вариант возможен. Чтобы сохранить пароль, необходимо воспользоваться оператором, используемым при перенаправлении Bash. Введите в командной строке:

При запуске команды ssh на экране монитора нередко всплывает приветствие. Допускается его изменение. За такую функцию отвечает специальный файл «/etc/issue». Вам потребуется просто открыть данный файл и указать необходимо приветствие. Для этого вводится команда:

В некоторых случаях пользователю ОС Линукс может потребоваться информация о неудачных попытках подключения к утилите. Вы можете посмотреть IP-адреса, с которых совершалось данное действие.

Все запросы о входах концентрируются в «/var/log/secure».

Чтобы отфильтровывать информацию в терминале по запросу «Failed password» необходимо добавит grep

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

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

Стоит отметить, что все получаемые данные могут шифроваться. Чтобы такая опция заработала, потребуется включить поддержку со стороны удаленного сервера. Далее выполняется команда, позволяющая загрузить графическую программу. Для этого потребуется ввести в командную строку «ssh -XC user@remotehost «eclipse»».

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

Теперь можно завершить сессию простой командой:

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

SSH provides strong encryption and integrity protection

Once a connection has been established between the SSH client and server, the data that is transmitted is encrypted according to the parameters negotiated in the setup. During the negotiation the client and server agree on the symmetric encryption algorithm to be used and generate the encryption key that will be used. The traffic between the communicating parties is protected with industry standard strong encryption algorithms (such as AES (Advanced Encryption Standard)), and the SSH protocol also includes a mechanism that ensures the integrity of the transmitted data by using standard hash algorithms (such as SHA-2 (Standard Hashing Algorithm)).

Локальное перенаправление портов SSH

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

Вы можете перенаправить локальный порт (например, 8080), который затем можно использовать для доступа к приложению локально следующим образом. Флаг определяет порт, пересылаемый на удаленный хост и удаленный порт.

$ ssh admin@server1.example.com -L 8080: server1.example.com:3000

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

$ ssh -N admin@server1.example.com -L 8080: server1.example.com:3000

Переключатель дает команду SSH, чтобы работать в фоновом режиме.

$ ssh -f -N admin@server1.example.com -L 8080: server1.example.com:3000

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

Доступ к удаленному приложению через локальную пересылку портов SSH

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector