Mi problema es que necesito establecer algunas variables y generar algunas líneas cada vez que inicio sesión en el shell ssh, y al mismo tiempo tengo que poder usar sftp para transferir archivos a través de Filezilla.
Ahora, según las preguntas frecuentes de openssh en http://www.openssh.org/faq.html , si sus scripts de inicio hacen eco de algún tipo de salida, se estropea con sftp. Por lo tanto, se retrasa indefinidamente o se produce un error con una "Conexión cerrada por el servidor con el código de salida 128".
He intentado soluciones como mover .bashrc a .bash_profile, o usar el siguiente código en .bashrc:
if [ "$TERM" != "dumb" ]
then
source .bashc_real
fi
Y:
if [ "$TERM" = "xterm" ]
then
source .bashc_real
fi
Sin embargo, nada funciona. Mi terminal de shell es bash, y me conecto a sftp con filezilla.
.bashrc
sería fuente descp
ossh host command
.Bash
invocado porscp
ossh host command
es de hecho no interactivo . Acabo de encontrar esto en el manual de bash: "Bash intenta determinar cuándo se está ejecutando con su entrada estándar conectada a una conexión de red , como cuando lo ejecuta el demonio de shell remoto, generalmente rshd, o el demonio de shell seguro sshd . Si bash determina se ejecuta de esta manera, lee y ejecuta comandos desde~/.bashrc
, si ese archivo existe y es legible ". Aquí está la historia interesante .Si estás usando csh:
Y si es bash:
o alternativamente usando bash expresiones regulares:
Estas líneas deben preceder a las líneas en las que sale / repite algo.
fuente
$?var
encsh
devuelve 1 sivar
está definido y 0 en caso contrario.$-
inbash
tendría eli
valor de char en su valor si el shell es interactivo.La solución de Mike también funcionó para mí. Pero dado que mi shell predeterminado es TCSH, tuve que editar ligeramente la corrección de la siguiente manera (en .tcshrc):
Solo pensé en compartir para beneficio de todos.
fuente
Me gustan algunas de las otras soluciones mencionadas aquí mejor, pero pensé que descartaría la solución que actualmente uso en mis máquinas virtuales bash y csh para evitar desconexiones SFTP debido a comandos de eco en mis scripts de inicio, en caso de que alguien encuentre útil la información .
En BASH:
En csh:
Es un poco fuerza bruta, pero funciona.
fuente
Aquí están las primeras líneas de mi
.bashrc
archivo (predeterminado) :La comprobación de una sesión interactiva evita la confusión con SCP, SFTP o
ssh remote-host command
modo.Sin esto, si su archivo
.bashrc
usaecho
u otras cosas que se imprimen en stdout, puede obtener este tipo de errores:Received message too long 168435779
protocol error: unexpected <newline>
fuente