Sur mon hôte local, alpha
j'ai un répertoire foo
mappé via sshfs pour héberger bravo
comme suit:
$ sshfs charlie@bravo:/home/charlie ~/foo
Cependant, sur l'hôte, bravo
il existe un autre utilisateur, delta, que je souhaite utiliser pour sudo /bin/su
pouvoir travailler bravo:/home/delta
. delta
ne peut pas être connecté via ssh; pour des raisons que je ne peux pas changer, vous ne pouvez vous déplacer que lorsque vous êtes sur la machine.
Normalement, je ferais une entrée ssh bravo
, puis un delta au sudo, mais je me demandais si je pouvais le faire si j'ai le répertoire personnel de charlie monté via ssh.
Réponses:
Cela varie en fonction du système d'exploitation du serveur auquel vous vous connectez. Pour centOS 5, vous ajouteriez aux options de montage sshfs:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
Pour Ubuntu 9.10 (je pense, pourrait être 9.04, mais c'est probablement la même chose pour les deux) ou Debian, vous ajouteriez:
-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server"
.Pour trouver le chemin correct pour les autres systèmes exécutant openSSH, exécutez
sudo grep Subsystem /etc/ssh/sshd_config
et recherchez l’emplacement du fichier binaire sftp-server.
Vous pourriez avoir besoin de configurer sudo nopass: {chemin de sftp-server} ou prevalidate avec de
ssh user@host sudo -v
telle sorte quesudo
a un horodatage mis à jour pournotty
. Dans mon cas, mes deux commandes étaient:la source
sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"
?ssh host sudo -v
ne fait pas mon sudo heureux - il veut un tty avant de me laisser sudo. Pensées?ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"
ça ne marche pas: \ - ça dit juste "les hôtes distants se sont déconnectés"Vous pouvez utiliser bindfs + sshfs pour accéder à d'autres fichiers utilisateur (même root).
Tout d'abord, vous montez votre répertoire 'root' ou tout autre répertoire sous votre utilisateur avec un uid remappé.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
et ensuite simplement sshfs dans le répertoire.
sshfs USER@SERVER:tmproot TARGET
Mais pour des raisons de sécurité, il est préférable de ne pas mapper la totalité de la racine,
/
mais seulement la partie dont vous avez besoin. Par exemple: Vous pouvez utiliser cette méthode pour monter tout autre répertoire utilisateur sur votre, par exemple, les fichiers de / var / www dans ~ / www et remapper la racine sur votre utilisateur afin d’y avoir un accès complet.Si vous avez besoin d'un accès pour conserver votre identifiant utilisateur ou pour avoir accès à plusieurs utilisateurs, je créerais un nouvel utilisateur, par exemple "rootfs" avec uid = 0 et / bin / false, et effectuerais un sshfs normal.
la source
Vous pourriez essayer (mais je ne pense pas que cela fonctionnera):
Je ne comprends pas très bien sshfs, alors vous pourrez peut-être faire fonctionner quelque chose comme ça, mais je ne saurais dire comment, et je serais un peu surpris.
Une autre possibilité est de mettre la commande 'sudo / bin / su bravo' dans ~ / .ssh / rc, mais cela affecterait tous vos montages fs (en supposant que cela fonctionne, ce dont je doute également) ainsi que votre utilisation normale de ssh .
Désolé d'être un debbie downer.
la source
Par déduction, je pense que cela est impossible à réaliser avec une simple commande.
Cela est dû au fait que sshfs appelle ssh sans passer de commande mais utilise plutôt SFTP, qui est un sous-système de SSH.
Depuis la page de manuel sshfs :
De plus , la modification de l'utilisateur actuel (ou «su» ou «sudo») ne fait pas partie du protocole SFTP, bien que cela semble être une fonctionnalité très souvent demandée.
la source
Le meilleur moyen consiste probablement à utiliser les autorisations de fichiers, comme le propose @artifex.
Comme @Weboide le dit, c'est impossible avec sshfs.
Mais je suppose que vous pouvez créer un script simple, appelons-le
sudossh
qui va vous permettre de le$PWD
convertir,/home/delta/
puis exécutez la commande viassh
etsudo
sur la machine distante.Quelque chose comme ça:
Après cela, vous pouvez exécuter
sudossh command
et vous rappeler d'utiliser des chemins relatifs.Si vous utilisez ssh-agent, il vous suffit de saisir votre
sudo
mot de passe.la source
Ma solution est cruellement moche (grâce à quelques couches de chaîne échappées), mais elle lira le chemin de
sftp-server
from/etc/ssh/sshd_config
et l'exécuterasudo
. Maintenant, si cesshd_config
n'est pas situé sous/etc/ssh
? Peut-être chercher dans lessh
binaire avecstrings
etgrep
?la source