SSH - andyceo/documentation GitHub Wiki
На этой странице описывается установка и настройка OpenSSH и утилит, связанных с SSH.
В конфигурацию по умолчанию внести следующие настройки (файл /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
После этого введите пароль от ключа один раз, и дальше можно будет уже не вводить его.