「Windows 10でUbuntuのBash」にSSHで接続するにはどうすればよいですか?


99

「Windows on Ubuntu on Ubuntu」がインストールされて動作するWindows 10 Anniversary Editionがあります。このUbuntuインスタンスにSSHできるようにしたいのですが、openssh-serverをインストールして構成しています(そしてポート2200でリッスンしています)が、「localhost:2200」にsshしようとすると、「サーバーが予期せずに閉じられたネットワーク接続」。

誰かがこれを成功裏に達成できましたか?

ここに画像の説明を入力してください


Process Hackerを使用して「ネットワーク」タブを見ると、sshd(Windows 10のUbuntuで実行中)が2200のローカルポートでリッスンしていることがわかります。
ミック

そして、あなたがシステムのIPアドレスに接続しようとすると?Ubuntuは、ループバックアドレスをWindowsとは異なる方法でマップすることが多く、127.0.0.0 / 8(多くの場合127.0.1.1)で追加の値を使用します
フランクトーマス

@ラムハウンド:そうではありません。Localhostはlocalhostであり、すべてが共有されます。links http://localhost/Linuxサブシステムから完璧に実行でき、Windows側のIISが提供するWebページを確認できます。分離はありません。
サミKuhmonen

回答:


120

動作するようになりました。方法は次のとおりです。

ssh-serverをアンインストールし、再インストールして、開始することを確認しました

sudo service ssh --full-restart

ルートアクセスをオフにし、構成ファイルに別のユーザーを追加したことを確認してください。

予想どおり、127.0.0.1:22のサブシステムに接続できました。これがあなたのお役に立てば幸いです。

これがスクリーンショットです。

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config 設定してルートログインを禁止します PermitRootLogin no
  4. 次に、その下に次の行を追加します。

    AllowUsers yourusername

    パスワードを使用してログインPasswordAuthenticationするyes場合はに設定されていることを確認してください。

  5. 以下を追加/変更して特権の分離を無効にします。 UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. PuTTYなどのsshクライアントを使用して、WindowsからLinuxサブシステムに接続します。


2
私はそれをする必要はありませんでした-奇妙な..しかし、これはまだベータ段階であるため、結果は異なる場合があります
マスターアザゼル

7
さらに、サービスコントロールパネルからWindows 10 SSHサーバーブローカーサービスを停止/無効にし、sshdconfigでPubkeyAuthentication noを設定します
math0ne

6
また、ファイアウォールルールを追加する必要がありました。そこ既存のルールだったが、それはWindowsのみSSHサーバプロキシのためだった、と私はそのサービスを停止したときに、ファイアウォールがポート22上のトラフィックをブロック
ピエール・リュックPaour

2
私はまた、(ポート変更しなければならなかったPort 2222/etc/ssh/sshd_config窓のSSHサーバーがポート22で接続を拾っていない場合は、ファイルを)
のaroD

2
あなたは... bashのウィンドウを閉じるたび@ArtemRussakovskii彼らは全体のLinuxのサブシステムを停止
Sakher

27

Windowsの実装ではchrootが提供されないため、/ etc / ssh / sshd_configを変更する必要があります

UsePrivilegeSeparation no

また、useraddコマンドなどを使用してユーザーを作成する必要があります。


4
このステップは、機能させるために不可欠でした。
ミック

1
私は興味があったので、freebsd.org / cgi / man.cgi?sshd_config(5)でこれを見つけました:UsePrivilegeSeparation:
krs013

sshd(8)が受信ネットワークトラフィックを処理するために特権のない子プロセスを作成することにより特権を分離するかどうかを指定します。認証に成功すると、認証されたユーザーの権限を持つ別のプロセスが作成されます。特権の分離の目的は、特権のないプロセス内に破損を含めることにより、特権のエスカレーションを防ぐことです。引数は、「yes」、「no」、または「sandbox」でなければなりません。UsePrivilegeSeparationが「sandbox」に設定されている場合、事前認証の非特権プロセスには追加の制限が適用されます。デフォルトは「sandbox」です。
krs013


24

上記の委員会の回答は素晴らしかったです。彼らに感謝します。そして、それらが非常に近づいている間、私はまだ127.0.0.1の問題によってConnectionを閉じていました。

この投稿から追加の手順を見つけて追加しました。特に、最初から最初のステップとしてこれを追加し(--purge修飾子に注意してください)、最終的にこの問題の私のバリエーションを解決しました:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

再びありがとう、この追加が他の人に役立つことを願っています。= :)


2
なぜ下票なのか?前述のように、これらの指示だけでは私の場合は機能せず、上記の追加手順が機能しました。わかりません。
-NYCeyes

1
「サポートされている認証方法がありません(サーバー送信:publickey)」という非常に異なるエラーが発生し、これらの手順で修正されました。
マイクヴィエンズ

2
何らかの理由で、Windowsはポート2222で実行していることを認識していませんでした。ポートを使用する他のプロセスは表示されず、ポートの競合の証拠もありませんでしたが、ポートを変更するとすぐに作業。
-forresthopkinsa

ポート2222も機能しません。他のサービスは実行されませんが、22は機能します。これは、複数のSSH接続が必要なため問題です。
mFeinstein

4

マスターアザゼルが示唆したように、私はすべてをし、問題を抱えていました。ポートに接続する22と、パスワードの入力を求められましたが、Linuxサブシステムで設定したパスワードが機能しませんでした。

解決策1:サブシステムで
SSHポートを変更し/etc/ssh/sshd_config、SSHサーバーを再起動する

解決策2:
Windowsのサービスコントロールパネルで「SSHサーバーブローカーサービス」を無効化/停止し、サブシステムでSSHサーバーを再起動します。


1
あなたはポート22上のウィンドウ上で動作している何か持っている場合にのみ適用されます
マスターアザゼル

3
あなたがwin10の私のデフォルトのインストールに見るようにOfcz、22上で実行されているサービス...があった
scotty86

2

sshできない理由は、サーバーからのロギングに示されています。

chroot( "/ var / run / sshd"):関数は実装されていません[preauth]

Linuxサブシステムにはchrootが実装されていないようで、sshサーバーが必要とするため、接続は許可されません。


3
どちらが正しいか..しかし、他の答えはchroot要件を回避する方法を説明しています。
マフムードアルクッディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.