¿Cómo canalizar un archivo remoto a stdout sobre scp o sftp?

28

Usando ssh, es fácil imprimir el contenido de un archivo usando

ssh host 'cat file.txt'

Cuando ssh está deshabilitado y solo SFTP está habilitado, la ejecución del comando anterior da el siguiente error:

Este servicio solo permite conexiones sftp.

Para solucionar este problema, podría crear un archivo temporal usando scpo sshfs(como se muestra a continuación), pero eso se ve realmente feo. ¿Cuál es la forma correcta de imprimir el contenido de un archivo remoto cuando SSH está desactivado?

mkdir tmpdir
sshfs host: tmpdir
cat tmpdir/file.txt
fusermount -u tmpdir

# This does not work! scp -v host:file.txt . shows
# "Sink: This service allows sftp connections only."
scp host:file.txt .
cat file.txt
rm file.txt
Rob W
fuente

Respuestas:

14

Curl puede mostrar el archivo de la misma manera que lo haría cat. No es necesario eliminar el archivo, ya que simplemente muestra la salida a menos que le indique lo contrario.

curl -u username:password sftp://hostname/path/to/file.txt

Si usa la autenticación de clave pública:

curl -u username: --key ~/.ssh/id_rsa --pubkey sftp://hostname/path/to/file.txt

Si utiliza las ubicaciones predeterminadas, a continuación, --keyy --pubkeyse puede omitir:

curl -u username: sftp://hostname/path/to/file.txt

El nombre de usuario también puede ser parte de la URL, por lo que el resultado final se ve muy cerca del comando ssh:

curl sftp://username@hostname/path/to/file.txt
brwtx
fuente
Gracias, exactamente lo que estaba buscando! He editado su respuesta para ampliar la autenticación de clave pública, resulta que la sintaxis es muy similar a la sintaxis ssh / sshfs. Si el comando curl falla con "curl: (51) el certificado de igual SSL o la clave remota SSH no estaba bien", simplemente agregue la -kbandera ( --insecure).
Rob W
28

Para las personas que pueden correr scp, puedes hacer esto:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
fuente
Ninguno de los métodos funciona. El primero es equivalente al one-liner sftp username@hostname:/path/to/file.txt /dev/stdouty da como resultado "No se pudo escribir en" / dev / stdout ": búsqueda ilegal". El segundo comando falla y muestra el error que se muestra al final de mi pregunta.
Rob W
El formulario SFTP funciona bien para mí. Puede depender de qué versión del software ssh está utilizando. Con respecto a scp, dije "si scp funciona". Estableció en su pregunta que el servidor no le permitía ejecutar scp, por lo que, naturalmente, el comando scp fallaría.
Kenster
ssh -Vda OpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. scp falla porque usa ssh debajo del capó, y ssh está deshabilitado (como medida de seguridad, consulte, por ejemplo, serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Rob W