Cómo SSH en una línea

19

¿Cómo me conectaría a otra computadora a través de SSH en una línea? Si tuviera que hacer ssh host@IP , me requeriría ingresar la contraseña en la segunda línea. Estaba pensando que podría hacer algo como esto: ssh host@IP | echo password , pero eso coloca la contraseña antes de pedir la contraseña.

    
pregunta Ben A. 04.06.2017 - 22:13

4 respuestas

75

Debería estar usando las claves SSH para autenticarse con, en lugar de poner su contraseña en la línea de comandos, ya que es extremadamente fuerte

La forma en que funciona es que una vez que haya configurado sus claves SSH, todo lo que tiene que hacer es emitir el comando:

ssh user@host

y sin escribir otra cosa, iniciará sesión automáticamente.

Copie la clave pública SSH a Mac / FreeBSD / Linux desde macOS

Esto supone que tiene acceso al servidor remoto a través de la autenticación basada en contraseña (escribiendo una contraseña), y que ya ha generado su par de claves privadas / públicas (de lo contrario, vea más abajo). En el siguiente ejemplo, estamos usando RSA. Para comenzar, copiemos la clave (tenga en cuenta que el directorio "home" difiere entre macOS, Linux, BSD, etc.):

Utilizando SCP:

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

O simplemente enviando el archivo a authorized_keys (prefiero este método):

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

(Su nombre de clave puede diferir) Si el directorio .ssh no existe en el servidor remoto, deberá iniciar sesión y crearlo.

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

chmod 600  ~/.ssh/id_rsa.pub

Luego agregue la clave al archivo SSH authorized_keys, si el archivo no existe, créelo.

Si el archivo authorized_keys ya existe en ~/.ssh , use el siguiente comando:

cat id_rsa.pub >> authorized_keys

Si el archivo no existe, ingrese 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, use el siguiente comando para iniciar la generación de claves

ssh-keygen -t rsa

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

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

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

Después de que se le solicite que elija una frase de contraseña. Esta es la contraseña opcional para usar la clave privada.

Enter passphrase (empty for no passphrase):

Se genera su clave SSH.

Ahora, tenga en cuenta que si ingresa una contraseña, se le pedirá que la ingrese cada vez que se conecte. La utilidad ssh-agent mantendrá la frase de contraseña en la memoria, aliviando la necesidad de ingresarla manualmente cada vez que se conecte mientras esté en la misma sesión. Para obtener más información, consulte man ssh-agent

    
respondido por el Allan 04.06.2017 - 22:41
11

Hay varias posibilidades. Obviamente, su ejemplo no funcionará, pero puede lograr algo similar con la utilidad sshpass :

sshpass -p password ssh host@IP

Tenga en cuenta, esto no se recomienda porque password estará 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 con claves SSH. En resumen:

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP
    
respondido por el Jakuje 04.06.2017 - 22:26
3

El uso de expect es simplemente incorrecto para iniciar sesión en una conexión ssh para cualquier otra cosa que no sea una suite de prueba.

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

  1. Genere un par de claves público / privado usando ssh-keygen . Use ECDSA o RSA como -t (o tipo) y para RSA use 2048 o 4096 como -b (o longitud BITS). Esto debería ser suficiente en el momento de escribir. SIEMPRE use una CONTRASEÑA!
  2. Utilice el ssh-copy-id o la metodología mencionada anteriormente para crear en la máquina en la que está iniciando sesión en (a.k.a. el servidor) el archivo ~/.ssh/authorized_keys . Dentro hay una copia de la clave pública que acaba de generar.
  3. Ahora en la máquina que usa para iniciar sesión en el 'servidor' (o cliente), abra el archivo ~/.ssh/config . Si no existe, puedes crearlo.
  4. En este archivo, agregue 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 usar solo ssh <name> para configurar la conexión, pero aún necesitará la contraseña para su clave. Para resolver esto, use el ssh-agent desarrollado para este propósito e incluido. Para agregar su clave al agente solo use ssh-add <path to keyfile> . Se le pedirá la contraseña, y almacenará la clave de forma segura para esta sesión. Si produce el error "no se puede encontrar el agente ssh" (o similar), eso significa que probablemente el agente no se haya iniciado. Puedes iniciarlo para esta sesión usando ssh-agent bash . Esto iniciará un nuevo shell con el agente activo en él.

Al usar estos pasos, no solo hace que sea más difícil que alguien se haga pasar por otra persona secuestrando sus credenciales, sino que también mantiene la usabilidad en orden (es más fácil de usar que las contraseñas simples).

    
respondido por el LvB 06.06.2017 - 14:55
2

He pasado mucho tiempo buscando la respuesta a esto también. A pesar de que es inseguro y todas estas personas le dicen que use las claves RSA ( que ES una idea más segura y confiable ), es bastante posible.

Usa un programa llamado expect para esto. Expect mirará stdout (y creo que stderr si está configurado correctamente) por ti, esperando ciertos mensajes y respondiéndolos con salida. Esperar en sí mismo es en realidad un lenguaje de scripting, y cuando estaba haciendo lo mismo, me costaba mucho conseguir que mi propio script funcionara correctamente debido a la sincronización. Sin embargo, espera también incluye una utilidad práctica llamada autoexpect .

Con autoexpect, lo observará y generará un script de expectativa para usted. Simplemente ejecute autoexpect y el comando que desee:

autoexpect ssh host@ip 

y haz lo que normalmente harías. Cuando salga del programa (al escribir exit en el shell ssh'd), se generará la secuencia de comandos. En caso de que no desee que todo el script que está escribiendo esté en un script de expectativa, puede editar el script desde autoexpect (llamado script.exp ) para salir antes de escribir el comando exit en el shell. La línea que desea mover para cambiar el final del script es:

expect eof

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

    
respondido por el Allan 05.06.2017 - 14:58

Lea otras preguntas en las etiquetas