43 votos

Cómo SSH en una línea

¿Cómo puedo conectarme a otro ordenador a través de SSH en una línea? Si tuviera que hacer ssh host@IP En el caso de los usuarios de Internet, se requiere que introduzca la contraseña en la segunda línea. Estaba pensando que podría hacer algo así: ssh host@IP | echo password , pero eso pone la contraseña antes de pedirla.

3 votos

Este tipo de pensamiento viene de los días de telnet y esperar, en la época en que Internet era un lugar más seguro. La respuesta de Allen es correcta, la respuesta de Jakuje es técnicamente cierta pero no es la herramienta para el trabajo en la mayoría de los lugares.

3 votos

Esta es una buena pregunta para configurar el inicio de sesión sin contraseña. Te pediría que revisaras tu respuesta aceptada. Que la respuesta de Jakuje -es- correcta, y funcionará, la forma adecuada de hacerlo es con claves SSH, descritas en la respuesta de Allan.

0 votos

Si ssh leería la contraseña desde stdin, y luego echo password | ssh host@IP funcionaría, pero normalmente SSH intenta leer directamente desde la terminal.

93voto

Douglas Puntos 10417

Deberías utilizar claves SSH para autenticarte en lugar de poner tu contraseña en la línea de comandos, ya que es extremadamente inseguro.

La forma en que esto funciona es una vez que tienes tus claves SSH configuradas, todo lo que tienes que hacer es emitir el comando:

ssh user@host

y sin necesidad de teclear nada más, se conectará automáticamente.


Copiar la clave pública SSH a Mac/FreeBSD/Linux desde MacOS

Esto supone que tienes acceso al servidor remoto a través de la autenticación basada en la contraseña (escribiendo una contraseña), y que ya has generado tu par de claves privadas/públicas (si no es así, ver más abajo). En el siguiente ejemplo, estamos utilizando RSA. Para empezar, copiemos la clave (ten en cuenta que el directorio "home" difiere entre MacOS, Linux, BSD, etc.):

Utilizando el SCP:

scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/

O simplemente cat-ing el archivo a authorized_keys (Yo prefiero este método):

cat id_rsa.pub | ssh username@hostname ' cat >>.ssh/authorized_keys'

(El nombre de su clave puede ser diferente) Si el directorio .ssh no existe en el servidor remoto, tendrá que iniciar sesión y crearlo.

Ahora la clave se ha copiado del mac al remoto servidor. Establezca los permisos correctos para la clave pública SSH en el servidor remoto:

chmod 600  ~/.ssh/id_rsa.pub

A continuación, añada la clave al archivo SSH authorized_keys, si el archivo no existe, créelo.

Si el archivo authorized_keys ya existe en ~/.ssh el uso de la siguiente orden:

cat id_rsa.pub >> authorized_keys

Si el archivo no existe, introduzca los siguientes comandos:

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys
chown user:group authorized_keys

Generar clave pública/privada SSH en MacOS

Abra el Terminal yendo a Aplicaciones -> Utilidades -> Terminal

En el terminal, utilice el siguiente comando para iniciar la generación de claves

ssh-keygen -t rsa

A continuación, se le pedirá que indique la ubicación donde desea crear el archivo de la clave privada:

Introduzca el archivo en el que desea guardar la clave ( /Users/username/.ssh/id_rsa ):

Déjelo vacío para crear la clave en la ubicación por defecto, que es /Users/username/.ssh/id_rsa . El archivo de la clave pública se creará en la misma ubicación y con el mismo nombre, pero con la extensión .PUB.

Después se le pedirá que elija una frase de acceso. Esta es la contraseña opcional para utilizar la clave privada.

Enter passphrase (empty for no passphrase):

Su clave SSH es generada.

Ahora bien, ten en cuenta que si pones una frase de acceso tendrás que introducirla cada vez que te conectes. La utilidad ssh-agent mantendrá la frase de contraseña en la memoria, aliviando la necesidad de introducirla manualmente cada vez que se conecte mientras esté en la misma sesión. Para más detalles, consulte man ssh-agent

7 votos

Absolutamente esto - las claves pueden y deben reemplazar completamente las contraseñas para cualquier acceso ssh a través de Internet. Sugiero que se amplíe la necesidad de seguridad de la clave privada, que no es algo para tener por ahí en todos sus ordenadores.

1 votos

+1 Esta es una respuesta realmente buena, no sólo por lo que dice, sino también por cómo lo has explicado. ¡Todo lo que sea más fácil de seguir para los usuarios y les ayude a estar más seguros es un plus en mis libros!

10 votos

Gran respuesta. Sólo quería añadir que ssh-copy-id es una buena herramienta para automatizar algo de lo anterior.

24voto

Jakuje Puntos 318

Hay varias posibilidades. Su ejemplo obviamente no funcionará, pero puede lograr algo similar usando sshpass utilidad:

sshpass -p password ssh host@IP

Nota, esto no es recomendable porque el password será visible para otros procesos o en el historial del shell.

Una forma mucho mejor de hacer lo mismo es configurar la autenticación sin contraseña utilizando claves SSH. En resumen:

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP

0 votos

Probé el sshpass como recomendaste, pero dice que el comando no se encuentra.

10 votos

Bueno... Probablemente tendrás que instalarlo. Y no, no lo recomiendo. Configurar la autenticación sin contraseña utilizando claves ssh.

0 votos

¿Hay alguna forma de hacerlo sin tener que instalar?

4voto

Allan Puntos 29

Yo también he pasado mucho tiempo buscando la respuesta a esto. A pesar de que es inseguro y de que toda esa gente te dice que uses claves RSA ( que ES una idea más segura y fiable ), es muy posible.

Utilice un programa llamado expect por esto. Expect vigilará stdout (y creo que stderr si se configura correctamente) por ti, esperando ciertos mensajes y respondiendo a ellos con una salida. Expect en sí mismo es en realidad un lenguaje de scripting, y cuando estaba haciendo esto mismo, me costó mucho conseguir que mi propio script funcionara correctamente debido a la sincronización. Sin embargo, expect también incluye una útil utilidad llamada autoexpect .

Con autoexpect, te observará y generará un expect script para ti. Simplemente ejecuta autoexpect y el comando que quieras:

autoexpect ssh host@ip 

y haz lo que harías normalmente. Cuando salga del programa (escribiendo exit en el shell ssh'd), generará el script. En caso de que no quieras que todo el script que estás escribiendo esté en un script expect, puedes editar el script de autoexpect (llamado script.exp ) para salir antes de escribir el exit en el shell. La línea que quieres mover para cambiar el final de script es:

expect eof

que significa esperar el final del archivo. Espero que esto ayude.

1 votos

Por si nadie lo ha dicho aún: ¡Bienvenido a Ask Different!

2voto

Dami Puntos 1

Utilizando expect es simplemente incorrecto entrar en una conexión ssh para cualquier cosa que no sea en un conjunto de pruebas.

Lo que busca @ben-a ya está implementado en ssh. El truco está en cómo usarlo. Así que aquí va:

  1. Generar un par de claves públicas/privadas utilizando ssh-keygen . Utilice ECDSA o RSA como el -t (o tipo) y para RSA utilice 2048 o 4096 como -b (o longitud de BITS). Esto debería ser suficiente en el momento de escribir. ¡Utilice SIEMPRE una CONTRASEÑA!

  2. Utilizar el ssh-copy-id o la metodología mencionada anteriormente para crear en la máquina a la que se accede (es decir, el servidor) el ~/.ssh/authorized_keys archivo. Dentro hay una copia de la clave pública que acabas de generar.

  3. Ahora, en la máquina que usas para entrar en el 'servidor' (o cliente) abres el archivo ~/.ssh/config . Si no existe, puede crearla.

  4. En este archivo, se añade lo siguiente para sus necesidades

    host <name you want to use for this connection>
        Hostname <DNS or IP of the server>
        user <user name you want to use>
        identitiesonly yes
        identityfile <path to the private key>
  5. Ahora puede utilizar sólo ssh <name> para establecer la conexión, pero seguirá necesitando la contraseña de su clave. Para solucionar esto, utiliza el agente ssh desarrollado e incluido para este propósito. Para añadir tu clave al agente sólo tienes que usar ssh-add <path to keyfile> . Se le pedirá la contraseña, y almacenará la clave de forma segura para esta sesión. Si da el error "no puede encontrar el agente ssh" (o similar), significa que probablemente el agente no se ha iniciado. Puedes iniciarlo para esta sesión usando ssh-agent bash . Esto iniciará un nuevo shell con el agente activo en él.

Al utilizar estos pasos, no sólo haces más difícil que alguien se haga pasar por ti secuestrando tus credenciales, sino que también mantienes la usabilidad en orden (es más fácil de usar que las contraseñas simples).

-1voto

Tanzil Hussain Puntos 11

Accede al host remoto y ejecuta bash script sin comprobar la clave del host y la contraseña del usuario en una línea.

Primero instala sshpass Debain:

sudo apt-get install sshpass

Para la instalación de CenOS en forma de EPEL:

yum --enablerepo=epel -y install sshpass

Copiar y pegar en un archivo por ejemplo: remoteScript.sh Añade los detalles del host remoto.

! /bin/bash

PATH_TO_SCRIPT="/ruta/script.sh"

UserName="Root"

HostName="192.168.01.11"

Contraseña="suContraseña"

sudo -S sshpass -p $Contraseña ssh -o stricthostkeychecking=no $NombreUsuario@$NombreHost 'sudo -s ' < $PATH_TO_SCRIPT

Si quieres usar sin bash script en terminal:

sshpass -p Contraseña ssh -o stricthostkeychecking=no Root@192.168.11.22 'bash -s' < YourScript

Cambiar la contraseña, el usuario y la IP del servidor

1 votos

¿Cómo se hace apt-get ¿se ejecuta en MacOS?

1 votos

Eres consciente de que este sitio está centrado en Apple y el sistema operativo aquí es MacOS, ¿verdad? Dicho esto, espero que seas consciente de que almacenamiento de contraseñas en texto plano en un script es lo peor que puedes hacer desde el punto de vista de la seguridad.

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