Si j'ai un serveur A sur lequel je peux me connecter avec ma clé ssh et que j'ai la possibilité de "sudo su - otheruser", je perds le transfert de clé, car les variables env sont supprimées et le socket est uniquement lisible par mon utilisateur d'origine. Existe-t-il un moyen de relier la transmission de clé via "sudo su - otheruser", afin de pouvoir effectuer des tâches sur un serveur B avec ma clé transférée (git clone et rsync dans mon cas)?
La seule façon dont je peux penser est d’ajouter ma clé à allowed_keys d’autre utilisateur et de "ssh otheruser @ localhost", mais c’est fastidieux à faire pour chaque combinaison utilisateur / serveur que je peux avoir.
En bref:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).
user2
est en hautroot
! Sinon,user2
SSH_AUTH_SOCK sera configuré correctement, maisuser2
ne pourra pas accéder par exemple à / tmp / ssh-GjglIJ9337 /.root
a cet accès. Donc, cela peut résoudre une partie du problème, mais pas les OP: " et la prise est uniquement lisible par mon utilisateur d'origine"Defaults>root env_keep+=SSH_AUTH_SOCK
Devrait s’assurer qu’il n’avance que lorsqu’on passe à la racine. De toute façon, vous ne voulez pas faire cela à d’autres utilisateurs pour des raisons de sécurité. Mieux vaut exécuter un agent ssh distinct pour autrui et ajouter les clés appropriées.sudo su -
ne fonctionne pas pour moi, il est probable qu'il ne peut pas préserver l'environnement car il ne se trouve passudo
au moment du démarrage du shell.sudo su
semble fonctionner.sudo su
quand même. Si vous avez besoin d’un shell root, c’est pour quoisudo -s
ousudo -i
pour quoi .Cela vous donnera un shell root avec les clés d'origine encore chargées.
la source
Autorisez un autre utilisateur à accéder au
$SSH_AUTH_SOCK
fichier et à son répertoire, par exemple par une liste de contrôle d'accès correcte, avant de passer à eux. L'exemple supposeDefaults:user env_keep += SSH_AUTH_SOCK
dans/etc/sudoers
la machine hôte:Plus sécurisé et fonctionne aussi pour les utilisateurs non-root ;-)
la source
otheruser
peuvent également utiliser votre authentification SSH.rwx
et pasrw
(ou pasr
du tout)?man 7 unix
- sur Linux, la connexion à un socket nécessite des autorisations de lecture et d'écriture sur ce socket. En outre, vous devez disposer des autorisations de recherche (exécuter) et d’écriture sur le répertoire dans lequel vous créez le socket ou uniquement de l’autorisation de recherche (exécuter) lorsque vous vous connectez à ce socket. Ainsi, dans la réponse ci-dessus, l'autorisation d'exécution sur le socket est redondante.sudo -u otheruser --preserve-env=HOME -s
J'ai trouvé que cela fonctionne aussi.
Comme d'autres l'ont fait remarquer, cela ne fonctionnera pas si l'utilisateur vers lequel vous basculez n'a pas les autorisations de lecture sur $ SSH_AUTH_SOCK (ce qui correspond à peu près à tout utilisateur autre que root). Vous pouvez contourner ce problème en définissant $ SSH_AUTH_SOCK et le répertoire dans lequel se trouvent les autorisations 777.
C'est assez risqué cependant. Vous donnez à tous les autres utilisateurs du système l'autorisation d'utiliser votre agent SSH (jusqu'à ce que vous vous déconnectiez). Vous pourrez peut-être également définir le groupe et modifier les autorisations sur 770, ce qui pourrait être plus sécurisé. Cependant, lorsque j'ai essayé de changer de groupe, j'ai reçu "Opération non autorisée".
la source
Si vous êtes autorisé à le faire
sudo su - $USER
, vous auriez probablement un bon argument pour pouvoir le faire à lassh -AY $USER@localhost
place, avec votre clé publique valide dans le répertoire de base de $ USER. Ensuite, votre transfert d'authentification sera effectué avec vous.la source
Vous pouvez toujours utiliser ssh sur localhost avec le transfert d’agent au lieu d’utiliser sudo:
L'inconvénient est que vous devez vous reconnecter, mais si vous l'utilisez dans un onglet screen / tmux, ce n'est qu'un effort ponctuel. Cependant, si vous vous déconnectez du serveur, le socket sera (bien sûr) cassé à nouveau. . Ce n’est donc pas idéal si vous ne pouvez pas garder votre session screen / tmux ouverte à tout moment (toutefois, vous pouvez mettre à jour manuellement votre
SSH_AUTH_SOCK
variable d’env si vous êtes cool).Notez également qu'en utilisant le transfert ssh, root peut toujours accéder à votre socket et utiliser votre authentification ssh (tant que vous êtes connecté avec le transfert ssh). Assurez-vous donc que vous pouvez faire confiance à root.
la source
otheruser
viasudo
au lieu de sur SSH (par exemple, vous voulez que les choses SCP soient pareilleswww-data
)Ne pas utiliser
sudo su - USER
, mais plutôtsudo -i -u USER
. Travaille pour moi!la source
Sudo version 1.6.9p17
en cours d'exécution sur Debian Lenny. Essayezsudo -s
?sudo -s
nisudo -i
pour moi ...En combinant les informations des autres réponses, je suis arrivé à ceci:
J'aime ça parce que je n'ai pas besoin d'éditer un
sudoers
fichier.Testé sur Ubuntu 14.04 (il fallait installer le
acl
paquet).la source
Je pense qu'il y a un problème avec l'
-
option (tiret) aprèssu
dans votre commande:Si vous lisez la page de manuel de su , vous constaterez peut-être que cette option
-, -l, --login
lance l’environnement shell en tant que shell de connexion. Ce sera l'environnement pourotheruser
indépendamment des variables env où vous exécutezsu
.En termes simples, le tiret va saper tout ce que vous avez quitté
sudo
.Au lieu de cela, vous devriez essayer cette commande:
Comme @ joao-costa l'a souligné,
-E
toutes les variables de l'environnement dans lequel vous vous êtes exécuté seront conservéessudo
. Ensuite, sans le tiret,su
utilisera cet environnement directement.la source
Malheureusement, lorsque vous vous adressez à un autre utilisateur (ou même que vous utilisez sudo), vous perdez la possibilité d'utiliser vos clés transférées. Ceci est une fonctionnalité de sécurité: Vous ne voulez pas que des utilisateurs aléatoires se connectent à votre agent ssh et utilisent vos clés :)
La méthode "ssh -Ay $ {USER}" @localhost "est un peu fastidieuse (et comme indiqué dans mon commentaire sur la réponse de David susceptible de se briser), mais c'est probablement ce que vous pouvez faire de mieux.
la source
-a
et des-A
arguments.-a
fait exactement le contraire de ce qui est prévu, il désactive le transfert d’agent! Ainsi, dans la version récente (et probablement la totalité) d’Ubuntu, utilisez-A
pour activer le transfert d’agent.