Me gustaría copiar squid.conf
de un servidor a otro.
- Los servidores no hablan entre sí. Me gustaría pasar por mi estación de trabajo.
- Ambos servidores tienen el archivo, por lo que se sobrescribirá en el destino.
- Los archivos tienen
600
permiso y son propiedad de root. - el inicio de sesión raíz a través de ssh está deshabilitado (
PermitRootLogin no
). - Me gustaría hacerlo en una línea, si es posible, ya que será parte de una guía de configuración.
Yo sé hacer
ssh source 'tar czpf - -C /etc/squid/ squid.conf' | \
ssh target 'tar xzpf - -C /etc/squid/'
copiar archivos entre servidores y preservar permisos. Sin embargo, en este caso obtendré "Permiso denegado".
También sé que puedo hacer esto:
ssh -t source 'sudo cat /etc/squid/squid.conf'
De esta manera, -t
permite que sudo solicite la contraseña de administrador antes de mostrar el contenido del archivo.
El problema es que no sé cómo combinar esas técnicas en algo que solicite la contraseña de sudo en cada servidor y transfiera el archivo a su destino. es posible?
ACTUALIZACIÓN : Aquí está lo mejor que se me ocurrió:
ssh -t source 'sudo tar czf /tmp/squid.tgz -C /etc/squid squid.conf' && \
ssh source 'cat /tmp/squid.tgz' | \
ssh target 'cat >/tmp/squid.tgz' && \
ssh -t source 'sudo rm /tmp/squid.tgz' && \
ssh -t target \
'sudo tar xzf /tmp/squid.tgz -C /etc/squid && sudo rm /tmp/squid.tgz'
Llamar a esto una frase parece una exageración. Creo que lo dividiré en pasos separados en la guía de configuración.
ssh
sudo
file-transfer
itsadok
fuente
fuente
Respuestas:
Es más fácil encadenar ssh con ssh que encadenar ssh con sudo. Entonces, cambiar la configuración del servidor ssh está bien, sugiero abrir ssh para la raíz de cada servidor, pero solo desde localhost. Puede hacer esto con una
Match
cláusula ensshd_config
:Luego, puede configurar una cadena de autenticación basada en clave de usuario remoto a usuario local y de usuario local a root. Todavía tiene un rastro de autenticación, por lo que sus registros le informan quién inició sesión como root, y los pasos de autenticación son los mismos que si sudo estuviera involucrado.
Para conectarse a un servidor como root, defina un alias
~/.ssh/config
como este:Si insiste en usar
sudo
, creo que necesitará comandos separados, comosudo
insiste en leer desde un terminal (incluso si tiene un ticket para su cuenta) ¹, y ninguno de los métodos habituales de copia de archivos (scp, sftp, rsync) Soporte para interactuar con un terminal remoto.Siguiendo con ssh y sudo, sus comandos propuestos podrían simplificarse. En cada lado, si ha configurado sudo para no volver a solicitar una contraseña, puede ejecutarla una vez para superar el requisito de contraseña y otra vez para copiar el archivo. (No puede copiar fácilmente el archivo directamente porque la solicitud de contraseña se interpone).
¹ a menos que lo hayas hecho
NOPASSWD
, pero no estarías preguntando esto.fuente
Match host localhost
.Puede configurar
sudo
para no solicitar la contraseña de la siguiente manera:En la fuente:
En el blanco:
Y haz en tu máquina:
Pero recomiendo usar algo como títeres . Es mucho mejor y más fácil resuelve su problema con la distribución de archivos de configuración.
PD. Por cierto, si configurará
sudo
para solicitar una contraseña al usuario, la cadena con[sudo] password for user
aparecerá en el archivo de destino.fuente
En lugar de usar ssh, puede usar scp para transferir el archivo entre los servidores.
Inicie sesión en el servidor de destino:
Cambie al directorio de destino donde desea copiar el archivo.
r: recursivo p: conserva los tiempos de modificación, los tiempos de acceso y los modos del archivo original
fuente
Sin cambiar la configuración de ssh, puede crear dos túneles ssh host-> servidor1 y servidor2-> host a través de la conexión ssh al servidor2. Conecte estos dos túneles en la máquina host (mismo puerto). Y ejecute sudo en el servidor2 para recuperar datos de los túneles conectados en el servidor1 y guardarlos en el servidor2.
La idea es: 1- crear un túnel local desde su máquina a la máquina fuente en el puerto 60000
1b- Cree un túnel remoto para volver a su máquina
2- conectar a la máquina de destino
3- ejecuta todo como root en la máquina de destino para escribir
4- conectar a la máquina fuente a través del túnel. whoami y localhost significa localhost en la máquina $ {target}.
5- empaquete los archivos remotos y envíelos comprimidos a stdout
6- recibe el paquete a través de stdout y extrae los archivos en consecuencia en el directorio / path / to / target
Nota: Puede recibir hasta 3 confirmaciones de sshkey y 3 solicitudes de contraseña. Pero los archivos se copiarán.
fuente