Windows 시작 시 Linux 하위 시스템(Windows의 Ubuntu의 Bash)에서 SSH 서버를 시작하고 싶습니다. 문제는 Bash 창을 닫으면 모든 Linux 프로세스가 종료된다는 것입니다.
bash 창 없이 백그라운드에서 Linux 프로세스를 영구적으로 실행하는 방법이 있습니까?
답변1
다음을 통해 이에 대한 튜토리얼을 찾았습니다.
이것은 원래 github 사용자 imjakey, fpqc, qris, therealkenc, Manouchehri 및 aseering(나 자신)이 여기에서 논의하고 정리했습니다.
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
변경하도록 선택할 수 있습니다 . 그렇지 않으면 SSH 키를 설정해야 합니다.PasswordAuthentication no
PasswordAuthentication yes
- 저장
/etc/ssh/sshd_config
및 종료. sudo visudo
sudoers 파일을 편집하려면 실행하세요 . 라인을 추가하세요$USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
"$USER"를 Linux 사용자 이름으로 바꿉니다. 저장 및 종료. visudo가 변경 사항이 유효하지 않다고 불평하는 경우 변경 사항이 유효하다고 보고될 때까지 수정하세요. 그렇지 않으면 시스템에서 sudo를 중단할 수 있습니다!
- Windows 측에서는 포트 22에서 들어오는 트래픽을 허용하도록 Windows 방화벽(및 실행 중인 타사 방화벽)을 편집합니다. 이는 매우 안전한 설정이 아니기 때문에 집에서 들어오는 트래픽만 허용하는 것이 좋습니다( 개인) 및 도메인 네트워크(공용 인터넷이 아님)
autostartssh.vbs
다음을 포함하는 Windows에서 텍스트 파일을 만듭니다 .set ws=wscript.createobject("wscript.shell") ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
- 스크립트를 두 번 클릭합니다. SSHD가 시작되어야 합니다. Windows 시스템에 SSH로 접속할 수 있어야 합니다.
- Windows의 작업 스케줄러를 엽니다.
autostartssh.vbs
시스템 부팅 시 실행되는 작업을 추가합니다 .wscript.exe
실행할 명령으로 사용 하고 매개변수로 VBS 스크립트 위치를 사용합니다.
그리고 그게 전부입니다. Windows 컴퓨터는 Linux openssh 서버를 실행해야 합니다!
답변2
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-변경-시작-앱Windows 계정을 다시 시작하고 로그인하세요. (예, 로그인해야 합니다.)
답변3
나도 같은 일을 해야 했어요.
다음은 Windows 부팅 시 모든 cron 서비스를 사용하여 Ubuntu Linux 하위 시스템을 부팅하고 Linux 하위 시스템을 '재부팅'하는 방법을 제공하는 방법입니다.
우리 서버에서 openssh-server, nginx 및 mariadb 데이터베이스를 성공적으로 호스팅하고 있습니다.
Linux 하위 시스템 설치
- 관리자 권한으로 Powershell 열기
반죽:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Windows 스토어에서 Ubuntu를 설치합니다.
sudo 비밀번호 프롬프트 제거(필수)
- bash 열기(Linux 하위 시스템이 이를 설치함)
반죽:
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가 있는 경우 필요)
- 넷플위즈 열기
- '사용자는 사용자 이름과 비밀번호를 입력해야 합니다...'를 선택 취소합니다.
- 관리자로 regedit 열기
찾아보기
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'
크론 시작 시 앱/서비스 추가
- 배쉬 열기
sudo crontab -e
- nano(또는 저장 방법을 알고 있는 편집기)를 선택하세요.
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누릅니다 .yenter
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
메시지가 표시되면 루트 데이터베이스 사용자 비밀번호를 설정합니다.
답변4
@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
됩니다 . sudoers 파일에서도 해당 옵션을 제거하는 것을 잊지 마세요 !init
sudo
-D
- 사용파워셸VBS 대신! .라는 파일을 만들고
autostartsshd.ps1
다음을 붙여넣습니다bash -c 'sudo service ssh start'
. 스크립트를 실행하려면 해당 스크립트를 마우스 오른쪽 버튼으로 클릭하고 을 클릭하세요Run with PowerShell
.
또 다른 스택 오버플로 질문에는 비슷한 단계가 있습니다.https://superuser.com/a/1114162/182590
누군가에게 도움이 되길 바랍니다 :)