BASH: многострочные команды по SSH
Есть несколько вариантов как выполнить несколько команд на удаленном сервере по SSH.
Первый – используя разделитель “ ; “:
Второй – используя одинарные кавычки:
Но в таком случае не будут раскрыты переданные переменные:
Локальная переменная на удаленном сервере $HOME работает, а вот значение переданной переменной – нет.
Добавляем bash -c и двойные кавычки:
Обратите внимание на значение $HOME — /Users/local.user .
Следующий способ – перенаправить список команд из файла:
Или – используя heredoc :
Что бы избежать ошибки:
“Pseudo-terminal will not be allocated because stdin is not a terminal.”
используйте опцию -T :
И пример bash -скрипта деплоя (точнее – дестроя перед деплоем ), в котором используются многострочные команды SSH:
Команды с файлами и папками
- ls — список файлов и папок в текущей директории
- ls -lia — вывод списка даже скрытых файлов и папок по алфавиту с отображением размеров
- cd ПУТЬ/ — (change directory) сменить директорию на путь/
- pwd — показать текущую папку
- cd / && du -hs * — когда жесткий забит до отказа, то посмотреть в какой именно директории много файлов
- df — (disk free) узнать размер всех смонтированных дисков
- mkdir ПАПКА — создать папку
- rmdir ПАПКА — удалить папку из файловой системы
- rm -rf ПАПКА – удалить папку со всем содержимым без подтверждения
- mv ПАПКА1 ПАПКА2 — (move) используется для перемещения или переименования файлов или папок
- cp -r ПАПКА1 ПАПКА2 — скопировать папка1 в папка2
- du -sh — сколько весит текущая папка
- du -sh * — показать размер каждого файла в текущей папке
- vi ФАЙЛ или view ФАЙЛ — вывести файл на экран в редакторе, для выхода ESC и отправить команду :q
- touch ФАЙЛ — создать файл
- rm ФАЙЛ — удалить файл
- cp ФАЙЛ1 ФАЙЛ1 — скопировать файл1 в файл2
- ln -s ФАЙЛ ССЫЛКА — создать символическую ссылку к файлу
- fsck -y — автоматическая проверка и исправление ошибок в файловой системе
- find / -name php.ini — поиск файла с именем php.ini c корня OS
- find / -name a.txt -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r — поиск файлов с именем a.txt c корня OS с выводом датой изменения и сортировкой в обратном порядке
- find /home/bitrix/www/ -mtime -14 -printf ‘%TY-%Tm-%Td %TT %pn’ > /home/bitrix/find.txt — поиск всех файлов в папке WWW которые изменялись за последние 14 дней и выводом результата в файл
- tar АРХИВ.tar ФАЙЛ — заархивировать файл и присвоить ему имя архив.tar:
- tar cf АРХИВ.tar ФАЙЛ — создать tar-архив с именем file.tar содержащий files
- tar xf АРХИВ.tar — распаковать файл.tar
- tar czf АРХИВ.tar.gz ФАЙЛ — создать архив tar с сжатием Gzip
- tar xzf АРХИВ.tar.gz — распаковать tar с Gzip
- tar cjf АРХИВ.tar.bz2 — создать архив tar с сжатием Bzip2
- tar xjf АРХИВ.tar.bz2 — распаковать tar с Bzip2
- gzip ФАЙЛ — сжать файл и переименовать в file.gz
- gzip -d АРХИВ.gz — разжать архив.gz в file
- zip -r АРХИВ.zip ПАПКА/ — запаковать в архив.zip включая все папки в ПАПКА
Туннелирование в SSH
Чтобы использовать SSH безопасно, создается SSH-туннель. Это означает, что данные шифруются на одном конце SSH-соединения и расшифровываются на другом.
Для защиты данных нужно соблюдать правила:
- запретить удаленный root-доступ;
- выбрать нестандартный порт для SSH-сервера;запретить подключаться с пустым паролем или отключать вход по паролю;
- использовать длинные SSH2 RSA-ключи;
- ограничить количество IP-адресов, с которых возможен доступ;
- следить за сообщениями об ошибках аутентификации;
- запретить доступ с опасных адресов;
- установить системы для обнаружения вторжений (IDS — Intrusion Detection System).
- использовать ловушки. Например, Tarpit — это порт-ловушка для замедления входящих соединений. Если сторонняя система подключается к порту, быстро закрыть соединение будет невозможно. Она будет расходовать системные ресурсы и ждать, когда соединение прервется по тайм-ауту или будет разорвано вручную.
Хотя SSH — надежный протокол удаленного управления, он также имеет уязвимости. Следует постоянно помнить о том, что никакая защита не является совершенной, а лучшая из них — это внимательность и аккуратность пользователя.
После курса вы сможете претендовать на позицию junior-специалиста по кибербезопасности.
Удаленное выполнение команд на Linux-сервере из Windows
Вполне реальна ситуация, когда хотелось бы выполнить определенную команду на сервере Linux, но выполнить ее автоматически, да еще и с другой машины, при чем эта другая машина — Windows.
Например, к UPS подключены два компьютера, один их них Windows, второй — Linux. Предположим, UPS подключен по USB/RS232 к Windows-хосту. Когда пропадает питание, UPS позволяет выполнить 1) команду командной строки, 2) выключить компьютер. Если электричества нет, а батарея вот-вот разрядится, Windows-хост спокойно выключится, а вот Linux просто вырубится, как если бы при работе у него выдернули питание. Для решения задачи в текущих условиях необходимо выполнить с Windows-хоста команду выключения (или любую другую) на Linux-хосте до того, как UPS полностью разрядится.
Одним из вариантов решения может быть использование утилиты plink из состава пакета putty. Крайне желательно при этом настроить доступ по ssh по ключу, без пароля.
Все очень просто, на Windows-хосте запускаем cmd и выполняем команду:
plink 192.168.1.246 -ssh -P 22 -l userName -2 -4 -C -i path-to-private-key.ppk «shutdown -h 1»
- 192.168.1.246 — ip Linux-хоста;
- -P 22 — указание порта 22
- -l userName — указание имени пользователя, от имени которого вы входите на Linux-хост;
- -2 — используем протокол версии 2;
- -4 (могло быть -6) — версия IP (IPv4 или IPv6);
- -i path-to-private-key.ppk — путь к приватному ключу без пароля;
- «shutdown -h 1» — команда для выполнения на Linux-хосте.
Полный список параметров можно просмотреть просто выполнив plink в командной строке cmd.
Выполняемые команды можно выполнить конвейром. Например, вместо «shutdown -h 1» попробуйте выполнить что-то вроде «cd /var; ls; echo »; echo ‘NEXT:’; echo »; cd /; ls -al» . Ну или что-то другое.
После выполнения команд, управление вернется в командную строку Windows.
Если на Windows-хосте есть уже настроенные сессии для putty, можно просто указать имя одной из них вместо указания отдельных параметров командной строки, например:
Команды Linux: расширенный справочник команд Unix / Linux / PuTTY SSH
Большинство UNIX-like систем обладают встроенной справкой, которая подробно описывает все доступные команды. Однако чтобы воспользоваться этой справкой, вы должны знать, по крайней мере, название команды, о которой вы хотите получить информацию. Поскольку большинство пользователей только в общих чертах понимают, что они хотят сделать, то, как правило, встроенная справка мало полезна новичкам.
Этот справочник поможет пользователям, знающим, что они хотят сделать, найти соответствующую команду Linux по краткому описанию.