답변:
aseering하여 그에 대한 자습서를 찾았습니다.
이것은 원래 github 사용자 imjakey, fpqc, qris, therealkenc, Manouchehri 및 aseering (myself)에 의해 논의되고 정렬되었습니다.
https://github.com/Microsoft/BashOnWindows/issues/612
sshd를 실행하면 보안에 영향을 미칩니다. WSL의 보안 모델이 더 오래 구워 질 때까지 Windows 수준으로 ssh 할 수있는 사람이라면 누구나 Linux 수준의 권한에 관계없이 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
. 이것의 한 가지 이유는 22에서 일종의 SSH 프로세스를 실행하는 Windows입니다. 나는 그것을 비활성화하는 데 아무런 문제가 없다는 제안을 보았지만 WSL SSH 포트를 전환하는 것이 가장 쉽다는 것을 알았습니다.
나는 똑같은 일을해야했습니다.
다음은 Windows 부팅시 모든 cron 서비스를 사용하여 Ubuntu Linux 하위 시스템을 부팅하고 Linux 하위 시스템을 '재부팅'하는 방법을 제공하는 방법입니다.
서버에서 openssh-server, nginx & mariadb 데이터베이스를 성공적으로 호스팅하고 있습니다.
리눅스 서브 시스템 설치
풀:
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, 다음 Enter 키를 눌러 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'
. 이렇게하면 스크립트를 여러 번 호출하더라도 최대 하나의 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
.또 다른 스택 오버플로 질문에는 비슷한 단계가 있습니다. /superuser//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 시스템 사용자가 한 명인 경우에는 문제가 없습니다.
다음 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 계정을 다시 시작하고 로그인하십시오 (예, 로그인해야 함)