Что может привести к сбою удаленных команд drush с ошибками ssh, когда ssh работает во всех других случаях?

10

У меня есть открытые и закрытые ssh-ключи на всех моих трех серверах (dev, UAT, & production), поэтому я могу войти удаленно или с одного на другой. Все прекрасно работает для sshи scpкоманд.

Это не работает, однако, для Drush. drush @dev statusНапример, если я выполняю из UAT, я получаю баннер сервера, на котором написано, что система «должна использоваться только авторизованными пользователями, бла-бла-бла », и затем я получаю

В доступе отказано (публичный ключ, пароль, клавиатура-интерактив).

Мой ~/.drush/aliases.drushrc.phpфайл содержит:

# Development #
$aliases['dev'] = array(
  'uri' => 'http://default',
  'root' => '/var/www/vhosts/dev.www.company.com/current/',
  'remote-host' => 'companya0.company.com',
  'remote-user' => 'myusername'
);

# UAT #
$aliases['uat'] = array(
  'uri' => 'http://default',
  'root' => '/var/www/vhosts/uat.www.company.com/current/',
  'remote-host' => 'companyc6.company.com',
  'remote-user' => 'myusername'
);

# Production #
$aliases['prod'] = array(
  'uri' => 'http://default',
  'root' => '/var/www/vhosts/www.company.com/current/',
  'remote-host' => 'companyc1.company.com',
  'remote-user' => 'myusername'
);

ТОЛЬКО у Drush есть проблемы с использованием моих ключей ssh. Что может помешать его работе?

иконоборец
источник
3
Я думаю, это зависит от того, от какого пользователя запускается Drush. Если Drush запускается www-data(например), то ваши SSH-ключи могут быть неправильными / запрещенными / не в белом списке.
Чапабу
4
Запустите ваши команды drush с параметром -v или -s, чтобы увидеть точную команду ssh, которую Drush генерирует для вас. Из этого должно быть ясно, в чем разница между вызовом Drush ssh и вашим тестом cli.
greg_1_anderson
@Chapabu: Да, я должен использовать sudoраньше, drushи кажется, что все работает как root (дыра в безопасности, о которой я предупреждал сисадмина). Похоже, что это проблема. В настоящее время я ищу решение, пока жду сисадмина ...
iconoclast

Ответы:

19

Поместите эту строку в ваш файл drushrc.php:

$options['ssh-options'] = '-o PasswordAuthentication=no -i /home/YOURUSERNAME/.ssh/id_rsa';

Это заставит Drush передавать эти параметры ssh каждый раз, когда он вызывает вашу удаленную систему, поэтому вы можете продолжать вызывать Drush через sudo и при этом использовать свои учетные данные для входа в систему.

greg_1_anderson
источник
Чувак, ты потрясающий ...
иконоборец
Пример для Windows: $ options ['ssh-options'] = '-o PasswordAuthentication = нет -i C: \ users \ laptop1 \ .ssh \ id_rsa';
Брайан Джинке
если он правильно понят, каталог /home/YOURUSERNAME/.ssh/id_rsa является локальным по отношению к месту выполнения команды drush. Директория "home / YOURUSERNAME" - это директория $ HOME, а id_rsa - личный ключ, сгенерированный с помощью ssh-keygen
latvian
1

Проверьте здесь: Как запустить Drush от Apache

По звуку, вам просто нужно изменить владельца / группу для Drush на вашем сервере!

Chapabu
источник
Это может быть идеальным решением ... но мне нужно, чтобы системный администратор согласился, прежде чем я смогу все настроить таким образом.
иконоборчество