Como canalizar um arquivo remoto para stdout sobre scp ou sftp?

28

Usando o ssh, é fácil imprimir o conteúdo de um arquivo usando

ssh host 'cat file.txt'

Quando o ssh está desativado e apenas o SFTP está ativado, a execução do comando anterior gera o seguinte erro:

Este serviço permite apenas conexões sftp.

Para contornar esse problema, eu poderia criar um arquivo temporário usando scpor sshfs(como mostrado abaixo), mas isso parece muito feio. Qual é a maneira correta de imprimir o conteúdo de um arquivo remoto quando o SSH está desativado?

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
fonte

Respostas:

14

O Curl pode exibir o arquivo da mesma maneira que o gato faria. Não é necessário excluir o arquivo, pois ele simplesmente exibia a saída, a menos que você o instrua a fazer o contrário.

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

Se você usa autenticação de chave pública:

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

Se você usar os locais padrão, --keye --pubkeypoderá ser omitido:

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

O nome do usuário também pode fazer parte da URL, portanto, o resultado final parece muito próximo ao comando ssh:

curl sftp://username@hostname/path/to/file.txt
brwtx
fonte
Obrigado, exatamente o que eu estava procurando! Eu editei sua resposta para expandir a autenticação de chave pública. Acontece que a sintaxe é muito semelhante à sintaxe ssh / sshfs. Se o comando curl falhar com "curl: (51) o certificado SSL do par ou a chave remota SSH não estava OK", basta adicionar o -ksinalizador ( --insecure).
Rob W
28

Para pessoas que podem executar scp, você pode fazer o seguinte:

scp remotehost:/path/to/remote/file /dev/stdout
Kenster
fonte
Nenhum método funciona. O primeiro é equivalente ao one-liner sftp username@hostname:/path/to/file.txt /dev/stdoute resulta em "Não foi possível gravar em" / dev / stdout ": busca ilegal". O segundo comando falha e mostra o erro que é mostrado na parte inferior da minha pergunta.
27514 Robert W
O formulário SFTP funciona bem para mim. Pode depender de qual versão do software ssh você está usando. Em relação ao scp, eu disse "se o scp funcionar". Você estabeleceu na sua pergunta que o servidor não estava permitindo que você executasse o scp; portanto, naturalmente o comando scp falharia para você.
Kenster
ssh -VOpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014. O scp falha porque usa o ssh sob o capô, e o ssh está desativado (como medida de segurança, consulte, por exemplo, serverfault.com/questions/354615/allow-sftp-but-disallow-ssh )
Rob W