web-dev-qa-db-ja.com

書き込みに失敗しました:パイプが壊れています

ヘッドレスUbuntuサーバーがあります。 MacからSSH経由でサーバー上でコマンドを実行しました(snapraid sync)。コマンドは約6時間かかると言ったので、一晩残しました。

今朝降りたとき、Macのターミナルは「書き込みに失敗しました:パイプが壊れています」と言いました。

コマンドが完全に実行されたかどうかはわかりません。これはタイムアウトの問題ですか?もしそうなら、どうすればSSH接続を一晩維持できますか?

42
Garry Pettet

これにより、Mac osXバージョン10.8.2の問題が解決するはずです。

追加:

ServerAliveInterval 120
TCPKeepAlive no

このファイルに:

~/.ssh/config

または、SSHクライアントのグローバルな変更にしたい場合は、 このファイル

/ private/etc/ssh_config

「ServerAliveInterval 120」は基本的に、120秒ごとにNULLパケットでサーバーに「ping」することを意味し、「TCPKeepAlive no」はSO_KEEPALIVEソケットオプションを設定しないことを意味します「またはいくつかの奇妙な)。

同様に、サーバーには同じ効果(ClientKeepAliveInterval)を設定できるものがありますが、通常はこれらの設定をあまり制御できません。

47
jeremyforan

そのために「スクリーン」ユーティリティを使用できます。 SSHを介してサーバーに接続し、「screen」コマンドの実行によって画面セッションを開始し、そこでコマンドを開始して切断します(画面セッションを終了しないでください)。コマンドがすでに完了していると思う場合は、サーバーに接続し、スクリーンセッションにアタッチして、コマンド実行結果/進行状況を確認できます(ある場合)。

詳細については、「man画面」を参照してください。

22
gumkins

これにより、ubuntuおよびlinux mintの追加に関する問題が解決されます。

ServerAliveInterval 120
TCPKeepAlive yes

/ etc/ssh/ssh_configファイルへ

6
Subrata Mal

画面の代わりに、tmuxをお勧めします。(間違いなく)より良い 競合他社

tmux new-session -s {name}

そのコマンドはセッションを作成します。その後いつでも接続したい:

tmux a -t {name}
4
jmvbxx

2つの解決策があります

  1. サーバーを更新してサーバーsshdを再起動するには

echo "ClientAliveInterval 60" | Sudo tee -a /etc/ssh/sshd_config

  1. クライアントを更新するには

echo "ServerAliveInterval 60" >> ~/.ssh/config

2
Spirit

/ etc/ssh/sshd_configを編集しても問題が解決しない場合、または〜/ .ssh/configがマシン上に存在しない場合は、sshを再インストールすることを強くお勧めします。この解決策は、「壊れたパイプ」エラーと「リモートホストによって閉じられた」エラーの両方を理解するのに約1分かかりました。

Sudo apt-get purge openssh-server

Sudo apt update

Sudo apt install openssh-server
1

Sshd_configの上記パラメーターの多く(ClientAliveInterval、ClientMaxCount、TCPKeepAlive ...)を変更しようとしても、何も変更されていません。フォーラムやブログで解決策を探すのに何時間も費やしています...

Ssh/sftpでの接続を禁止する破損したパイプの問題は、ChrootDirectoryの許可設定に起因するようです。 ChrootDirectoryは755パーミションの低い権限765/766/775でroot/rootが所有する必要があります...動作しませんが、接続ユーザーに書き込み権限を付与する必要がある場合、強力な権限(700など)を使用できます。サブディレクトリ内。 chrootがsftpUser:sftpGroupによって所有されている場合、どちらも機能しません...

chroot-> root:root 755
| 
---subdirectories-> sftpUser:sftpGroup 700 up to 770 

それが役立つことを願って

0
David

jeremyforanの答えは正しいですが、scpを使用しようとしている場合、説明されているように設定された設定ファイルを明示的に指す必要があることがわかりました、それは設定の通常の階層に従わないようです。例えば:

scp -F ~/.ssh/config myfile [email protected]:~

-Fを省略してもパイプ破損エラーが発生します。

0
Max Mammel