Muchos desarrolladores web utilizan SSH ("Secure Shell") a diario para administrar sus servidores, hacer copias de seguridad de los archivos, trabajar de forma remota y muchas otras tareas. Hoy, explicaré qué es SSH, hacer una breve revisión de la historia y, por último, enseñarle cómo configurarlo en su servidor remoto o incluso en su red local. Empecemos!
Si estás leyendo esto, es probable que estés al menos algo familiarizado con Terminal (o en Windows, algo como Cygwin). Si es así, comprenderá esta rápida explicación funcional de SSH.
SSH está esencialmente usando una conexión de red para ingresar a la Terminal en otra computadora.
Si no está familiarizado con Terminal, hay muchas explicaciones y guías para principiantes de Terminal, tanto aquí en Nettuts + como en otros lugares. El poder de SSH depende de su simplicidad; Al ofrecerle acceso a la Terminal de otra máquina, SSH corta a la persecución y le da control total sobre una máquina remota. Si comprende el poder de la Terminal y su conexión directa con el funcionamiento interno de su máquina local, entonces entiende el poder de SSH!
SSH se desarrolló en su estado infantil en 1995. El desarrollador principal, Tatu Ylonen, lo desarrolló como la primera forma segura de administrar un sistema UNIX remoto. Anterior a SSH, las únicas herramientas que existían enviaban información como contraseñas en texto claro.
Hay un millón de guías por ahí sobre cómo configurar SSH. Cubriremos específicamente un método hoy. Lo primero es lo primero, querrá asegurarse de tener SSH en su sistema.
Para determinar si SSH está instalado, ejecute 'cuál ssh'
. Si Terminal devuelve algo a lo largo de las líneas de / usr / bin / ssh
, entonces eres bueno para ir De lo contrario, siga una de estas guías para instalarlo..
En este artículo, asumiré que la versión que está utilizando es OpenSSH; Existen algunas diferencias de configuración que dependen de su versión de SSH. Explicaremos cómo configurar una Mac para conectarse a un servidor MediaTemple a través de un único comando SSH. Una vez que tenga SSH instalado en su máquina, deberá asegurarse de que su host de destino tenga SSH habilitado. SSH se ejecuta en el puerto 22 de forma predeterminada; puede utilizar una herramienta de línea de comandos como nmap
para hacer ping a su servidor para determinar si el puerto 22 está aceptando conexiones entrantes, como esto:
sudo nmap -sS hostname.com
Por supuesto, es probable que tenga acceso a la interfaz administrativa del servidor. Asegúrese de revisar las opciones y habilitar SSH. En un servidor Mediatemple, esta configuración se encuentra en el panel de control del servidor. Se puede acceder a Mediatemple SSH mediante [email protected]. Puede agregar usuarios a la cuenta, pero para mantener las cosas simples, usaremos [email protected].
Una vez que SSH esté habilitado (y haya establecido una contraseña de root en el administrador de su servidor), puede ejecutar la siguiente línea para SSH en su servidor.
ssh [email protected]
... donde primarydomain.com es tu dominio principal de MediaTemple. Se le pedirá su contraseña (que es la contraseña de root que estableció en el panel de control). Si no está utilizando MediaTemple, también puede SSH directamente a la dirección IP de su servidor.
Si utiliza un alojamiento compartido, es probable que no inicie sesión como root. En su lugar, iniciará sesión con un nombre de cuenta de usuario. Por ejemplo, si está utilizando un servicio como Site5, puede iniciar sesión con un nombre de usuario en un subdominio, como este:
ssh [email protected]
En última instancia, estas configuraciones dependerán de su compañía de servidor web específica. Consulte la documentación de su anfitrión para más información..
Una vez que esté "instalado", puede ejecutar comandos y atravesar el sistema de archivos dentro de Terminal. Dependiendo de su nivel de acceso, puede instalar elementos en su servidor utilizando los comandos apt-get o wget. Puede administrar su servidor Apache, editar archivos de configuración con un editor de texto basado en Terminal, ver registros de errores, borrar cachés, ver archivos directamente en un servidor para asegurarse de que sean la versión correcta y muchas otras tareas de administración de sistemas de nivel inferior . Ahora, ¿y si quisieras hacer? Más rápido con SSH?
Hay un montón de cosas poderosas que SSH te abre. Vamos a omitir algunos de ellos (ya que algunos están más relacionados con el administrador de sistemas, como la tunelización). Pero repasaremos algunos trucos útiles..
Estás pensando, "parece que debería haber una manera más rápida de hacer esto". Tienes razón. Y ahí está. En lugar de tener que recordar su dominio, contraseña y nombre de usuario para cada servidor, puede configurar algunas configuraciones que le permitirán acelerar el proceso a algo en este sentido.
ssh myserver
Con la configuración correcta, puede ejecutar esto, y sin tener que ingresar contraseñas, direcciones IP o nombres de dominio largos, ¡ya está! Una vez más, asumiremos que está iniciando sesión en un servidor de MediaTemple. Primero, generaremos teclas ssh. Esto es básicamente un conjunto de claves cifradas que viven en ~ / .ssh
en su máquina local. Tienes una clave "pública" y una clave "privada". Entonces, lo primero es abrir una nueva ventana de Terminal y crear la carpeta .ssh en su directorio de inicio.
mkdir ~ / .ssh
A continuación generará sus claves con la siguiente línea. (Esto viene directamente de la documentación de MediaTemple).
ssh-keygen -t rsa -b 2048 -f ~ / .ssh / id_rsa -C "El comentario sobre tu clave va aquí".
Esta línea generará una clave ssh de tipo rsa, con 2048 bits (por seguridad), en la ubicación del archivo especificada, con el comentario especificado. Se le solicitará una contraseña, pero no es obligatorio ni necesario; no proporcionar una contraseña le permitirá iniciar sesión automáticamente. El tipo RSA es para la versión 1 del protocolo SSH. Tipo DSA es para la versión 2 del protocolo. Consulte con su servidor web para saber qué versión están usando. Una vez que se generen sus claves, ejecutará esto para asegurarse de que las configuraciones de SSH estén configuradas con los permisos correctos.
chmod 700 ~ / .ssh && chmod 600 ~ / .ssh / *
A continuación, cargará su clave pública a su servidor. Hay bastantes maneras de hacer esto; De esta manera viene de los documentos de MediaTemple también.
cat ~ / .ssh / id_rsa.pub | ssh [email protected] 'cat - >> ~ / .ssh / authorized_keys'
Este código hace eco de su id_rsa.pub a través de un '|' (pipe) en el siguiente comando, que es un SSH en [email protected], donde ejecutará un eco y una concatenación de lo que canalizó en el primer comando. Suena un poco complicado, por lo que hay algunas formas alternativas de manejar esto. Esencialmente, no querrá saltos de línea y su clave pública en su propia línea en un archivo, llamado authorized_keys
en su servidor en el directorio ~ / .ssh /. Por lo tanto, si esta es la primera o la única clave que desea en su servidor, puede ejecutar este comando para copiarlo directamente en esa ubicación.
scp ~ / .ssh / id_rsa.pub [email protected]: .ssh / authorized_keys
Esta línea básicamente dice "copie este primer archivo a través de SSH al servidor en esta ubicación en relación con mi directorio de inicio actual".
Una vez que authorized_keys contiene su clave pública, puede intentar iniciar sesión en el servidor con ssh [email protected]. Si coloca su clave pública en los archivos de configuración SSH del directorio del usuario raíz, podrá iniciar sesión directamente en la raíz. Se le preguntará acerca de una huella digital rsa; Adelante y permite esta acción. Agrega el servidor al que se está conectando a un archivo conocido_hosts. Este archivo se puede usar para muchas cosas diferentes, pero particularmente para protegerse contra lo que se llama un ataque de "hombre en el medio". Si desea leer un poco más sobre esto, consulte esta explicación..
Si puede iniciar sesión correctamente en su servidor, como si hubiera ingresado una contraseña, sus claves funcionan correctamente. El siguiente paso es agregar un par de líneas para un acceso directo a un archivo de configuración en su máquina. Abra ~ / .ssh / config en su editor de texto favorito (créelo si no existe) y agregue lo siguiente:
Nombre abreviado del host Nombre de usuario nombre de usuario algunashost.com
Donde "shortname" es un apodo para el servidor en el que desea iniciar sesión. Por ejemplo, "Host myserver" me permitiría hacer ssh myserver
. HostName es la ubicación de su servidor y, por supuesto, el usuario es su nombre de usuario. Usted puede tener Usuario root
en este punto Una vez que se guarde este archivo, debería poder ejecutar un comando simple para iniciar sesión en su servidor, como este:
ssh nombre corto
Tenga en cuenta: esta sección requiere un poco de familiaridad con Git.
¡Puede usar SSH para configurar sus propios repositorios Git en su servidor! Esto es útil para las empresas que no desean exponer su código en GitHub por cualquier motivo, y es genial poder enviar directamente desde una máquina local a un repositorio de Git en su propio servidor.
Para configurar esto, asegúrese de que Git esté instalado tanto en el host como en su máquina local. Es posible que deba pasar por la compañía de su servidor web para instalar Git. A continuación, ejecute git init
en su servidor en la ubicación en la que desea que esté su repositorio Git. Por supuesto, puede hacer esto de cien maneras diferentes, pero si prefiere no tener un repositorio simple, puede usar sucursales para enviar desde su máquina local. Aquí hay un flujo de trabajo común.
ssh [email protected] cd / path / to / repo git init git checkout -b staging git checkout master # desconecte de la sesión de shell usando ctrl-d cd / local / repo git init git add. git commit -am "algún mensaje" git remoto agregar origin [email protected]: / path / to / repo git checkout -b staging git push origin staging ssh [email protected] cd / path / to / repo git merge staging
Básicamente, lo que está sucediendo aquí es que está iniciando sesión en el servidor, cambiando a la ruta de repositorio deseada, creando un repositorio y agregando una rama de "ensayo" a la que puede acceder desde su máquina local. Luego, está creando su repositorio local y una rama de "puesta en escena" correspondiente en su máquina local y agregando archivos para realizar un seguimiento del repositorio. Luego viene un compromiso inicial. Luego está agregando el repositorio remoto como un alias de "origen". A continuación, está empujando la rama de preparación local a la rama de preparación del alias de "origen". Por último, está devolviendo al servidor y fusionando la rama "provisional" con la rama "maestra" predeterminada.
También puede usar el FTP (protocolo de transferencia de archivos) alimentado por SSH, que es esencialmente una versión más segura (encriptada) de FTP que se ejecuta en el puerto 22 (en lugar del puerto FTP predeterminado 21). La mayoría de los clientes FTP también soportan SFTP. FileZilla (para Windows) y Fetch (para Mac) son dos clientes SFTP / FTP populares (y gratuitos).
Mientras esté cerca de una computadora que esté conectada a Internet, tenga un Terminal y tenga SSH instalado (por ejemplo, cualquier Mac conectada a WiFi), puede obtener acceso a su servidor a través de SSH. Esa es la mejor parte. No requiere ninguna configuración (asumiendo que no ha configurado ninguna restricción que exigir una clave de acceso coincidente), puede iniciar sesión con su nombre de usuario y contraseña desde prácticamente cualquier lugar. Incluso hay clientes SSH para iOS y otros dispositivos móviles. Esta es una característica muy poderosa de SSH que solo es paralela en portabilidad por aplicaciones basadas en navegador.
Esperemos que pueda ver el poder de SSH en un ciclo de desarrollo diario..
Imaginemos que usted y algunos amigos están trabajando juntos en algún código. Supongamos también que tiene un equipo local sobre el que tiene control total que utiliza como servidor LAMP de desarrollo con algunas máquinas virtuales instaladas en él. Puede usar SSH localmente para mover archivos hacia y desde su computadora y la máquina de desarrollo. Incluso puede configurar un repositorio local de Git (o svn, o Mercurial), impulsado por SSH para mantener todo bajo control. Quizás incluso pueda hacer que la máquina de desarrollo sea la única máquina que está conectada al servidor remoto a través de SSH, de modo que el código tiene pasar por un proceso de preparación específico antes de que se pueda poner en producción. La columna vertebral de todas estas acciones es SSH!
Esperamos que pueda ver el poder de SSH en un ciclo de desarrollo diario, especialmente para equipos que utilizan el control de versiones. Como señalé anteriormente, hay mucha documentación y una gran cantidad de herramientas de nivel de red basadas o basadas en SSH que le darán más control y poder sobre su proceso de desarrollo y su servidor. ¿Quién sabe? Tal vez, un día, podrías doblarte como administrador de sistemas después de todo!
Aquí hay algunos otros enlaces útiles para comenzar con SSH. Ha estado alrededor por un tiempo, así que hay mucha documentación flotando alrededor.
Gracias por leer!