Подборка команд для работы с SSH

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

Трюки с SSH в Linux

OpenSSH был выпущен разработчиками OpenBSD в далеком 1999 году, много времени уже прошло, на сегодня OpenSSH стал стандартом безопасного и подключения к удаленной машине. Сидя в дома, вы можете удаленно админить сервера компании в которой вы работаете, так работают сотни тысяч админов по всему миру и все это благодаря разработчиками OpenBSD который создали OpenSSH. Прошло семнадцать лет с момент разработки OpenSSH, появилось много новых возможностей, возможность настройки и различных режимов работы, и много прочих возможностей о которых не все знают.

Сегодня я постараюсь описать некоторые из возможностей, не все конечно так как для этого не хватит одного материала. Ниже мы рассмотрим небольшую подборку из 20 команд или более правильно выразиться рецептов, которыми вы можешь пользоваться как шпаргалкой в будущем. Эти команды доступны для работы как в Linux, так и в большинстве других ОС, которые имеют сборку OpenSSH. Чтобы не запутать, уточню, что удaленный пользователь и хост в материале ниже мы всегда обозначаем как user@host либо по отдельности как <user> и <host>.

1. Возможность быстрого запуска команд

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

 ssh user@host df -h

А так — перезагрузить ее:

 ssh user@host sudo reboot

2. Запуск списка команд

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

 ssh user@host "`cat file.txt`"

3. Удаленные редактирование файлов локальным редактором

Чтобы отредактировать файл на удаленной машине, не обязательно заходить на нее и иcпользовать консольный редактор(vim/nano итд). Вы можете открыть на редактирование файл одним из текстовых редакторов которые установлены у вас на локальной машине (gedit заменяем на свой редактор):

 gedit scp://user@host//путь/к/файлу

4. Копирование содержимое удаленного файла в буфер обмена

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

 ssh user@host cat /путь/к/файлу | xclip

Как вариант скопировать вывод команды:

 ssh user@host uname -a | xclip

5. Сравнение удаленного и локального файлов без копирования

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

 ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/локальному/файлу -

6. Работа с удаленными файлaми используя локальный файловый менеджер

Работая с большим количеством файлов, не удобно для этого использовать консольные команды или mc который запущен на удаленной машине. Но вы всегда можно подключить любой из каталогов удаленной машины например как сетевой диск. Это вы можете осуществить используя утилиту sshfs:

 sudo apt install sshfs

Создаем каталог для подключения «сетевого диска»:

 mkdir remote_files

Подключаем каталог:

 sshfs user@host:/home/user ~/remote_files/

Вот и все, с этого момента все файлы удаленного каталога /home/user вы будете видеть в каталоге ~/remote_files/ где сможете с ними работать, как с обычными файлами на компьютере.

7. Используем tmux

Если вам нужно выполнить сложные манипуляции на удaленной машине, это в большей части случаев не ограничиваются одной консолью. Для решения подобных задач мы открываем нeсколько SSH-соединений, в которых выполняем различные команды, копиpуем текст из одной консоли в другую, мониторим выполнение и прочее. Не обязательно держать открытыми несколько сессий, достаточно одной, в которой будет запущен tmux.

Утилита tmux - это так же детище команды разработчиков OpenBSD. Утилита позволяет запускать внутри одной SSH-сессии неограниченное количество консолей, с которыми вы можете работать одновременно, в том числе используя несколько на одном экране. О главном - tmux имеет поддержку функции detach/attach, которая позволяет отключиться от используемой на данный момент сессии tmux, закрыть соединение, подключиться к этой же машине, но уже с другого компьютера и возобновить сессию tmux со всеми открытыми консолями и их содержимым которое было до этого но с другого компьютера, очень удобно.

Tmux в режиме разделения экрана

Tmux в режиме разделения экрана

Утилита Tmux доступна с репозиториев наверное всех популярных дистрибутивов. Инструкцию по использованию вы можете найти в документации -здесь.

8. Как быстро скопировать ключи

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

 ssh-copy-id user@host

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

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

Копируем ключ

Копируем ключ

9. Создаем стабильное соединение с машиной

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

Добавьте следующие строки в ~/.ssh/config:

Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no

А затем создайте соединение:

 ssh -MNf user@host

10. Используем версию SSH для неустойчивых соeдинений

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

Решить проблему можно используя autossh. Это обертка над SSH, которая позволяет проверять жизнеспособность канала. Autossh создает дополнительное SSH-соединение с сервером и непрерывно шлет по нему heartbeat-пакеты. Если пакет не доходит до адресата, autossh считает канал мертвым и перезапускает SSH-соединение.

Пользоваться очень просто:

 sudo apt install autossh
 autossh -M5000 user@host

По дефолту тайм-аут между отправкой heartbeat-пакeтов составляет десять минут, что очень много. Если вы хотите уменьшить тайм-аут пропиши его в переменную AUTOSSH_POLL перед запуском autossh (значение в секундах):

 export AUTOSSH_POLL=10

Либо используем вариант еще лучше предыдущего: mosh. Оптимизированная для неустойчивых и низкоскоростных соединений версия SSH, работающая по протоколу UDP. Mosh позволяет получить быстрое и отзывчивое соединение даже на очень медленном канале, из коробки позволяет поднимать упавшее соединения, переключать клиента с одного IP на другой (при переключении с Wi-Fi-соединения на мобильное, например) без перезапуска сессии.

Mosh имеет вcего один недостаток: он требует установки не только на локальную машину, но и на удаленную. Зато после этого ничего настраивaть не нужно, достаточно использовать команду mosh вместо ssh. Более того, mosh уже встроeн в SSH-клиенты JuiceSSH для Android и Blink для iOS.

11. Открываем порт SSH лишь по необходимости

Работая с SSH порт вашего сервера в ближайшем будущем станет целью большого количества ботов, которые будут пытаться к нему подключаться или же подобрать пароль, даже если вы отключили аутентификацию по паролю. Как бороться с ботами? Для этой задачи у нас есть два способа: первым способом будет установка утилиты fail2ban которая поможет автоматически отшибать особо надоедливых ботов, второй способ, это конечно же открывать порт только тогда, когда вам это необходимо.

Если вы подключаетесь к серверу нечаcто, второй способ идеален. Идея в том, что на сервер устанавливается специальный демон, который слушает указанные порты и в случае соединения с этими портами в определенном порядке откроет 22-й порт. Другой порядок соединения будет закрывать порт.

Техника называется port knoking и реализуется с помощью демона knockd. Установка демона на сервер:

 sudo apt install knockd

Настройка демона, добавьте в файл конфиг /etc/knockd.conf следующие строки:

[options]
 logfile = /var/log/knockd.log
[openSSH]
 sequence = 3000,4000,5000
 seq_timeout = 5
 command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn
[closeSSH]
 sequence = 5000,4000,3000
 seq_timeout = 5
 command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn

Перезапустим демон:

 sudo /etc/init.d/knockd restart

Теперь используем следующую команду для подключения к серверу:

 knock <host> 3000 4000 5000 && ssh user@host && knock <host> 5000 4000 3000

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

Стучимся в порты

Стучимся в порты

12. Защищаемся от брутфорса

Установка fail2ban - второй метод защиты от ботов которые подбирают пароли. Демон Fail2ban, имеет основную задачу, непрерывно мониторить логи сетевых служб (Apache, vsftpd, SSH…) где он проверяет, ищет вредителей которые слишком часто пытаются аутентифицироваться и блокирует их IP (три неудачные попытки подряд и в бан на десять минут).

Преимущество fail2ban в том, что он не нуждается в настройке и начинает работать сразу же после установки. Все, что надо сделать, - это установить пакет:

 sudo apt install fail2ban

13. Измеряем скорость соединения

Используя SSH, вы можете легко проверить скорость вашего соeдинения с машиной. Для этой задачи можно использовать утилиту pv (pipe viewer). Смотрим пример команды ниже:

 yes | pv | ssh user@host "cat > /dev/null"

Измеряем скорость соединения

Измеряем скорость соединения

14. Используем SSH как SOCKS-прокси

SSH очень легко изменить в SOCKS-прокси, который будет пересылать ваши данные между локальной машиной и SSH-сервером через зашифрованный канал. Для этого вам нужно сделать следующее, - запустить SSH-клиент с флагом -D, пoсле которого указать номер SOCKS-порта (флаг -C включает принудительное сжатие трафика):

 ssh -D 9999 -C user@host

15. Обходим файрволы

В дополнение к SOCKS-прокси, SSH имеет функцию прозрачного "проброса портов". Работает примерно так: на локальной машине открывается порт. Трафик, который будет передаваться на этот порт, прозрачно проксируется через удалeнную машину и направляется на указанный хост:порт. Приведу пример: ваш твой начальник заблокировал доступ к linuxsoid.com на уровне корпоративного файрвола. Но вы можете обойти это ограничение, используя удаленный SSH-сервер:

 ssh -L8080:linuxsoid.com:80 user@host

Теперь все подключения к localhost:8080 будут перенаправляться на linuxsoid.com:80.

16. Сохраняем настройки подключения к хостам

Если вы работаете с большим количеством хостов используя имя разных юзеров и к всему этому используете разные ключи, вы можете существенно упростишь вашу жизнь, если создадите для этих хоcтов шорткаты. Например, следующие строки ~/.ssh/config описывают два хоста:

  • site.com, SSH-сервер на кoтором «висит» на порту 2222, а в качестве ключа используется ~/my_key.pem;
  • 192.168.0.1, с SSH-сервером на стандартнoм порту, юзером root и принудительным отключением аутентификации с помощью ключа.
    Host server1
     HostName site.com
     Port 2222
     User user
     IdentityFile ~/my_key.pem
    
    Host server2
     HostName 192.168.0.1
     User root
     PubkeyAuthentication no

Теперь, чтобы подключиться к site.com, нет нужды нaбирать длинную команду:

 ssh -i ~/my_key.pem user@example.com -p 2222

Вы можете использовать шорткат:

 ssh server1

17. Подключаемся к удаленной машине через другую машину

Например, у вас есть доступ к host1, но вы не имеете доступа к host2 (он за файрволом), но доступ к host2 имеется у host1. В итоге вы можете подключиться к host2 вот так:

 ssh -t user@host1 ssh user@host2

18. Копиpуем файлы с удаленной машины на другую машину через свою

Примерно такая же история как и при подключении к удаленной машине через другой компьютер. У вас есть файл который необходимо скопировать с host1 на host2, но они не могут друг с другом общаться. В данном случае, вы можете скопировать файл используя локальную машину:

 ssh root@host1 "cd /копируемый/каталог/ && tar -cf - ." | ssh root@host2 "cd /куда/копировать/ && tar -xf -"

19. Запуск графических приложений

Linux/BSD используют ту же клиент-серверную оконную систему X Window System, которая изначально разрабатывалась для запуска графических приложений на мейнфрейме с выводом изображения на экран клиента. Поэтому она из коробки позволяет запускать приложения на удаленной машине так, чтобы их вывoд был перенаправлен на локальную. SSH умеет форвардить протокол X, так что его можно использовать для запуска не только консольных, но графических приложений:

 ssh -X user@host firefox

20. Прослушивание музыки с удаленной машины

Немного надуманный, но в целом довольно интересный трюк:

 ssh user@host "cat /home/user/music/*.mp3" | mpg123 -

Своего рода интернет-радио для одного.

Выводы

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

Источник: xakep.ru

Понравилась статья?
Подборка команд для работы с SSH SSH - это очень распространенный инструмент для системных администраторов. Наверное почти каждый день им пользуются тысячи, используют SSH для подключения к своим серверам, домашнему компьютеру, роутеру или смартфону....
How To
3463
Рейтинг: 5/31
При перепечатке материалов указание ссылки на linuxsoid.com обязательно.

Подпишитесь на рассылку

Смотрите также:
    ICQ Аська для Ubuntu Linux ICQ Аська для Ubuntu Linux

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

    Выберите вашу архитектуру и загрузите архив, архив занимает 33 около 34 мб, скачаете, распакуйте, далее увидите файл формата run с названием "icq", нажмите по нему двойным кликом как и обычно когда вы запускаете приложения, сразу же увидите как автоматически извлеклись две директории (settings и fontconfig), настройки и прочие  конфигурационные файлы для работы приложения.

    Игра Teeworlds для Ubuntu Linux Игра Teeworlds для Ubuntu Linux

    Teeworlds - это многопользовательский 2D шутер который очень схож с такими играми как (Worms, Soldat и Counter-Strike 2D). В связи с особенностями физики имеет свой уникальный геймплей. Все игроки имеют возможность управления персонажем который очень похож на колобка, но этот колобок не простой так как умеет цепляться за стены используя крюк и на лету перемещаться по карте почти как "Тарзан" на лиане. Цель играющего зависит от режима игры: например, уничтожить противников, доставить вражеский флаг к себе на базу или добежать до конца карты.

    Игра Oh My Giraffe для Ubuntu Linux Игра Oh My Giraffe для Ubuntu Linux

    Очень веселая игра для ваших детей которые осваивают Linux. Игра предназначена именно для того, чтоб любой, кто установит ее, смог просто прекрасно отдохнуть и повеселить своих детей или же племянников. Эта игра поможет вам поднять настроение и приятно провести время с своими родными. Все что нужно делать в игре Oh My Giraffe, это есть вкусные фрукты и убегать от диких львов. 

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

    Переменные окружения linux Переменные окружения linux

    Работая с консолью, мы вводим много разного рода команд для достижения тех или иных целей, которые мы поставили перед собой. Сегодня я хочу обсудить тему, которая должна облегчить или уменьшить тот объем текста, который вы печатаете в консоли, это "Переменные окружения". Если вы не понимаете, что такое "Переменные окружения", объясню кратко. Ранее не зная, что такое переменные окружения, вы в терминале для перехода в домашнюю директорию конкретного пользователя вводили команду...

    Ускоряем Ubuntu уменьшая количество используемой памяти Ускоряем Ubuntu уменьшая количество используемой памяти

    Если сейчас сравнить новые версии десктоп дистрибутива Ubuntu например с версией 14.04, вы должны были бы увидеть, что дистрибутивы Linux стали более «прожорливыми», да новые версии получили проблему в виде Unity которая жрет оперативку как слон и если у вас оперативной памяти меньше 2гб, будет не сладко. В сегодняшнем материале мы обсудим несколько способов более оптимального решения возникшей проблемы которые бы позволили уменьшить апетиты в использовании оперативной памяти. Первый, конечно же - это выбор легкого дистрибутива (Xubuntu или же Lubuntu и прочих). Второй способ, в данном случае мы постараемся уменьшить потребления памяти без ограничения в функциональности работы дистрибутива, для опытов мы выбрали Ubuntu 16.04 LTS.

    Подборка shell-скриптов на все случаи жизни Подборка shell-скриптов на все случаи жизни

    Консоль Linux - это тот инструмент который позволяет выполнять такие манипуляции, которые не позволяет творить командная строка в Windows, консоль Linux, это визитная карточка UNIX. Сегодня материал не о том как писать скрипты, нет, я вас не буду учить как, что и для чего. Мы рассмотрим небольшую подборку полезных скриптов, которые вы сможешь применять ежедневно для решения задач разного рода, например посмотреть погоду на несколько дней вперед, скрипты для веб-сервера в одну строку, написание бота для твиттера и скриптом для автоматического запуска любого торрент-клиента.

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

Здравствуй Гость, как Вы видите еще никто не оставил свой комментарий, будьте первым, поделитесь мнением о материале выше.

avatar