ssh
, ssh-keygen
, ssh-agent
, ssh-add
и правильная конфигурация в /etc/ssh_config
на удаленных системах - необходимые компоненты для обеспечения доступа к удаленным системам.
Во-первых, необходимо создать частную / открытую пару ключей с помощью ssh-keygen
. Результатом процесса keygen являются два файла: открытый ключ и закрытый ключ .
Файл открытого ключа, обычно хранящийся в ~/.ssh/id_dsa.pub
(или ~/.ssh/id_rsa.pub
, для шифрования RSA), необходимо скопировать в каждую удаленную систему, которая будет предоставлять удаленный доступ пользователю.
Файл закрытого ключа должен оставаться в исходной системе или на переносном USB-накопителе, на который ссылается система источников.
При создании пары ключей используется кодовая фраза , чтобы защитить ее от использования пользователями, не прошедшими проверку подлинности. При первом установлении ssh-сессии закрытый ключ может быть разблокирован только с помощью ключевой фразы. После разблокировки исходная система может вспомнить разблокированный закрытый ключ с помощью ssh-agent
. Некоторые системы (например, Mac OS X) будут автоматически запускаться ssh-agent
как часть процесса входа в систему, а затем автоматически ssh-add -k
, который разблокирует ваши личные ssh-ключи, используя фразу-пароль, ранее сохраненную в файле цепочки для ключей .
Соединения с удаленными системами могут быть прямыми или через прокси через ssh шлюзы . В первом случае удаленная система должна иметь только открытый ключ, соответствующий доступным разблокированным закрытым ключам. В случае использования шлюза промежуточная система должна иметь открытый ключ, а также конечную целевую систему. Кроме того, исходная команда ssh должна включить переадресацию агента либо с помощью конфигурации в ~/.ssh/config
, либо с помощью параметра команды -A
.
.
Например, чтобы войти в удаленную систему «app1» через систему шлюзов ssh с именем «gw», можно сделать следующее:
ssh -At gw ssh -A app1
или следующие строфы, помещенные в файл ~/.ssh/config
:
Host app1
ForwardAgent = yes
ProxyCommand = ssh -At gw nc %h %p 2>/dev/null
, который запускает "net cat" (он же nc
) на шлюзе ssh как сетевой канал.
Вышеуказанная настройка разрешает очень простые команды ssh, даже через ssh-шлюзы:
ssh app1
Иногда даже более важными, чем терминальные сеансы, являются команды scp
и rsync
для безопасного перемещения файлов. Например, я использую что-то вроде этого для синхронизации моей личной среды с удаленной системой:
rsync -vaut ~/.env* ~/.bash* app1:
Без файла конфигурации и команды прокси-сервера nc rsync будет немного сложнее:
rsync -vaut -e 'ssh -A gw' app1:
Ничто из этого не будет работать правильно, если удаленные системы не настроены правильно /etc/ssh_config
. Одной из таких конфигураций является удаление «корневого» доступа через ssh, что улучшает отслеживание и учет, когда несколько сотрудников могут выполнять корневые функции.
В автоматических пакетных сценариях необходимо создать специальную пару ключей ssh для ИД пользователя без полномочий root, под которым запускаются сценарии. Как и в случае управления сеансом ssh, пара ключей ssh пакетного пользователя должна быть развернута аналогично: открытый ключ копируется в удаленные системы, а закрытый ключ находится в исходной системе.
Закрытый ключ может быть заблокирован парольной фразой или разблокирован, по желанию системных администраторов и / или разработчиков. Способ использования специального пакетного ключа ssh, даже в скрипте, работающем под root, состоит в использовании опций команды "ssh -i ~/.ssh/id_dsa
" со всеми командами удаленного доступа. Например, чтобы скопировать файл в сценарии, используя специальный «пакетный» доступ пользователя:
rsync -vaut -e 'ssh -i ~batch/.ssh/id_dsa -A gw' $sourcefiles batch@app2:/Sites/www/
Это заставляет rsync
использовать специальную команду ssh
в качестве оболочки удаленного доступа. Команда special-case ssh
использует в качестве идентификатора личный ключ DSA пользователя "batch". Доступ к целевой удаленной системе команды rsync
будет осуществляться с помощью «пакетного» пользователя.