scpまたはsftpを介してリモートファイルをstdoutに転送する方法は?

scpまたはsftpを介してリモートファイルをstdoutに転送する方法は?

SSHを使用すると、ファイルの内容を簡単に印刷できます。

ssh host 'cat file.txt'

SSHが無効でSFTPのみが有効になっている場合、前のコマンドを実行すると次のエラーが発生します。

このサービスはSFTP接続のみを許可します。

この問題を解決するために、scpまたは(以下を参照)を使用して一時ファイルを作成できますが、sshfsこれは非常に見苦しいです。 SSHが無効になっている場合にリモートファイルの内容を印刷する正しい方法は何ですか?

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

答え1

を実行できるユーザーは、scp次のことができます。

scp remotehost:/path/to/remote/file /dev/stdout

答え2

Curlはcatなどのファイルを表示できます。特に指定しない限り、ファイルは出力のみを表示するため、ファイルを削除する必要はありません。

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

公開鍵認証を使用する場合:

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

デフォルトの場所を使用する場合--key--pubkey省略可能:

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

ユーザー名はURLの一部でもあるため、最終結果はsshコマンドと非常によく似ています。

curl sftp://username@hostname/path/to/file.txt

答え3

Ubuntuでは、ファイルGUIからリモートディレクトリを開き、「ローカル端末で開く」ことができます。

この時点で、私は次の興味深いルートに行きます。/run/user/1000/gvfs/sftp:host=qweqwe.synology.me/Prod_Backup/DB

ここでは、ローカルファイルシステムに似たファイルを読み込んで転送できます。

残念ながら、速度は私の要件(〜200KB / s)には不十分です。

答え4

そしてlftp

lftp -e 'set cmd:show-status 0; cat -b remote/file' sftp://user@host < /dev/null

</dev/null非対話型に強制)

関連情報