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

25

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

ssh host 'cat file.txt'

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

This service allows sftp connections only.

Para contornar esse problema, eu poderia criar um arquivo temporário usando scp ou sshfs (como mostrado abaixo), mas isso parece realmente 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
    
por Rob W 28.07.2014 / 18:40

2 respostas

13

O Curl pode exibir o arquivo da mesma maneira que o gato faria. Não há necessidade de excluir o arquivo, pois ele simplesmente exibe a saída, a menos que você diga que faça 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, --key e --pubkey poderão ser omitidos:

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

O nome de usuário também pode ser uma parte da URL, então o resultado final parece muito próximo do comando ssh:

curl sftp://username@hostname/path/to/file.txt
    
por 28.07.2014 / 20:30
24

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

scp remotehost:/path/to/remote/file /dev/stdout
    
por 29.07.2014 / 14:32

Tags