昨日はRHEL 5.4ボックス(RedHat)でsftp
を行うことができましたが、今日はできません。
メッセージは"Received message too long 778199411"
であり、調査の結果、RHELボックスの.bashrc
にecho "running .bashrc"
という行が含まれていたか、何も表示されなかったことが原因だと思います。
では、なぜ行を印刷するとsftp
に影響するのでしょうか?ログインやssh
などの他の状況で.bashrc
の行を印刷すると機能し、sftp
を追跡するのが難しいので、デザインの問題のように感じましたそのような奇妙な理由で失敗します。
だから問題は、なぜ行を出力するとそのようなエラーが発生するのか、そして.bashrc
で何かを出力したい場合はどうなるのかということです。 (主にこのファイルがいつソース/実行されるかを確認するため)。
これは長年の問題です。 10年前に、業務用の商用SSHと自宅でのオープンSSHを最初に混在させなければならなかったことがわかりました。今日もそれに遭遇し、この投稿を見つけました。
「sftp/scpは失敗しますが、sshはOKです」を検索していたとしたら、すぐに解決策を思い出すでしょう。
簡単に言うと、.bashrcや.bash_profileなどはサイレントである必要があります。そうしないと、sftp/scp接続プロトコルに干渉します。
Open-SSH FAQをご覧ください:
少なくともSFTPの場合、internal-sftp
または.bashrc
を読み取らないため、/etc/motd
サブシステムを使用して修正できます。
/etc/ssh/sshd_config
ファイルを変更して、SFTPサブシステムを変更するだけです。
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
そして、エラーはなくなりました。
そのIDがbashを使用している場合は、リモートマシンのIDのユーザー名の〜/ .bashrcの先頭に以下を追加するだけです
# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return
これは、ファイル全体をソースするのではなく、単に〜/ .bashrcから早期に終了します...これにより、そのIDにログインせず、そのユーザー名をリモートIDとしてscpまたはsftpを実行しているときに.bashrcをサイレントにすることができます...他の回答で@Peter Scottを引用するには:「簡単に言うと、.bashrcや.bash_profileなどはサイレントである必要があります。そうしないと、sftp/scp接続プロトコルに干渉します。」
または、そのリモートIDがzshを使用している場合は、〜/ .zshrcの先頭に以下を追加します
# If not running interactively, don't do anything and return early
[[ -o interactive ]] || exit 0
リモートマシンのシェルが〜/ .bashrcを使用しない場合は、上記のファイル〜/ .bashrc_profileまたは〜/ .profileなどを編集して、そのリモートボックスのシェルに合わせます。
私がこれについてどこかで見たすべての応答は、それが/etc/motd
、または.bashrc
などを介して出力された出力が多すぎると主張しています。常に正しいとは限りません。 .bashrc
のないアカウントをお持ちの場合、/etc/motd
は空で、デフォルトの.bashrc
はminimalであり、印刷出力はありません。 。シェルが/sbin/nologin
または/bin/false
のユーザーアカウントを持っている場合、このエラーは引き続き発生します。
なぜあなたはこれをしますか?誰かがroot-jailed sftp
を許可しようとしていて、セキュアシェルアクセスがない場合、これが発生します。
回避策:ssh
を許可し、同様にルートの刑務所に入れます。これはssh
で対処する必要のある問題であり、まだ先の話です。
もう1つの理由が考えられます。 openssh-5.3p1-122.el6.x86_64が適用されたRHEL 6では、LOCALEが「C」のままであると正しく動作しないことがわかりました。次のように変更した場合:
export LC_ALL="en_US.UTF-8"
その後、sftpは正しく動作します。以前のopenssh-5.3p1-118では、このような動作は発生していなかったため、おそらくこのビルドのマイナーなバグの可能性があります。
私の場合、それを機能させるために、Ubuntuウェルカムメッセージを無効にする必要がありました。