¿Cómo me conectaría a otra computadora a través de SSH en una línea? Si ssh host@IP
tuviera que hacerlo , 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 pone la contraseña antes de pedirla.
26
ssh
leería la contraseña de stdin, entoncesecho password | ssh host@IP
funcionaría, pero generalmente SSH intenta leer directamente desde el terminal.Respuestas:
Debería usar claves SSH para autenticarse en lugar de poner su contraseña en la línea de comando, ya que es extremadamente insegura.
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:
y sin escribir otra cosa, iniciarás 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 una autenticación basada en contraseña (tecleando una contraseña) y que ya ha generado su par de claves privado / público (si no, vea a continuación). En el siguiente ejemplo, estamos utilizando RSA. Para comenzar, copiemos la clave (tenga en cuenta que el directorio "home" difiere entre macOS, Linux, BSD, etc.):
Usando SCP:
O simplemente capturando el archivo
authorized_keys
(prefiero este método):(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 de la Mac al servidor remoto . Establezca los permisos correctos para la clave pública SSH en el servidor remoto:
A continuación, agregue la clave al archivo SSH autorizado_claves, si el archivo no existe, créelo.
Si el archivo
authorized_keys
ya existe en~/.ssh
el uso del siguiente comando:Si el archivo no existe, ingrese los siguientes comandos:
Generar clave pública / privada SSH en macOS
Abra la Terminal yendo a Aplicaciones -> Utilidades -> Terminal
En el terminal, use el siguiente comando para iniciar la generación de claves
A continuación, se le pedirá que proporcione la ubicación donde desea crear el archivo de clave privada:
Introduzca el archivo en el que guardar la clave (
/Users/username/.ssh/id_rsa
):Déjelo 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 se le pedirá que elija una frase de contraseña. Esta es la contraseña opcional para usar la clave privada.
Se genera su clave SSH.
Ahora, tenga en cuenta que si ingresa una frase de contraseña, deberá ingresarla 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 más detalles verman ssh-agent
fuente
ssh-copy-id
es una buena herramienta para automatizar algunos de los anteriores.Hay varias posibilidades Obviamente, su ejemplo no funcionará, pero puede lograr algo similar con la
sshpass
utilidad:Tenga en cuenta que esto no se recomienda porque
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 breve:
fuente
sshpass
que me recomendó, pero decía que no se encontró el comando.ps auxw | grep sshpass
le dirá a otros usuarios la contraseña ssh.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh [email protected]
. Elzzzzzzzz
es literal; sshpass enmascara el contenido de la contraseña. Quizás las iteraciones anteriores eran menos conscientes de la privacidad.He pasado mucho tiempo buscando la respuesta a esto también. A pesar de ser inseguro y de que todas estas personas le digan que use claves RSA (lo cual ES una idea más segura y confiable ), es bastante posible.
Use un programa llamado
expect
para esto. Expect mirará stdout (y creo que stderr si está configurado correctamente) por usted, esperando ciertos mensajes y respondiendo a ellos con salida. Esperar en sí mismo es en realidad un lenguaje de script, y cuando estaba haciendo lo mismo, me costó mucho hacer que mi propio script funcionara correctamente debido al tiempo. Sin embargo, esperar también incluye una práctica utilidad llamadaautoexpect
.Con autoexpect, lo observará y generará un script de espera para usted. Simplemente ejecute autoexpect y el comando que desee:
y haz lo que normalmente harías. Cuando salga del programa (escribiendo
exit
el shell ssh'd), generará el script. En caso de que no desee que todo el script que está escribiendo esté en un script esperado, puede editar el script desde autoexpect (llamadoscript.exp
) para salir antes de escribir elexit
comando en el shell. La línea que desea mover para cambiar el final del script es:lo que significa esperar el final del archivo. ¡Espero que esto ayude!
fuente
Usar
expect
es simplemente incorrecto para iniciar sesión en una conexión ssh para cualquier cosa que no sea en un conjunto de pruebas.Lo que está buscando @ ben-a ya está implementado en ssh. El truco es cómo usarlo. Entonces aquí va:
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 al momento de escribir. ¡SIEMPRE use una CONTRASEÑA!ssh-copy-id
metodología o la mencionada anteriormente para crear en la máquina en la que está iniciando sesión (también conocido como el servidor) el~/.ssh/authorized_keys
archivo. Dentro hay una copia de la clave pública que acaba de generar.~/.ssh/config
. Si no existe, puede crearlo.En este archivo, agrega lo siguiente para sus necesidades
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 e incluido para este propósito. Para agregar su clave al agente simplemente usessh-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. Puede iniciarlo para esta sesión usandossh-agent bash
. Esto iniciará un nuevo shell con el agente activo en él.Al utilizar estos pasos, no solo hace que sea más difícil para alguien hacerse pasar por usted secuestrando sus credenciales, sino que también mantiene la usabilidad en orden (es más fácil de usar que las contraseñas simples).
fuente