Основы bash-скриптинга для непрограммистов

Распространенные ошибки конфигурации

Корневой логин

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

Как отключить вход root для openSSH:

  1. Отредактируйте конфигурацию SSH-сервера
  2. Изменитена
  3. Учтите изменения конфигурации:
  4. Перезагрузите SSH-сервер

Выполнение команды SFTP

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

Вот пример безопасной конфигурации SFTP () для пользователя noraj:

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

Методы аутентификации

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

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

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

Навигация

Вывод текущей рабочей директории

Для вывода информации о текущей рабочей директории используется команда pwd.

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

username@server:~$ pwd
/home/u/username

Вывод содержимого директории

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

Вывод содержимого текущей директории в несколько колонок (только имена файлов и директорий):

ls .

Вывод содержимого текущей директории в одну колонку (только имена файлов и директорий):

ls -1

Вывод подробной информации о содержимом текущей директории, включая скрытые файлы (имя которых начинается с точки):

ls -la

Вывод содержимого конкретной директории:

ls имя_директории

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

username@server:~$ ls -la
total 16
drwx------  4 username customers 4096 Mar 10 12:56 .
drwx------ 14 username customers 4096 Mar 10 12:55 ..
-rw-------  1 username customers    0 Mar 10 12:56 .htaccess
drwx------  2 username customers 4096 Mar 10 12:55 test
drwx------  2 username customers 4096 Mar 10 12:55 test1
-rw-------  1 username customers    0 Mar 10 12:55 test.txt
где "." - текущий каталог, а ".." - родительский каталог.

Перемещение между директориями

Команда cd позволяет выполнить переход в другую директорию.

Основные способы применения:

Перейти в директорию, которая находится в текущей директории:

cd dirname

Перейти в родительский каталог (на уровень выше):

cd ..

Перейти в домашний каталог:

cd
 
# Либо:
 
cd ~

Перейти в домашний каталог по абсолютному пути (начиная с корня):

cd /home/u/username

Перейти в предыдущий каталог:

cd -

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

# Текущая директория отображается после двоеточия и до символа "$".
 
# Перейти в каталог media
username@server:~$ cd /home/u/username/public_html/media
 
# Перейти в каталог cms
username@server:~/public_html/media$ cd cms
 
# Перейти в домашний каталог
username@server:~/public_html/media/cms$ cd
 
# Перейти в предыдущий каталог
username@server:~$ cd -
/home/u/username/public_html/media/cms
 
# Перейти на уровень выше
username@server:~/public_html/media/cms$ cd ..
username@server:~/public_html/media$

Сравнение строк

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

str1 = str2   # Проверяет строки на равенство, возвращает истину, если строки идентичны.
str1 != str2  # Возвращает истину, если строки не идентичны.

# операторы «>» и «<» необходимо экранировать с помощью обратной косой черты,
str1 \< str2   # Возвращает истину, если str1 меньше, чем str2.
str1 \> str2   # Возвращает истину, если str1 больше, чем str2.

-n str1       # Возвращает истину, если длина str1 больше нуля.
-z str1       # Возвращает истину, если длина str1 равна нулю.  

#!/bin/bash

user ="likegeeks"
if 
then
echo "The user $user  is the current logged in user"
fi

Завершение работы процессов

Завершить текущие процессы можно командой killall. Например, для завершения процессов веб-сервера Apache: 

killall -9 apache2

Обратите внимание! После выполнения данной команды для перезапуска обработчиков Apache необходимо изменить версию обработчика php в разделе «Сайты». Аналогично для других сервисов, например:

Аналогично для других сервисов, например:

killall -9 vsftpd

Завершение процесса MySQL:

mysqladmin -u'база_данных' -p'пароль_базы_данных' kill id_запроса

Для просмотра процессов MySQL используйте:

mysqladmin -u'база_данных' -p'пароль_базы_данных' pr

Установка openssh-server

К хосту можно подключиться по ssh если на нём установлен ssh сервер.

В Ubuntu стандартный вариант ssh сервера называется openssh-server

Установить его можно командой

sudo apt install -y openssh-server

Reading package lists… Done
Building dependency tree
Reading state information… Done
The following additional packages will be installed:
ncurses-term openssh-sftp-server ssh-import-id
Suggested packages:
molly-guard monkeysphere ssh-askpass
The following NEW packages will be installed:
ncurses-term openssh-server openssh-sftp-server ssh-import-id
0 upgraded, 4 newly installed, 0 to remove and 2 not upgraded.
Need to get 688 kB of archives.
After this operation, 6 010 kB of additional disk space will be used.
Get:1 http://fi.archive.ubuntu.com/ubuntu focal/main amd64 ncurses-term all 6.2-0ubuntu2
Get:2 http://fi.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-sftp-server amd64 1:8.2p1-4ubuntu0.3
Get:3 http://fi.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-server amd64 1:8.2p1-4ubuntu0.3
Get:4 http://fi.archive.ubuntu.com/ubuntu focal/main amd64 ssh-import-id all 5.10-0ubuntu1
Fetched 688 kB in 2s (399 kB/s)
Preconfiguring packages …
Selecting previously unselected package ncurses-term.
(Reading database … 145758 files and directories currently installed.)
Preparing to unpack …/ncurses-term_6.2-0ubuntu2_all.deb …
Unpacking ncurses-term (6.2-0ubuntu2) …
Selecting previously unselected package openssh-sftp-server.
Preparing to unpack …/openssh-sftp-server_1%3a8.2p1-4ubuntu0.3_amd64.deb …
Unpacking openssh-sftp-server (1:8.2p1-4ubuntu0.3) …
Selecting previously unselected package openssh-server.
Preparing to unpack …/openssh-server_1%3a8.2p1-4ubuntu0.3_amd64.deb …
Unpacking openssh-server (1:8.2p1-4ubuntu0.3) …
Selecting previously unselected package ssh-import-id.
Preparing to unpack …/ssh-import-id_5.10-0ubuntu1_all.deb …
Unpacking ssh-import-id (5.10-0ubuntu1) …
Setting up openssh-sftp-server (1:8.2p1-4ubuntu0.3) …
Setting up openssh-server (1:8.2p1-4ubuntu0.3) …

Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time …
3072 SHA256:9++2jX5qWUOvh/GgxzZ45hX1jnictvNdKOBTy1zWXLI root@andrei-VirtualBox
(RSA)
Creating SSH2 ECDSA key; this may take some time …
256 SHA256:E0jgFvpa5eFuVVhjViXDsHjE1R0kY5GI86bB4WtaSLo root@andrei-VirtualBox (
ECDSA)
Creating SSH2 ED25519 key; this may take some time …
256 SHA256:zO8nJicXCUwGo74Usj3u5MZ41mCoRfpb0Jmn5q38Z4w root@andrei-VirtualBox (
ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.serv
ice.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/
systemd/system/ssh.service.
rescue-ssh.target is a disabled or a static unit, not starting it.
Setting up ssh-import-id (5.10-0ubuntu1) …
Attempting to convert /etc/ssh/ssh_import_id
Setting up ncurses-term (6.2-0ubuntu2) …
Processing triggers for systemd (245.4-4ubuntu3.11) …
Processing triggers for man-db (2.9.1-1) …
Processing triggers for ufw (0.36-6) …

Типы командных оболочек

В *nix-системах существует два основных типа оболочек: оболочки на основе Bourne shell и оболочки на основе C shell.

Типичными представителями оболочек типа Bourne shell являются:

   sh (Bourne shell)

   bash (Bourne Again shell)

   ksh (Korn shell)

   zsh (Z Shell)

К оболочкам типа C Shell относятся:

   csh (C shell)

   tcsh (TENEX/TOPS C shell)

Ниже представлены некоторые из самых распространенных шеллов, используемых в *nix-системах:

Примечание: Термин «*nix-системы» обозначает -подобные операционные системы.

sh (Bourne shell)

sh (сокр. от Bourne shell») — это самая старая (среди рассматриваемых) оболочка, написанная Стивеном Борном из AT&T Bell Labs для ОС UNIX v7. Оболочка доступна практически в любом *nix-дистрибутиве. Многие другие шеллы уходят своими корнями именно к sh. Благодаря своей скорости работы и компактности, данная оболочка является предпочтительным средством для написания shell-скриптов. К её недостаткам можно отнести отсутствие функций для использования оболочки в интерактивном режиме, а также отсутствие встроенной обработки арифметических и логических выражений.

Примечание: Стоит отметить, что из-за общего морального устаревания оболочки, в современных системах ссылка на шелл sh (/bin/sh), обычно, является псевдонимом для запуска текущей, более новой оболочки.

Характерные черты sh:

   Полные пути к интерпретатору: /bin/sh и /sbin/sh.

   Приглашение для обычного пользователя: .

   Приглашение для суперпользователя (root): .

bash (Bourne-Again shell)

bash (сокр. от Bourne–Again shell») — это усовершенствованный и дополненный вариант шелла sh, является одной из самых популярных современных командных оболочек *nix-систем.

   Совместим с sh.

   Объединяет в себе полезные фишки оболочек ksh и csh.

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

Характерные черты bash:

   Полный путь к интерпретатору: /bin/bash.

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

   Приглашение для суперпользователя (root): .

ksh (Korn shell)

ksh (сокр. от Korn shell) — это командная оболочка, разработанная Дэвидом Корном из AT&T Bell Labs в 1980-x годах.

   Является расширением sh.

   Имеет обратную совместимость с sh.

   Имеет интерактивный функционал, сравнимый с csh.

   Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений/функций, Си-подобный синтаксис скриптов и средства для работы со строками.

   Работает быстрее, чем csh.

   Может запускать скрипты, написанные для sh.

Характерные черты ksh:

   Полный путь к интерпретатору: /bin/ksh.

   Приглашение для обычного пользователя: .

   Приглашение для суперпользователя (root): .

csh (C shell)

csh (сокр. от C shell) — это командная оболочка, созданная Биллом Джоем (автором редактора vi) с целью усовершенствования стандартного шелла Unix (sh).

   Имеет встроенные функции для интерактивного использования, например, псевдонимы (aliases) и историю команд.

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

Характерные черты csh:

   Полный путь к интерпретатору: /bin/csh.

   Приглашение для обычного пользователя: .

   Приглашение для суперпользователя (root): .

tcsh (TENEX C Shell)

tcsh (сокр. от TENEX C shell) — это командная оболочка, созданная Кэном Гриром, которая позиционируется как улучшенная версия шелла csh.

   Имеет полную совместимость csh.

   Именно в данном шелле впервые появилась функция автодополнения команд и путей.

   Удобна для интерактивной работы.

   Поддерживает редактор командной строки в стиле vi или emacs.

   Является стандартным шеллом во FreeBSD.

Характерные черты tcsh:

   Полный путь к интерпретатору: /bin/tcsh.

   Приглашение для обычного пользователя: .

   Приглашение для суперпользователя (root): .

zsh (Z Shell)

zsh (сокр. от Z shell) — это командная оболочка, созданная Паулем Фалстадом во время его учебы в Принстонском университете, позиционируется как свободная современная sh-совместимая командная оболочка.

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

   Встроенная поддержка программируемого автодополнения команд, имен файлов и пр.

   Поддержка проверки орфографии и опечаток.

   Раздельная история команд для одновременной работы с несколькими запущенными шеллами.

Характерные черты zsh:

   Полный путь к интерпретатору: /bin/zsh.

   Приглашение для обычного пользователя: .

   Приглашение для суперпользователя (root): .

Работа с командной строкой, горячие клавиши и дополнительные символы

Базовые методы управления текстом в терминале.

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

history — показывает ранее использованные приложения и инструменты. Без дополнительных аргументов отображает 10 элементов. Но их количество можно изменить вручную, добавив к слову history любое число. history 13, к примеру.

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

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

Дополнительные символы

Не совсем команды, но тоже текстовые элементы, причем полезные.

; — разделитель, необходимый, чтобы активировать сразу несколько команд подряд. Это выглядит так: cd ~/Documents; mkdir Novaya_papka; rmdir Staraya-papka. Команды будут выполняться друг за другом независимо от результата выполнения каждой из них.

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

sudo apt-get update && sudo apt-get install wget

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

~ — сокращение от /home/имя учетной записи/. Часто фигурирует в инструкциях.

Горячие клавиши

Парочка полезных сочетаний клавиш.

Стрелка вверх — показывает предыдущую команду.

Ctrl+C — прерывает запущенный процесс.

Ctrl+A — перемещает курсор в начало строки.

Ctrl+E — перемещает курсор в конец строки.

Аутентификация открытого ключа

Протокол SSH поддерживает различные механизмы аутентификации.

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

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

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

Вам будет предложено ввести безопасную парольную фразу. Если вы хотите использовать кодовую фразу, решать вам.

Когда у вас есть пара ключей, скопируйте открытый ключ на удаленный сервер:

Введите пароль удаленного пользователя, и открытый ключ будет добавлен в файл удаленного пользователя.

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

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

Просмотр файлов

Чтобы открыть содержимое текстового файла выполните cat имя_файла или less имя_файла

cat textfile

less book1

cat выведет содержимое в консольный вывод. less откроет файл во всё окно.

Навигация по файлу, открытому с помощью less, осуществляется также как и по man.

Пробел вниз
b вверх
поиск
n следующий результат поиска
q закрыть

Если вы пытаетесь открыть бинарный файл с помощью less, то можете получить предупреждение

«file1» may be a binary file. See it anyway?

cat откроет такой файл без предупреждения

Чтобы продолжить нажмите y. Результат вас скорее всего не обрадует — получится трудночитаемый набор символов.

<C3>&NU_p<C6>x<E6><AC>^N<B4>E<EA>^B<D1>E^U<AB>^A3Fy<A3>^T^N<B5>7`^D<8E><F4><9F><8D>^M<E8>y<CD>^T6^A<DF>^T<83><8A>^F{џZ<8B><8C>p4S^G^TUs
<C5>H@<DB><C3>}*d<C0>$<D4>Q^@Fq<83>S.:<81>\ƌp<E6><83>ӭ»<9F>j <C8><E9>I<92>/<BD>.i)hB
\P(<A6>^B<D2>^Q<91><8A>)h^A*;<A9><96><DA><DA>K<86>Ve<8D>K<B0>Q<93><81><C9><C5>KU<F5>7X<B4>ۙ]<B6><A2>D<CC><C7>n<EC>^@9<E3><BD>RZ<8C><A5><E1>mv<D7><C4>~^^<B4><D7>4<F8><E7>^V<B7><91><89>a<F3>Sk<95>#<AE>3X<9A>7
<C4>^]’W<D4>m<EC>ml<B5>1<E7><DE><DC>X<89><9E><DB>^Q$Ђ]Y<B3><C7>B3<EA>^M`<FC>^P<D5><E3><87><U+009E>^Z<F0>Ǖ»<DD><8E><EB><C4>?^QtM
<EF>T<B6><BE><B7><D4>7<E9>f<D7><ED>% ^E@<B8>m<B1><90>I^@<8C><F0>Ol^ZՓĶ<D1><E8>ڶ<AB>5<9D><EC>0<E9><86>a6<F8><86><E6><F2><F3><B9><94>^C<F3>^L^Lם<FC>a<F0>-<F7><88>|Ur<D6><C8>M<9E><A7>Ỉ.<C8>=g<B7>u<92><D8><FA>g{g覺<88><D6>h<FE>^M\I<AA>,<A9>wu<A4>I=<DA>^PIY%<8C><B3>.9<EE><C5>q<8A>9^U<84>t:^?<88>,<EF><FC>;a<AE>Q^P^Vfc<80>^@<EA>I<AC>m'<C4>vZ<95><EC>v<90>y<9B>偮b<84>,<D1>^B^@u><87> <FD>(<F1><EE><9B>u<AC>xESC]<D2>ld<F2><EE><AF>4<E9><ED><E1>oGx<D9>G<EA>kESC<E1>̩&<95><A1><C2><D6>ѭƛ<A3><C7>kx͸<^Rb0рx#tm<9F><F7>G<E3>1<8D><C0><EA> <D4>mf<D4><EE><B4>اF<BB><B6><8E>9e<8C>uE}<C1>I<FA><EC>oʲ<F5><AF>^WiZF<B0>t<BB>ߴ$<A9>f<D7><D2>8<8F>(<90>+^Eg'<^@O'<B0><AE>^_O<D4>#<B7><F8><DB>i<AC>Gs^L<B6>:<FD><8C><F6>-$n<D8>^R<8F>I<F1>'<8A><B4><CD>^KN<B0><D4>.<8C><93><AD><A8>򘇑<90><C7><D8>t
^E<81>'<D0>^Z<EE><FC>;<AD><DA>k<BA>y<BF><B1>Y<C4>»Y»<FD><F4>E^X<94>m<A4><80>{d^\^^<F4><9C>l<AE>I<A6>(«<8A>*U<80>Lr^O<S<87>ZJ*<A2><80>u^T<99><A0>V<9C>ɈSH:<D0>h^T<80>O<D4>PzQ<C6>x<E3>ڑ<BD><E9>1<86>=M!<CE>^?
<AD>)<C7>zi<F4>&<A4>^C<9A>(<FC>h<A0>

Чтобы закрыть окно с этими символами попробуйте нажать q или ввести команду reset

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

file file1

file1: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72×72, segment length 16, baseline, precision 8, 325×500, components 3

Оказывается file1 это не текст а изображение в формате JPEG

Попробовать открыть изображение из терминала можно командой xdg-open,
не факт, что она будет работать в вашей системе, у меня в

Ubuntu 20.4

получилось.

xdg-open file1

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

ssh

ssh andrei@192.168.0.2

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

The authenticity of host ‘192.168.56.101 (192.168.56.101)’ can’t be established.
ECDSA key fingerprint is SHA256:db8az/qbrWOJWvNRv2d9UHaDBnnUHanJ9Svca9vFx7c.
Are you sure you want to continue connecting (yes/no/)?

Если выбрать yes то в терминале вы увидите сообщение

Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.11.0-27-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

0 updates can be applied immediately.

Your Hardware Enablement Stack (HWE) is supported until April 2025.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

И одновременно с этим, незаметно для вас в файл

~/.ssh/known_hosts

добавится похожая строка:

|1|abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567

Обычно файл

known_hosts

имеет следующий формат (записи идут через пробел)

Таким образом

abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1=

Это хэш от имени сервера.

Здесь через пробел записаны три элемента: хэш от имени сервера, название используемого ассиметричного алгоритма и публичный ключ сервера. Разберём их по очереди.

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

Управляющая конструкция if-then-else

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

if команда
then
команды
else
команды
fi

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

#!/bin/bash

user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Запустить SSH в фоновом режиме

Существует несколько способов запустить ssh соединение в фоновом режиме — то есть освободим текущий терминал.

-L, screen, tmux, nohup

Мне запустить ssh фоном из скрипта помог nohup, поэтому начнём с него

nohup ssh user@host «cd scripts;python3 my_script.py $ARG1 $ARG2; exit» &

Для чего это было нужно: Python скрипт сначала
открывал одно ssh соединение из
subprocess
там выполнялась команда для запуска

мониторинга потребления памяти

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

Чтобы уйдя из первого подключения не оборвать мониторинг потребления памяти
перед ssh нужно было добавить nohup, а в самом конце поставить &

Работа с архивами

При помощи команды-архиватора tar можно создавать, разархивировать и просматривать любой tar-архив.

  1. Создание нового архива — tar — cf arhive_name file_name («arhive_name— имя архива, в котором требуется указать расширение tar и file_name— имя файла или указание группы файлов). Например, если выполнить команду: tar — cf myarch.tar *.txt, то в архив «myarch.tar» будут добавлены все txt-файлы.
  2. Распаковка — tar — xvf arhive_name path_to_extract («arhive_name— имя архива и path_to_extract— путь для распаковки файлов).
  3. Просмотр содержимого архива — tar — tf arhive_name («arhive_name— имя архива).

ФОРМАТЫ ВОКРУГ НАС

Думаю, не погрешу против истины, если скажу, что два самых популярных формата данных, с которыми приходится сталкиваться при анализе (да и при программировании вообще), — это CSV (включая подвиды с другими разделителями) и JSON. В последнее время также становится популярен YAML, но аналитические данные в нем обычно не хранят, это скорее из стана конфигурационных файлов и прочих декларативных описаний.

Если ты думаешь, что с CSV в общем случае работать легко и просто, то это только потому, что тебе не попадались такие строки:

1,2, "vova,dima",7
3,, "lenin",0

Это абсолютно корректный CSV, однако что получится, если мы попробуем разбить верхнюю строчку по запятой? Или какое значение у нас окажется во втором поле нижней строки? Погоди рвать волосы, решение есть. И оно, как ни странно, реализовано в виде модуля для Python, который, в свою очередь, предоставляет набор консольных команд для разных задач. Модуль называется csvkit и включает в себя несколько интересных утилит:

  • in2csv — «не знаю, что это, но я хочу преобразовать это в CSV», работает, например, с файлами Excel;
  • csvcut — позволяет корректно манипулировать колонками, в том числе используя их имена;
  • csvlook— выводит CSV как красивую табличку в терминале, по аналогии с консольными клиентами к БД;
  • csvjson — конвертирует CSV в JSON в виде списка объектов с полями и значениями;
  • csvsql — всего-навсего позволяет делать SQL-запросы к CSV-документам. Not a big deal;
  • csvsort — позволяет сортировать по колонкам, в том числе используя их имена.

Неплохо, да? Целая инфраструктура. Если хочется осознать всю прелесть — можно, например, взять файл imdb-250-1996-2011-lists-only.xlsx, а потом сделать так:

$ in2csv imdb-250-1996-2011-lists-only.xlsx | csvsql --query
    "select Title,Year from stdin where Year<2009" | csvsort -r
    -c Year | head -n 10 | csvlook

Мне кажется, даже объяснять, что конкретно здесь происходит, не требуется — после прочтения текста выше это должно быть довольно очевидно. Попробуй понять и прочувствовать сам.

«Ну да, с CSV-то и простыми текстовыми форматами это все работает, но в случае JSON мне ничто такое не поможет», — подумал ты. И напрасно. Утилита jq позволяет делать с JSON-файлами чуть менее, чем все. Если учесть, что парой абзацев выше упоминалась команда csvjson, то простор для действия практически неограничен.

Самый простой способ начать работу с ней — это подать на вход какой-нибудь JSON-файл и получить выдачу в консоли с красивыми отступами и подсветкой синтаксиса (!). Поскольку в JSON все — либо объект, либо список объектов, то мы обращаемся ко всему, используя либо точку, либо квадратные скобки:

$ echo '{"first_name": "Paul", "last_name": "McCartney"}' | jq "."
{
  "first_name": "Paul",
  "last_name": "McCartney"
}
$ echo '{"first_name": "Paul", "last_name": "McCartney"}' |
    jq ".first_name"
"Paul"
$ echo '' | jq '.[] | select(.name | contains("o"))'
{
  "name": "John"
} {  "name": "George"
}
{
  "name": "Ringo"

}

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

SSH-серверы / библиотеки

Самый известный и распространенный SSH-сервер и клиент — это openSSH (OpenBSD Secure Shell). Это надежная реализация, которая поддерживается в хорошем состоянии и была впервые выпущена в 1999 году. Так что это реализация, которую вы чаще всего встретите в BSD, Linux и даже Windows, поскольку она поставляется в Windows, начиная с Windows 10.

Но openSSH — не единственная реализация, вот и другие:

SSH-серверы:

  • openSSH — OpenBSD SSH, поставляется в дистрибутивах BSD, Linux и Windows, начиная с Windows 10
  • Dropbear — реализация SSH для сред с малым объемом памяти и ресурсов процессора, поставляется в OpenWrt
  • PuTTY — реализация SSH для Windows, обычно используется клиент, но реже используется сервер.
  • CopSSH — реализация OpenSSH для Windows

Библиотеки SSH (реализация на стороне сервера):

  • libssh — мультиплатформенная библиотека C, реализующая протокол SSHv2 с привязками в Python, Perl и R; он используется KDE для sftp и GitHub для инфраструктуры git SSH
  • wolfSSH — серверная библиотека SSHv2, написанная на ANSI C и предназначенная для встраиваемых систем, ОСРВ и сред с ограниченными ресурсами
  • Apache MINA SSHD — Java-библиотека Apache SSHD основана на Apache MINA
  • paramiko — библиотека протокола Python SSHv2
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: