sftpで「受信したメッセージが長すぎます」というエラーが発生します。理由は何ですか?

sftpで「受信したメッセージが長すぎます」というエラーが発生します。理由は何ですか?

昨日はsftpRHEL 5.4ボックス(RedHat)でこれを行うことができましたが、今日はできませんでした。

メッセージは"Received message too long 778199411"次のとおりです。調査した結果、私のRHELボックス.bashrcに行があるか、echo "running .bashrc"エコーがあるためだと思います。

それでは、ラインを印刷することがなぜ違いを生み出すのですかsftp?これはデザインの問題のように感じます。.bashrc他の場合(たとえば、ログインや)、1行が印刷され、奇妙な理由で失敗した場合に追跡するのは困難ですsshsftp

もしそうなら、なぜ1行を印刷するとそのようなエラーが発生するのか、私たちがまだ何かを印刷したい場合はどうなりますか.bashrc? (主にファイルをインポートまたは実行するタイミングを確認するため)

答え1

これは長い問題です。私は10年前に初めて職場で商業SSHを混ぜて自宅でSSHを開かなければならなかったときにこれを見つけました。今日またこの問題が発生し、この投稿を発見しました。

「sftp / scpは失敗しますが、sshは機能します」を検索すると、ソリューションに関する通知をより早く受け取ります!

つまり、、、.bashrcなど.bash_profile.cshrc.profile対話型セッションに対して沈黙を維持する必要があります。そうしないと、sftp / scp接続プロトコルが妨げられます。 

この出力はsftp / scpクライアントを混乱させます。以下を実行して、シェルがこれを実行していることを確認できます。
    SSHあなたのホスト/usr/bin/true
上記のコマンドで出力が生成されたら、シェルの初期化を変更する必要があります。

オープンSSH FAQから: 2.9 - sftp / scp接続が失敗しましたが、sshは正しく機能します。

答え2

少なくともSFTPの場合、これはinternal-sftpサブシステムを使用して解決できます。なぜなら、サブシステムが.bashrcまたは/etc/motd

/etc/ssh/sshd_configファイルを変更してSFTPサブシステムを変更するだけです。

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

エラーがなくなりました。

答え3

IDがbashを使用している場合は、リモートシステムのIDユーザー名の~/.bashrcの上部に次のように入力します。

# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return  

ファイル全体をインポートするのではなく、 ~/.bashrc で早く終了します。これは、その ID でログインせずに、そのユーザー名をリモートで使用して scp または sftp を実行するときに .bashrc を自動的に作成する問題を解決します。 id...他の答えから@Peter Scottを引用してください。

または、対応するリモートIDがzshを使用している場合は、〜/ .zshrcの上部に次のように入力します。

# If not running interactively, don't do anything and return early
[[ -o interactive ]] || exit 0

リモートシステムのシェルが ~/.bashrc を使用していない場合は、 ~/.bashrc_profile または ~/.profile ファイルで上記の編集を実行するか、リモートシステムのシェルに似ています。

....修正する...上記のフラグメントをリモートホストのユーザーファイル〜/.bashrcの上部に配置すると、すべてのssh接続は、このコードスニペットが表示されるまで〜/.bashrcを読むだけの〜/.bashrcファイルをソースとして使用します。 〜/ .bashrcファイルの残りの部分のインポートを停止し、ssh接続に必要とせずに目的のエントリでリモートシステムのシェルを汚染するのを防ぎます。インポートする必要があるファイルにコードを入れないでください。または完了するために実行されます。このコードスニペットの要点は、ソースファイル〜/.bashrcの初期終了です(ソースファイルと実行可能ファイルの間に違いがあることに注意してください)...〜/ .bashrcファイルは常にソースです。ファイル、実行されていません

答え4

別の理由があるかもしれません。 openssh-5.3p1-122.el6.x86_64を含むRHEL 6では、LOCALEが "C"のままになると誤動作することがわかりました。次に変更した場合:

export LC_ALL="en_US.UTF-8"

これでsftpが正しく動作します。以前のopenssh-5.3p1-118ではこれらの動作は発生しなかったため、このバージョンではマイナーなバグになる可能性があります。

関連情報