如何通过 scp 或 sftp 将远程文件传输到 stdout?

如何通过 scp 或 sftp 将远程文件传输到 stdout?

使用 ssh,可以轻松打印文件的内容

ssh host 'cat file.txt'

当 ssh 被禁用并且仅启用 SFTP 时,运行前面的命令会出现以下错误:

此服务仅允许 sftp 连接。

为了解决这个问题,我可以使用scpor创建一个临时文件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

从那里我可以读取和传输类似于本地文件系统的文件。

不幸的是,速度不足以满足我的需求(~200 KB/s)。

答案4

lftp

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

</dev/null强制其非交互式)。

相关内容