チャネル 0 で scp exec 要求が失敗しました

チャネル 0 で scp exec 要求が失敗しました

あるコンピュータから別のコンピュータにファイルをSCP転送しようとしているのですが、

チャネル 0 で実行要求が失敗しました。

ただし、SSH を使用すると、問題なくマシンにアクセスできます。役に立つかどうかはわかりませんが、Cygwin の SCP 機能を使用しています。

オンラインで検索したときに「.bashrc」ファイルについて言及されていましたが、見つかったのは「bash.bashrc」だけでした。

私が使用したコマンドは次のとおりです:

scp /filelocation/file user@hostname:/folderlocation

ホスト名の代わりに IP アドレスでも試してみましたが、結果は同じでした。

リモートサイトに SCP コマンドがあることを確認しました。

答え1

これは、Synology NAS にファイルを送信しようとしたときに発生しました。

ランニングはscp -O効果がありました。

この-Oオプションは、ファイル転送に SFTP プロトコルではなく、従来の SCP プロトコルを使用します。

答え2

.bashrcファイル(およびドットで始まる他のファイル)を表示するには、次のようにします。

ls -a

簡単な回避策は、.profile、.bashrc、.login、.bash_profile ファイルの名前を変更して、含まれないようにすることです。これらは、シェル起動ファイルと呼ばれます。

scp が動作するようになった場合、答えはそれらのファイルの 1 つにあります。

基本的に、シェルの起動ファイルの 1 つが出力を送り返し、進行中の SSL ネゴシエーションが混乱します。

ウィンドウのタイトルを設定するために特別なエスケープ シーケンスを送信するだけの簡単な作業である可能性があります。もう 1 つの原因は stty コマンドです。

ログインした時のみターミナルに出力を囲むようにしたい

if tty -s >/dev/null 2>&1; then
    # here if have a real terminal associated to send stty commands 
    # or other special escape sequences to terminal
fi

答え3

同意するストロボこのエラーは、多くの場合、.bashrc (およびその他の) bash 初期化ファイルからの出力によって発生します。

ただし、対話型シェルをテストするための bash 組み込みの方法がいくつかあります。高度な bash スクリプト ガイド参照、サーバー障害参照。

私が最もよく目にするのは、いつ出力を行うかについて $PS1 をテストすることです。

if [ "$PS1" ]; then
    echo "some message"
fi

答え4

すべてのクライアント (またはクライアント アカウント) が ssh を使用してログイン スクリプトを操作することをサポートしているわけではないため、試して使用する有効な代替手段は scp ではなく sftp になります。

関連情報