Qu'est-ce qui pourrait entraîner l'échec des commandes de nettoyage à distance avec des erreurs ssh lorsque ssh fonctionne dans tous les autres cas?

10

J'ai des clés ssh publiques et privées sur chacun de mes trois serveurs (dev, UAT et production) afin que je puisse me connecter à distance ou de l'un à l'autre. Tout fonctionne parfaitement pour les commandes sshet scp.

Cependant, cela ne fonctionne pas pour Drush. Si j'exécute à drush @dev statuspartir d'UAT, par exemple, j'obtiens la bannière du serveur disant que le système "doit être utilisé par des utilisateurs autorisés uniquement bla bla bla ", puis j'obtiens

Autorisation refusée (publickey, mot de passe, clavier interactif).

Mon ~/.drush/aliases.drushrc.phpdossier contient:

# 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'
);

SEULEMENT Drush a un problème avec mes clés ssh. Qu'est-ce qui pourrait l'empêcher de fonctionner?

iconoclaste
la source
3
Je suppose que cela dépend de quel utilisateur Drush est exécuté. Si Drush est exécuté par www-data(par exemple), vos clés SSH peuvent être incorrectes / interdites / non mises en liste blanche.
Chapabu
4
Exécutez vos commandes drush avec l'option -v ou -s pour voir la commande ssh exacte que Drush génère pour vous. Il devrait être clair à partir de cela quelle est la différence entre l'invocation Drush de ssh et votre test cli de la même chose.
greg_1_anderson
@Chapabu: Oui, je dois utiliser sudoavant drushet il semble que tout fonctionne en tant que root (un trou de sécurité dont j'ai alerté le sysadmin). Il semble que ce soit le problème. Je suis actuellement à la recherche d'une solution en attendant le sysadmin ...
iconoclast

Réponses:

19

Mettez cette ligne dans votre fichier drushrc.php:

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

Cela entraînera Drush à transmettre ces options à ssh chaque fois qu'il appelle votre système distant, vous pouvez donc continuer à appeler Drush via sudo et toujours utiliser vos informations de connexion utilisateur.

greg_1_anderson
la source
Mec tu es génial ...
iconoclaste
Exemple pour Windows: $ options ['ssh-options'] = '-o PasswordAuthentication = no -i C: \ users \ laptop1 \ .ssh \ id_rsa';
Bryan Jiencke
s'il est correctement compris, le répertoire "/home/YOURUSERNAME/.ssh/id_rsa" est local à l'endroit où la commande drush est exécutée. Le répertoire "home / YOURUSERNAME" est le répertoire $ HOME et id_rsa est la clé privée elle-même générée via ssh-keygen
letton
1

Vérifiez ici: Comment exécuter Drush en tant qu'Apache

Par le son, il vous suffit de changer le propriétaire / groupe pour Drush sur votre serveur!

Chapabu
la source
Cela pourrait être la solution idéale ... mais je vais devoir obtenir l'accord du sysadmin avant de pouvoir configurer les choses de cette façon.
iconoclaste