scpまたはsftp経由でリモートファイルをstdoutにパイプする方法は?


28

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

回答:


14

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

ありがとう、まさに私が探していたものです!私はあなたの答えを編集して公開鍵認証を拡張しました。構文はssh / sshfs構文に非常に似ていることがわかりました。curlコマンドが「curl:(51)SSL peer certificate or SSH remote key was OK」で失敗した場合は、-kフラグ(--insecure)を追加してください。
ロブW 14

28

実行できる人のためにscp、これを行うことができます:

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

どちらの方法も機能しません。最初の1つは1ライナーに相当し、sftp username@hostname:/path/to/file.txt /dev/stdout「/ dev / stdoutに書き込めませんでした:不正なシーク」になります。2番目のコマンドは失敗し、質問の下部に表示されるエラーが表示されます。
ロブW

SFTPフォームは私にとっては問題なく機能します。使用しているsshソフトウェアのバージョンによって異なります。scpについては、「scpが機能する場合」と言いました。質問で、サーバーがscpの実行を許可していないことを確認したため、当然、scpコマンドは失敗します。
ケンスター14

ssh -V与えるOpenSSH_6.6.1p1, OpenSSL 1.0.1h 5 Jun 2014。scpはフードの下でsshを使用し、sshが無効になっているため失敗します(セキュリティ対策として、例えばserverfault.com/questions/354615/allow-sftp-but-disallow-sshを参照)
Rob W 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.