SSH - andyceo/documentation GitHub Wiki
На этой странице описывается установка и настройка OpenSSH и утилит, связанных с SSH.
Установка:
apt install openssh-client
apt install openssh-server
В конфигурацию по умолчанию внести следующие настройки (файл /etc/ssh/sshd_config):
PermitRootLogin no
AuthorizedKeysFile %h/.ssh/authorized_keys
PasswordAuthentication no
MaxStartups 10:30:60
Banner /etc/issue.net
Прежде, чем выставить PasswordAuthentication no, сначала нужно скопировать на сервер ключи со всех рабочих машин, с которых планируется входить. Сделать это можно с помощью команды, выполняемой на рабочей станции:
ssh-copy-id REMOTE_USER@REMOTE_SERVER
Кроме того, я создал файл /etc/ssh/sshrc, в котором написал команду для отсылки сообщения на электронную почту при логине пользователя: sudo nano /etc/ssh/sshrc
echo $(date) $SSH_CONNECTION $USER $SSH_TTY | mail -s "ssh login" <[email protected]>
Перед этим нужно установить пакет mailutils (чтобы работала команда mail). Об этом смотрите выше пункт "5. postfix. Установка почтового сервера postfix".
Полезные ссылки:
- http://help.ubuntu.ru/wiki/ssh
- http://forum.ubuntu.ru/index.php?topic=140732.0
- http://www.openbsd.ru/docs/ssh-tips.html
- http://habrahabr.ru/post/122445/
-
SSH-ключ пользователя. Создаем ключ:
ssh-keygenПо умолчанию создается ключ RSA. Опция
-t ed25519создаст более короткий и защищенный ключ в формате ed25519. Опция-Сзадаст метку ключа (может быть любой строкой):ssh-keygen -t ed25519 -C "`whoami`@`hostname`"Если был создан ключ с паролем (passphrase), то отключить пароль можно так:
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]Или просто напечатать
ssh-keygen -pв терминале, и пройти процесс смены (отключения) пароля интерактивно. См. How do I remove the passphrase for the SSH key without having to create a new key?Github рекомендует использовать ed25519 для новых ключей, а в качестве legacy RSA:
ssh-keygen -t rsa -b 4096 -C "[email protected]" -
Пользовательский файл настроек SSH. В случае каких-то особенных настроек подключения к удаленным хостам, например, использования другого ключа и/или порта, можно создать алиас хоста со всеми нужными настройками в файле
~/.ssh/config(права на файл должны быть0644, создать и править одной командой:touch ~/.ssh/config && chmod 644 ~/.ssh/config && nano ~/.ssh/config):Host dev IdentityFile ~/.ssh/your_private_key Hostname dev.example.com Port 1837 User user_at_dev Host sources IdentityFile ~/.ssh/your_private_key Hostname sources.example.com Port 1837 User user_at_sourcesПосле этого можно зайти на сервер разработчика
dev.example.comпросто напечатав в консоли:ssh dev -
Копируем ключ на свои сервера (можно использовать короткую запись из файла
~/.ssh/config):ssh-copy-id REMOTE_USER@REMOTE_SERVERМожно использовать ключ
-i ~/.ssh/id_ed25519.pubчтобы скопировать какой-то определенный ключ (их может быть несколько) -
Копируем в аккаунты Github, Bitbucket
Проблемы?
Прописываем вручную в ssh: ssh_add
Источники:
- http://help.github.com/linux-set-up-git/
- http://www.veebsbraindump.com/2010/12/github-ubuntu-ssh-error-agent-admitted-failure-to-sign-using-the-key/
Указать порт можно опцией -P 2022 (в отличие от ssh, в котором порт ставится маленькой буквой -p 2022):
scp -P 2022 ....
Если нужно скопировать директорию:
scp -rp sourcedirectory user@dest:/path
Ключи означают следующее:
-r рекурсивно,
-p сохраняет время изменения, доступа и права оригинальных файлов.
Внимание! scp не сохраняет пользователя (и возможно группу) даже при передаче ключа -p. Лучше использовать rsync для более точного копирования всех атрибутов файлов: rsync -av source 192.0.2.1:/dest/ination
-
LOCAL => REMOTE:
Запускаем на
LOCAL, чтобы положить файлы наREMOTE:scp file1 file2... [email protected]:pathПример:
scp ann beth clyde [email protected]:/u/forsythe/tmp -
REMOTE => LOCAL
Запускаем на
LOCAL, чтобы взять файлы сREMOTE:scp [email protected]:path file1 file2... destПример:
scp '[email protected]:/u/forsythe/images/*.jpg' pictures/LaborDay
Источники:
Данное руководство будет дано для случая, когда для работы с ssh используется файл ~/.ssh/config.
-
Допустим у нас есть запись в
configдля какого-то сервера:Host myserver Hostname myserver.example.com User myuser Port 8927И мы можем залогиниться на этот сервер, набирая:
ssh myserver -
Теперь мы поднимем туннель, создав особое соединение с этим сервером
myserver:ssh developer3072 -D 4444Эта команда открывает локально порт 4444, и теперь нам надо настроить все клиентские приложения использовать этот прокси:
127.0.0.1:4444. Можно задать настройки центрального прокси для операционной системы в целом. -
Если нужно, чтобы трафик на какой-либо другой сервер
myserver2шел также через проксиmyserver, нужно задать следующие соединения в файлеconfigдля сервераmyserver2:Host myserver2 Hostname myserver2.example.com User myuser2 ProxyCommand ssh -W %h:%p myserver Port 8672Можно даже пробросить порт с сервера
myserver2на 127.0.0.1. На примере порта MySQL3306, допишите в конфигурациюmyserver2следующую строчку:LocalForward 3306 127.0.0.1:3306
SSH не умеет напрямую работать с SOCKS-прокси, и не читает переменные окружения вида socks_proxy, поэтому нужно использовать например netcat, чтобы направить трафик через прокси:
ssh -o ProxyCommand='nc -X 5 -x 127.0.0.1:9050 %h %p' swarm01
Отличный ответ здесь: Run SSH over a SOCKS proxy?
Если вы зашли по ssh на хост под пользователем, у которого запароленный ssh-ключ, то при каждом действии, требующем ключа, придется вводить пароль от ключа. Чтобы ввести его один раз и дальше не вводить в течении сессии, сделайте так:
ssh-agent bash
ssh-add ~/.ssh/id_rsa
После этого введите пароль от ключа один раз, и дальше можно будет уже не вводить его.