Si quiero enviar algo a través de scp al servidor:
$ scp file server:
_____ _____ _____
$
, se imprimen tres líneas y el archivo no se copia. Sin embargo, puedo conectarme al servidor a través de ssh sin problema:
$ ssh server
¿Cómo hacer que scp funcione?
scp file server:
(suponiendo que "servidor" es un nombre de host válido), el archivo se copia en el directorio de su cuenta.scp
una ubicación diferente en el servidor, luego unacp
omv
despuésssh
Respuestas:
Una posible causa de este tipo de comportamiento es que se imprima cualquier mensaje durante el proceso de inicio de sesión en el servidor. Scp depende de ssh para proporcionar un túnel cifrado totalmente transparente entre el cliente y el servidor.
Verifique todos los scripts de inicio de sesión en el servidor y también intente usar un usuario diferente. Otro método para identificar la fuente del error es usar -v en el comando, para rastrear el progreso de la transacción y ver dónde falla. Puede usar hasta -vvv para aumentar la verbosidad, si es necesario. Verificar las diversas formas de scp también puede ser instructivo, como se enumera en la publicación de InChargeOfIT.
scp, debajo del capó, configura un túnel usando ssh, y luego transfiere el archivo a través de ese túnel, con un comando ssh en el otro extremo para capturar el archivo a medida que se acerca. Esto se ilustra mediante el uso de tar y ssh para copiar una estructura de directorio que preserva los tiempos de propiedad y creación con los siguientes comandos:
para enviarlo y
para recuperarlo
fuente
enable
e ingresar una contraseña no significa que sean priv 15. Si no ve el "privilegio 15" en algún lugarshow run | inc USERNAME
, no podrá scp.export SHELL=/bin/zsh
) en~/.bashrc
. Esto a veces se usa en ausencia dechsh
.Verifique el archivo .bashrc del usuario objetivo o un archivo equivalente. ~ / .bashrc se obtiene para inicios de sesión no interactivos. Si hay un eco o comando que genera algo, romperá el protocolo SCP.
fuente
fortune | cowsay
, simplemente póngalo en .bash_profile. Eso es solo para inicios de sesión interactivos y no debe obtenerse durante la sesión de SCP..bashrc
, que no existiría en la otra máquina. Puede usar la lógica en esta respuesta para omitir~/.bashrc
cuando no sea interactivo (como es el casoscp
).Editar: ¿Está seguro de que está ingresando en una ruta válida en el comando scp? Por ejemplo:
fallará (de hecho, simplemente imprimirá el comando como lo está viendo). En este caso, deberá proporcionar una ruta válida al servidor remoto ... por ejemplo,
scp test.txt [email protected]:~/
Usos de ejemplo:
Enviar un archivo:
Obtén un archivo:
Ejemplos:
Enviar un archivo desde mi escritorio a mi carpeta de inicio en un servidor remoto:
Recuerde que
~
es un acceso directo para su directorio de inicio ... por ejemplo, / home /Envíe un archivo a la raíz web:
En este ejemplo, el usuario john_doe necesitaría privilegios de escritura en el directorio remoto / var / www.
fuente
------
... ninguno de sus ejemplos se relaciona con eso.scp somefile [email protected]:
, no tener los permisos correctos en el directorio remoto también podría causar problemas. Edité mi respuesta para hacerlo un poco más claroEn algunos hosts, obtienen de forma incorrecta
.bash_profile
inicios de sesión no interactivos como scp. Los mensajes que se imprimen en el terminal pueden hacerscp
que no funcione correctamente. Si tiene mensajes en su,.bash_profile
esta puede ser la causa.Para que sus mensajes de inicio de sesión, pancarta, etc. se muestren en inicios de sesión interactivos y pueda seguir utilizando
scp
un inicio de sesión no interactivo, agregue lo siguiente antes de cualquier mensaje que se imprima en su.bash_profile
archivo.El código alternativo es:
Y otro código alternativo:
Lo que creo es la versión más larga del primer código alternativo. En algunos hosts he encontrado que el primer código no funciona correctamente pero el segundo sí.
Durante un inicio de sesión scp no interactivo, abortará la ejecución posterior de .bash_profile y permitirá que scp funcione, pero mostrará sus mensajes de inicio de sesión cuando inicie sesión a través de ssh.
Nota: Esto también se puede usar en su
.bashrc
archivo si lo.bash_profile
obtiene (por $ PATH), de modo que solo una parte se obtiene durante inicios de sesión no interactivos.fuente
Esto no responde la pregunta directamente, pero podría ser útil para personas como yo, que buscan una solución con un scp congelador al transferir archivos entre 2 hosts remotos.
Si se
scp
bloquea debido a mensajes de ssh, podría ayudar a eliminarlos:y / o
En mi caso, eso pareció ayudar, pero no resolvió todo el problema. No pudimos descubrir por qué se bloquea scp cuando se transfiere de remoto a remoto. Colgaba en el medio del archivo. 9 veces funcionó, el intento número 10 no funcionó. Sospechamos que podría bloquearse cuando nuestra conexión VPN recibe un pico de tráfico por un momento y luego scp no se recupera. Realmente se cuelga para siempre y ni siquiera da un mensaje de error.
Sin embargo, me di por vencido y cambié a sftp. Esto es razonablemente más rápido, ya que utiliza una conexión directa entre los hosts remotos. Tienes que habilitar
en el archivo ~ / .shh / config de la máquina que ejecuta el script. Por supuesto, esta es solo una solución si las máquinas remotas están dentro de su red de confianza.
fuente
Estaba llamando
exec /bin/bash
en.cshrc
.Eliminar esto resolvió el problema para mí.
fuente