В сети очень много материала о замечательной команде ssh. В этом обзоре я опишу несколько примеров собственного использования, лишь объединив найденное на просторах Internet.
Установка ssh в Ubuntu.
В Система-Администрирование-Менеджер пакетов Synaptic ищем и отмечаем для установки пакет ssh — secure shell client and server (metapackage). Либо устанавливаем из командной строки:
sudo apt-get install ssh |
Конфигурационный файл лежит в /etc/ssh/sshd_config
, и в нем для версии Ubuntu 10.04 настроено по-умолчанию все, что я хочу использовать.
Запуск\остановка\перезапуск сервиса (после внесения в конфиг правок): sudo service ssh start\stop\restart
.
Теперь об использовании.
1. ssh и scp без пароля.
Нужно много для чего. Мне нужно для автоматизации скриптом внесения изменений в некоторых системных файлах, перезаписи /etc/crontab
и т.п.
Для этого один и тот же пользователь (usefree) должен быть на обоих компьютерах (host1, remotehost) и для него необходимо сгенерировать пару ключей:
ssh-keygen -t rsa |
Вообще бы нужно задавать пароли, но в этом примере я не буду, нажав «Ввод» на предложение коммандной строки ввести пароль. И далее выполняем команду:
ssh-copy-id -i ~/.ssh/id_rsa [email protected] |
где
usefree
— пользователь, под которым будем в дальнейшем авторизоваться;
remotehost
— имя, или IP-адрес удаленного компьютера.
Теперь для доступа к компьютеру remotehost без пароля достаточно выполнить:
Для возможности подключаться с remotehost на host1 также без пароля можно скопировать приватный и публичный ключи с host1 на remotehost:
scp /home/usefree/.ssh/id_rsa* remotehost:/home/usefree/.ssh/ |
и записать данные о ключах в файл authorized_keys локального компьютера, выполнив с remotehost:
ssh-copy-id -i ~/.ssh/id_rsa usefree@host1 |
Если возникает ошибка:
Agent admitted failure to sign using the key, |
то на локальной машине нужно еще выполнить:
ssh-add |
Логично, что для использования в скрипте возможности менять конфигурационные файлы на удаленном компьютере, доступные только для суперпользователя, сам скрипт нужно запускать от имени суперпользователя и пару ключей нужно генерировать под суперпользователем. Чтобы обойти это ограничение достаточно в конце файла /etc/sudoers
на remotehost прописать в конце строку:
usefree ALL = (ALL) NOPASSWD: ALL |
И перезагрузить сервис sudo
sudo service sudo restart |
Теперь с локальной машины возможно выполнение в скрипте без запроса подтверждения строк типа:
ssh [email protected] 'sudo service smbd restart |
2. Копирование файлов через терминал с помощью scp.
Есть на самом деле очень подробная инструкция на английском, приведу фрагмент.
Копирование файла «foobar.txt» с удаленного компьютера (remotehost) на локальный:
scp [email protected]:foobar.txt /some/local/directory |
Копирование файла «foobar.txt» с локального компьютера на удаленный:
scp /some/local/directory/foobar.txt [email protected]:/some/remote/directory |
Копирование содержимого директории «foo» с локального компьютера на удаленный компьютер в директорию «bar»:
scp -r /some/local/directory/foo [email protected]:/some/remote/directory/bar |
Копирование файла «foobar.txt» с удаленного компьютера remotehost1 на удаленный компьютер remotehost2:
scp [email protected]:/some/remote/directory/foobar.txt \ [email protected]:/some/remote/directory/ |
3. Запуск графического приложения с трансляцией окна приложения с удаленного компьютера на локальный (на примере gedit с параметром).
ssh -X [email protected] 'gedit /home/file' |
Примечательно, что сам gedit запустится на удаленном компьютере, а окно программы будет транслироваться на локальный.
4. Трансляция речи в локальный микрофон на удаленных динамиках (ну так, чисто охрану попугать, или секретаршу 🙂 )
arecord -f dat | ssh -C [email protected] aplay -f dat |
Вот и все, удачной работы с помощью ssh!)