3 votos

¿Cómo SSH cuando el usuario actual no puede acceder al archivo de identidad?

Deseo encontrar un shell one-liner en MacOS que ejecute un comando en una máquina remota a través de SSH con un usuario diferente no Root (digamos, joe ), utilizando un archivo de identidad que sólo joe puede acceder. El siguiente ejemplo funcionaría cuando el usuario actual ya es joe :

ssh -i ~/.ssh/id_joe -l joe joehost "whoami"

Pero en mi caso joe es no al usuario actual en un primer momento. Y ese usuario hace no tienen acceso al archivo de identidad necesario para SSH. Quiero saber cómo puedo "cambiar de usuario" a joe (cuya contraseña es conocida), ejecutar SSH y luego volver a cambiar, todo de una sola vez.

Esta frase sí exactamente lo que quiero pero en Debian 11:

echo -n 'joepass' | su - joe -c 'ssh -i ~/.ssh/id_joe -l joe joehost "whoami"'

(Estoy de acuerdo en que hacer eco de una contraseña es atroz pero la comodidad me importa más que la seguridad por ahora)

Pero el mismo comando da error en MacOS como su: Sorry presumiblemente por razones de seguridad. Entonces, ¿qué puedo hacer para lograr resultados similares en MacOS?

Estoy abierto a cualquier tipo de solución siempre que se respeten las siguientes restricciones:

  • No se puede utilizar sudo . Todos los usuarios implicados son no-Root.
  • No se puede pedir al usuario que introduzca joe manualmente.
  • No se puede usar Esperar.

4voto

David Anderson Puntos 2189

Respuesta actualizada a Pregunta actual

El OP ofrece este one-liner, que hace exactamente lo que el OP quiere, pero en Debian 11:

echo -n 'joepass' | su - joe -c 'ssh -i ~/.ssh/id_joe -l joe joehost "whoami"'

Ofrezco esta línea, que hace exactamente lo que el OP quiere, pero en MacOS Monterey 12.5:

sshpass -p 'joepass' ssh -l joe localhost 'ssh -i ~/.ssh/id_joe -l joe joehost "whoami"'

Creo que entrar -l joe dos veces no debería ser necesario, por lo que lo siguiente también debería funcionar.

sshpass -p 'joepass' ssh -l joe localhost 'ssh -i ~/.ssh/id_joe joehost "whoami"'

Para completar, voy a añadir que si desea iniciar sesión, a continuación, omitir "whomami" y añada el -t como se muestra a continuación.

sshpass -p 'joepass' ssh -t -l joe localhost 'ssh -i ~/.ssh/id_joe joehost'

Respuesta original a Pregunta original

El OP mencionó el sshpass en un comentario que se repite a continuación.

@benwiggy whoami es sólo un marcador de posición. En realidad necesito ejecutar sshpass como ese usuario porque solo 'joe' tiene las credenciales correctas. - Kartik Pontula

Basándose en el uso del sshpass se podría sustituir por lo siguiente, que es lo que figura en la pregunta del operador.

sshpass -p 'joepass' ssh -l joe localhost 'whoami'

El OP también mencionó en el comentario que whoami debe sustituirse por sshpass lo que puede significar ejecutar comandos en alguna máquina remota. Si es así, se creará un whoami podría ejecutarse en la máquina remota introduciendo lo siguiente, donde user es el nombre de usuario en la máquina remota y hostname es la dirección URL o IP de la máquina remota.

sshpass -p 'joepass' ssh -l joe localhost $'sshpass -p \'userpass\' ssh -l user hostname \'whoami\''

Si un inicio de sesión en hostname en lugar de \'whoami\' podría omitirse y un -t como se muestra a continuación.

sshpass -p 'joepass' ssh -t -l joe localhost $'sshpass -p \'userpass\' ssh -l user hostname'

Esta respuesta se probó utilizando Monterey 12.5 con Elaboración casera instalado. La máquina remota utilizaba Ubuntu 20.04 LTS. El comando sshpass se instaló introduciendo lo siguiente, que procede del artículo Cómo instalar sshpass en MacOS / OS X .

brew tap esolitos/ipa
brew install esolitos/ipa/sshpass

Nota: También existe este Proyecto SourceForge .

3voto

ssh son independientes del usuario local, por lo que en lugar de cambiar el usuario local a joe también podría hacer lo siguiente para permitir al usuario sue utilizar ssh también:

  • En joe Corre cp ~/.ssh/id_joe ~sue/Public/Drop\ Box ,
  • En sue Corre mv ~/Public/Drop\ Box/id_joe ~/.ssh/; chown sue ~/.ssh/id_joe; chmod -N ~/.ssh/id_joe; chmod 600 ~/.ssh/id_joe .

Después de eso, sue puede ejecutar comandos en el host remoto ejecutando

ssh -i ~/.ssh/id_joe -l joe joehost "whoami"

si no se trata de ssh sino sólo de inicios de sesión locales, también puede habilitar los inicios de sesión ssh sin contraseña localmente y luego ejecutar ssh joe@localhost .

-1voto

WGroleau Puntos 255

Actualización: Como muestran los comentarios, el bit setuid ya no funciona en scripts.

Si es el mismo comando cada vez, haga joe el propietario del archivo, y establecer el bit setuid:

chmod u+s,u+x file

Véase man chmod para más detalles. Puede que necesites configurar o eliminar otros bits (¿grupo?).

Si necesita esto para varios archivos, existe un método muy peligroso: Cree un script que tome el usuario y el archivo como parámetros, haga los chown y chmod descritos anteriormente, y luego ejecute el archivo. Haz que este script sea propiedad de Root y que tenga el bit setuid activado. Tontamente peligroso, porque hacer esto hace posible que cualquiera ejecutar cualquier archivo como cualquier ¡Usuario!

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X