💭

Visual Studio Code のエラー : Remote - SSH→『プロセスが、存在しないパイプに書き込もうとしました。』

2023/06/25に公開

エラーの内容

今回、学校の課題にて"Remote - SSH"を使用して大学のサーバに接続しようとしたところ、以下のようなエラーが出ました。

 『プロセスが、存在しないパイプに書き込もうとしました。 』
> Bad owner or permissions on C:\\Users\\<ユーザ名>/.ssh/config

WSL Ubuntuからのsshは成功したんですが。

解決方法

調べたところ、C:\Users\<user_name>\.ssh\.configを現在使用しているユーザー以外のユーザーが参照できる場合、このエラーが発生するそうです。
言い方を変えれば、Linuxのchmodで確認すると777になっているようなものです。


アクセス権を持たないユーザが他ユーザの.sshを開く図

永続的なアクセス権が関係しているのでしょう。

そのため、ファイルにあるアクセス許可を現在使用しているユーザ以外削除します。
まずはファイルを右クリックして「プロパティ」を開き、セキュリティのタブを開きます。
次に「設定」か「詳細設定」を開きます(大抵は設定だと変更できないので、ここでは詳細設定を開いてください)。
塗りつぶしの部分には、使っているPCの名前が載っているはずです。


セキュリティタブを開いているプロパティの図


セキュリティの詳細設定を開いている図
削除したいユーザをクリックし、削除(R)を押すことで削除ができます。


Windowsセキュリティから削除できないと言われるポップアップ
削除できない場合は継承の無効化(I)を押します。


継承の無効化を押したときのポップアップ

上の「継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します。」は、追加(D)、削除(R)、表示(E)を自由に行うことができます。

下の「このオブジェクトから継承されたアクセス許可をすべて削除します。」は、このファイルのアクセス権をすべて削除します。


「このオブジェクトから継承されたアクセス許可をすべて削除します。」を選んだ図
ubuntuのchmodでは000です。

上を選んで、現在使用しているユーザ以外を削除しましょう。


.configで設定しているアクセス許可の再現
ubuntuのchmodでは600です。

これでRemote - SSHを実行すると成功するはずです。

―参考URL―

設定の仕方について

https://qiita.com/colorrabbit/items/837810ef6176b3b6f4cc
https://www.forrexlapis.win/posts/2022-09-19-windowssshで接続しようとするとbad-owner-or-permissions-on-~~~って文句言われる件/
https://kurage-worker.com/2022/windows-ssh-permission-error

アクセス許可について

https://teratail.com/questions/199542
https://ittrip.xyz/soft/windows/keishou
https://itojisan.xyz/trouble/12948/#3


おまけ

ここからは原因解明までの道のりを載せます。
途中の設定の確認などで参考になるものがあれば幸いです。

実機

Windows11 Pro
コマンドプロンプト、WSL Ubuntuからのsshは成功済み。

エラー文の一部

[14:33:14.064] Running script with connection command: "C:\Windows\System32\OpenSSH\ssh.exe" -T -D 58772 "サーバ名.jp" bash
[14:33:14.078] Terminal shell path: C:\Windows\System32\cmd.exe
[14:33:14.459] > Bad permissions. Try removing permissions for user: SIVERF\\別のユーザ (S-1-5-21-313889222-2147379138-213798657-1002) on file C:/Users/ユーザ名/.ssh/config.
> Bad owner or permissions on C:\\Users\\ユーザ名/.ssh/config
> プロセスが、存在しないパイプに書き込もうとしました。
> ]0;C:\Windows\System32\cmd.exe 
[14:33:14.459] Got some output, clearing connection timeout

configの設定

https://makky12.hatenablog.com/entry/2022/09/20/120500
上記の記事を参考に、.configの中身を変更。

Host ホストの名前
  HostName ホストの名前あるいはホストのIPアドレス
  User <Username>

Host ホストの名前
  HostName ホストの名前あるいはホストのIPアドレス
  User <Username>
  PasswordAuthentication yes
  Port 22

・・・成功はしませんでした。

本機の再起動

本機を再起動します。
成功するはずがありません。

IPアドレスへ変更

サーバ名からIPアドレスに変更。
これも成功せず。

解決へ

最初に戻ります。


考察・感想

最後は大学生らしく、考察と感想を述べて終わります。

このエラーが発生したのは授業内でしたがエラー文を読んで解決できました。ただ、これに二十分くらいかけてしまったのは少々苛ついてはおりますが。
それでも、ロリでかわいいお姉さんから『よくできました』と褒められても文句は言われないでしょう。
さて、今回のエラーに関してですが、完全に自分の失態です。
通常Windowsでは、ユーザ間を通してファイルを見ることはできない設定になっていますが、僕の環境ですとユーザが2つあるので、ユーザ間を移動するのは面倒くさいっと他のユーザのアクセス権を許可していたのが原因です。
今度からはパブリックのドキュメントなどを使用するのが賢い選択でしょうか?それともユーザのアクセス権を他のユーザに渡さないようにするのがいいのかしら。

それからアクセス許可の予想として、SYSTEMとAdministratorsは消さなくていい可能性があります。ここは要検証。
追記→成功。やっぱり別のユーザが問題でした。

Zennでブログ内のタイトルに飛べたらいいのですが。そんな機能はないか。

↓追記↓
ありました。右の欄に。
#でタイトル分けをするだけでいいんですね。

Discussion