回答:
そのためのチュートリアルを見つけました:
これはもともと、githubユーザーimjakey、fpqc、qris、therealkenc、Manouchehri、およびaseering(myself)によって議論され、整理されています。
https://github.com/Microsoft/BashOnWindows/issues/612
sshdを実行すると、セキュリティに影響することに注意してください。WSLのセキュリティモデルのベーキングが長くなるまで、Linuxレベルのアクセス許可に関係なく、Windowsボックスにsshできるユーザーは、sshdを実行しているWindowsユーザーとしてコマンドを実行するアクセス許可を持っていると想定する必要があります。(アクセス許可はおそらく実際よりも制限が厳しくなりますが、WSLの初期のセキュリティモデルはあまり洗練されたものではありません。)
githubからの指示を集約しようとしています:
sudo dpkg-reconfigure
openssh-server
bashシェルで実行してSSHホストキーを生成するsudo nano /etc/ssh/sshd_config
; UsePrivilegeSeparation yes
行を編集して読み取ります
UsePrivilegeSeparation no
。(これは、WSLが現在サポートしていないsyscallをUsePrivilegeSeparation
使用するために必要
chroot()
です。)/etc/ssh/sshd_config
、に変更PasswordAuthentication no
することもできます
PasswordAuthentication yes
。それ以外の場合は、SSHキーをセットアップする必要があります。/etc/ssh/sshd_config
して終了します。実行sudo visudo
してsudoersファイルを編集します。行を追加
$USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
「$ USER」をLinuxユーザー名に置き換えます。保存して終了。変更が無効であるとvisudoが不平を言う場合は、変更が有効であると報告されるまで修正します。そうしないと、システムのsudoを壊すことができます
autostartssh.vbs
次を含むテキストファイルをWindowsで作成します
。
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
autostartssh.vbs
システムの起動時に実行されるタスクを追加します。wscript.exe
実行するコマンドとして使用し、VBSスクリプトの場所をパラメーターとして使用します。そしてそれだけです-あなたのWindowsコンピューターはLinux opensshサーバーを実行しているはずです!
UsePrivilegeSeparation = yes
実行する必要があることを除いて、現在で動作しsudo /bin/mkdir -p /var/run/sshd
ています。WLSはchroot()をサポートするようになりましたか、opensshソースに回避策があり= No
ますか、それともより安全な推奨事項を設定していますか?また、Windowsタスクは、ユーザーがログインしている場合にのみ機能するようです。
/etc/ssh/sshd_config
をコメントアウトしてPort 22
、に切り替えPort 8822
ます。これの1つの理由は、Windowsが22で何らかのSSHプロセスを実行していることです。
同じことをする必要がありました。
Windowsの起動時にすべてのcronのサービスを使用してUbuntu Linuxサブシステムを起動し、Linuxサブシステムを「再起動」する方法を提供する方法を次に示します。
サーバーでopenssh-server、nginx、mariadbデータベースを正常にホストしています。
Linuxサブシステムをインストールする
ペースト:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
WindowsストアからUbuntuをインストールします。
sudoパスワードプロンプトの削除(必須)
ペースト:
sudo sed -i "s/%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" /etc/sudoers
SSHパスワードログインを有効にする(オプション)
ペースト:
sudo sed -i '/StrictModes yes/c\StrictModes no' /etc/ssh/sshd_config
sudo sed -i '/ChallengeResponseAuthentication/c\ChallengeResponseAuthentication no' /etc/ssh/sshd_config
sudo sed -i '/PasswordAuthentication/c\PasswordAuthentication yes' /etc/ssh/sshd_config
起動時のWindows自動ログイン(パスワードまたはRDPを持っている場合に必要)
閲覧する
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
新しい文字列DefaultPassword
を作成し、値としてユーザーのパスワードを書き込みます。
起動時にbash / cronループを実行する
linux.bat
中にshell:startup
ペースト:
C:\Windows\System32\bash.exe -c 'while [ true ]; do sudo /usr/sbin/cron -f; done'
cronの起動にアプリ/サービスを追加します
sudo crontab -e
openssh-server、nginx、mysql、phpなどのスタートアップアプリを追加します。
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot . $HOME/.profile; /usr/sbin/sshd -D
#@reboot . $HOME/.profile; service php7.1-fpm start # Uncomment for php7.1 fpm
#@reboot . $HOME/.profile; service mysql start # Uncomment for mysql/mariadb
#@reboot . $HOME/.profile; service nginx start # Uncomment for nginx
保存して終了は:ctrlx、押しyとenter。
Windowsを再起動せずにLinuxサブシステムを再起動します
bashまたはSSHを開きます
sudo service ssh restart
これにより、現在のインスタンスが閉じられ、cronを適用した新しいインスタンスが作成されます。
追加-PHP 7.1をインストールします(それほど単純ではありません)
非常に標準的なセットアップのために、以下のコマンドを実行します。
mkdir /run/php && chmod -R 777 /run/php
sudo add-apt-repository ppa:ondrej/php && sudo apt update
PHPV=7.1 && sudo apt install --allow-unauthenticated -y php${PHPV}-fpm php${PHPV}-gd php${PHPV}-json php${PHPV}-mysqlnd php${PHPV}-curl php${PHPV}-intl php${PHPV}-mcrypt php${PHPV}-imagick php${PHPV}-zip php${PHPV}-xml php${PHPV}-mbstring
「OwnCloud」セットアップのために以下のコマンドを実行します。
PHPV=7.1 && apt install --allow-unauthenticated -y php${PHPV}-redis redis-server php${PHPV}-ldap php${PHPV}-smbclient
エキストラ-nginxウェブサーバーをインストール
PHP7.1を使用した基本セットアップでは、以下のコマンドを実行します。
sudo add-apt-repository ppa:nginx/stable
sudo apt update && sudo apt -y install nginx
sudo sed -i 's:access_log /var/log/nginx/access.log;:access_log off;:g' /etc/nginx/nginx.conf
sudo sed -i '/index index.html/c\\tindex index.html index.php index.htm index.nginx-debian.html;' /etc/nginx/sites-available/default
STR='}\n\n\tlocation ~ \.php$ {\n\t\tinclude snippets\/fastcgi-php.conf;\n\t\tfastcgi_pass unix:\/var\/run\/php\/php7.1-fpm.sock;\n\t}'
sudo sed -i "0,/}/s//$STR\n/" /etc/nginx/sites-available/default
sudo service nginx restart
追加-mariadbのmysqlデータベースをインストールする
mysqlデータベースサーバーに対して以下のコマンドを実行します。
RELEASE=`lsb_release -a | tail -1 | cut -f2`
sudo apt install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository "deb [arch=i386,amd64,ppc64el] https://mirrors.evowise.com/mariadb/repo/10.3/ubuntu $RELEASE main"
sudo apt update && sudo apt --allow-unauthenticated -y install mariadb-server
プロンプトが表示されたら、ルートデータベースユーザーのパスワードを設定します。
@pomaの答えは非常によく、私の答えの基になっています。ただし、いくつかの改善点を追加したいと思います。
service
呼び出す代わりに使用sshd
:の'sudo service ssh start'
代わりに'sudo /usr/sbin/sshd -D'
。そうすれば、スクリプトを複数回呼び出しても、最大で1つのsshd
プロセスしかありません。また、を実行する別のスクリプトを使用して簡単に削除できます'sudo service ssh stop'
。sudoersファイルでは、単純に交換する必要がある/usr/sbin/sshd -D
と/usr/sbin/service
。sshd
-D
top
init
sudo
-D
autostartsshd.ps1
し、次の場所に貼り付けますbash -c 'sudo service ssh start'
。スクリプトを実行するには、スクリプトを右クリックしてをクリックしますRun with PowerShell
。別のスタックオーバーフローの質問にも同様の手順があります:https : //superuser.com/a/1114162/182590
それが誰かを助けることを願っています:)
sudo service ssh start
してからbashを閉じると、sshデーモンが終了します。少なくとも、それは私のガイドを書いた瞬間にやったことです。
@Pomaと@Hintronの回答は素晴らしいです。
いくつかのオプションを切り替える必要があるため、Windowsタスクスケジューラでsshタスクを追加する方法の最後のポイントの説明を拡張したいと思います:
直接bash呼び出しに使用されます。vbsやpowershellスクリプトでラップする必要はありません。
@Hintronが説明した理由でサービスコマンドを使用します。さらに、sshdを直接呼び出すとエラーが発生します
特権分離ディレクトリがありません:/ var / run / sshd
そのような場合、sudo visudo
コマンドでこのエントリを追加する必要があります
ALL ALL = (root) NOPASSWD: /usr/sbin/service ssh *
また、すべてのユーザー(最初の列)がsshdを開始または停止できることに注意してください。このWindowsマシンのユーザーが1人だけの場合は、問題ないはずです。
wsl_setup.bat
次の名前のファイルを作成し、コンテンツを追加します
wsl -u root -e sudo service ssh start
wsl -u root -e sudo service nginx start
wsl_setup.bat
Windowsスタートアップフォルダーwindows-10-change-startup-appsにファイルを追加する
Windowsアカウントを再起動してログインします(はい、ログインする必要があります)