En mi host local alpha
, tengo un directorio foo
que se asigna a través de sshfs al host de la bravo
siguiente manera:
$ sshfs charlie@bravo:/home/charlie ~/foo
Sin embargo, en el host bravo
hay otro usuario, delta, al que quiero acceder sudo /bin/su
, para poder trabajar bravo:/home/delta
. delta
no se puede iniciar sesión a través de ssh; por razones que no puedo cambiar, solo puedes pasar a delta una vez que estés en la máquina.
Normalmente me pasaba bravo
, luego sudo a delta, pero me pregunto si hay alguna manera de hacerlo cuando tengo el directorio de inicio de Charlie montado a través de ssh.
Respuestas:
Esto variará dependiendo del sistema operativo del servidor al que se está conectando. Para centOS 5 agregaría a las opciones de montaje sshfs:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
Para Ubuntu 9.10 (creo que podría ser 9.04, pero probablemente sea lo mismo para ambos) o Debian agregaría:
-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server"
.Para encontrar la ruta correcta para otros sistemas que ejecutan openSSH, ejecute
sudo grep Subsystem /etc/ssh/sshd_config
y busque la ubicación del binario sftp-server.
Es posible que necesite configurar sudo con NOPASS: {ruta de acceso al servidor sftp} o validar previamente
ssh user@host sudo -v
para quesudo
tenga una marca de tiempo actualizada paranotty
. En mi caso, mis dos comandos fueron:fuente
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
no hace feliz a mi sudo, quiere un poco antes de que me permita sudo. Pensamientos?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"
no funciona: \ - solo dice "los hosts remotos se han desconectado"Puede usar bindfs + sshfs para acceder a otros archivos de usuario (incluso root).
En primer lugar, monta su 'raíz' o cualquier otro directorio bajo su usuario con uid reasignado.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
y luego simplemente sshfs en el directorio.
sshfs USER@SERVER:tmproot TARGET
Pero por seguridad es mejor no mapear la raíz completa,
/
sino solo una parte que necesita. Por ejemplo: puede usar este método para montar cualquier otro directorio de usuario en su, por ejemplo, archivos desde / var / www a ~ / www y reasignar root en su usuario para que tenga acceso completo a él.Si necesita acceso para preservar uid o tener acceso a múltiples usuarios, entonces crearía un nuevo usuario, por ejemplo "rootfs" con uid = 0 y / bin / false y haría un sshfs normal.
fuente
Puede intentarlo (pero no creo que funcione):
No entiendo muy bien los sshfs, por lo que es posible que pueda hacer que algo así funcione, pero no podría decir cómo, y me sorprendería un poco.
Otra posibilidad es poner el comando 'sudo / bin / su bravo' en ~ / .ssh / rc, pero eso afectaría a todos sus montajes fs (suponiendo que funcionó, lo que también dudo), así como a su uso normal de ssh .
Perdón por ser un Debbie Downer.
fuente
Por deducción, creo que esto es imposible de lograr con un simple comando.
Esto se debe a que sshfs llama a ssh sin pasar ningún comando, sino que utiliza SFTP, que es un subsistema de SSH.
Desde la página de manual de sshfs :
Además , cambiar el usuario actual (o 'su' o 'sudo') no es parte del protocolo SFTP, aunque esto parece ser una característica muy solicitada.
fuente
Probablemente, la mejor manera es a través de permisos de archivos, como propone @artifex.
Como dice @Weboide, es imposible a través de sshfs.
Pero supongo que podría crear un script simple, llamémoslo
sudossh
que tomará su$PWD
, lo convertirá/home/delta/
y ejecutará el comando a travésssh
ysudo
en la máquina remota.Algo como esto:
Después de eso, puede ejecutar
sudossh command
y recordar usar rutas relativas.Si usa ssh-agent, solo tiene que ingresar su
sudo
contraseña.fuente
Mi solución es terriblemente fea (gracias a unas pocas capas de escape de cadena), pero leerá la ruta
sftp-server
desde/etc/ssh/sshd_config
y la ejecutarásudo
. Ahora, ¿quésshd_config
pasa si no se encuentra debajo/etc/ssh
? ¿Quizás buscar dentro dessh
binario constrings
ygrep
?fuente