Table of Contents
ssh базовый функционал
Разберем для начала самое простое соединение
ssh -v -p 22 -C username@host_ip # Флаги -v # вывод отладочной информации # особенно полезен при анализе проблем аутентификации. -p 22 # порт для подключения к удалённому серверу
Выполнение удаленных команд
Помимо открытия сеанса командной оболочки в удаленной системе ssh позволяет также выполнить единственную команду. Например, в удаленной системе <html>remote-host</html> можно выполнить команду free и получить результаты в локальной системе
ssh user@remote-host free
Для выполнения нескольких команд, используем такой синтаксис:
ssh -l user@remote-host 'hostname; pwd'
Этот прием открывает возможность для довольно интересных вариантов использования, как в следующем примере, где вывод команды ls в удаленной системе перенаправляется в локальный файл:
ssh user@remote-host 'ls -l' > dir_list
Обратите внимание на одиночные кавычки. Они необходимы для предотвращения подстановки пути в локальной системе; нам требуется, чтобы подстановка была выполнена в удаленной системе. Аналогично, если бы нам потребовалось перенаправить вывод в файл в удаленной системе, мы могли бы поместить оператор перенаправления и имя файла внутрь одиночных кавычек:
ssh user@remote-host 'ls -l > dir_list'
Enable Compression for SSH
SSH поддерживает сжатие данных с помощью алгоритма сжатия <html>gzip</html>, который сжимает все возможные потоки данных, такие как <html>stdin</html>, <html>stdout</html>, <html>stderr</html> и т.д.. Эта опция (<html>-C</html>) очень удобна при использовании медленных сетевых соединений.
ssh -C user@remote-host free
Алиасы
Для удобства подключения по ssh, можно использовать алиасы. Они позволяют весьма сэкономить время. Например, чтобы подключится к хосту <html>ivanov_i@spb-MX-i3.extrt.int.company.net</html> можно добавить следующею запись в файл <html>~/.ssh/config</html>
Host office HostName spb-MX-i3.extrt.int.company.net User ivanov_i
Теперь можно подключится, просто набрав:
ssh office
Так же, можно указать настройки соединения по умолчанию с помощью конструкции Host *, например:
Host * User root Compression yes Port 2233
То же самое можно сделать и в <html>/etc/ssh/ssh_config</html> (не путать с <html>/etc/ssh/sshd_config</html>), но это требует прав рута и распространяется на всех пользователей.
Проброс stdin/out
Допустим, мы хотим сделать запрос к программе удалённо, а потом её вывод поместить в локальный файл
ssh user@10.10.10.14 command >my_file
Допустим, мы хотим локальный вывод положить удалёно
ping -c 2 ya.ru | ssh user@10.10.10.14 "cat > ping.txt" # либо так tar cz a/dir | pv | ssh user@10.10.10.14 "cat >outfile.tar.gz
Усложним пример – мы можем прокидывать файлы с сервера на сервер: Делаем цепочку, чтобы положить stdin на 10.10.10.14, который нам не доступен снаружи
command | ssh user@11.22.33.44 ssh user@10.10.10.14:/path/to/file
Завершение зависшей сессии
Если при потере соединения зависла ssh-сессия, её можно завершить на сервере. Смотрим список залогиненных пользователей с их ip и pid терминала:
who -ap
Ищем зависшую сессию (например, по времени авторизации), смотрим pid и завершаем по нему процесс:
kill -9 <pid>