User Tools

Site Tools


ssh:ssh_базовый_функционал

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>
ssh/ssh_базовый_функционал.txt · Last modified: 2023/04/06 10:18 (external edit)