Câu trả lời:
Tìm thấy một hướng dẫn cho điều đó bằng cách aseering:
Điều này ban đầu được thảo luận và sắp xếp bởi người dùng github imjakey, fpqc, qris, Therealkenc, Manouchehri và aseering (bản thân tôi) tại đây:
https://github.com/Microsoft/BashOnWindows/issues/612
Lưu ý rằng chạy sshd có ý nghĩa bảo mật. Cho đến khi mô hình bảo mật của WSL có thời gian nướng lâu hơn, bạn nên cho rằng bất kỳ ai có thể ssh vào hộp Windows của bạn đều có quyền thực hiện bất kỳ lệnh nào khi người dùng Windows chạy sshd, bất kể cấp phép Linux. (Quyền có thể hạn chế hơn so với thực tế, nhưng mô hình bảo mật ban đầu của WSL không nhằm mục đích rất tinh vi.)
Cố gắng tổng hợp các hướng dẫn từ github:
sudo dpkg-reconfigure
openssh-server
trong shell bashsudo nano /etc/ssh/sshd_config
; chỉnh sửa UsePrivilegeSeparation yes
dòng để đọc
UsePrivilegeSeparation no
. (Điều này là cần thiết bởi vì
UsePrivilegeSeparation
sử dụng tòa nhà chroot()
, mà WSL hiện không hỗ trợ.)/etc/ssh/sshd_config
, bạn có thể chọn thay đổi
PasswordAuthentication no
thành PasswordAuthentication yes
. Nếu không, bạn sẽ phải thiết lập các khóa SSH./etc/ssh/sshd_config
và thoát.Chạy sudo visudo
để chỉnh sửa tập tin sudoers. Thêm dòng
$USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
thay thế "$ USER" bằng tên người dùng Linux của bạn. Lưu và thoát. Nếu visudo phàn nàn rằng các thay đổi của bạn không hợp lệ, hãy sửa chúng cho đến khi nó báo cáo rằng chúng hợp lệ; nếu không bạn có thể phá sudo trên hệ thống của bạn!
Tạo một tệp văn bản
autostartssh.vbs
trong Windows có chứa các mục sau:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
autostartssh.vbs
trên hệ thống khởi động. Sử dụng wscript.exe
làm lệnh để chạy và vị trí tập lệnh VBS làm tham số.Và đó là - máy tính Windows của bạn sẽ chạy máy chủ Linux openssh!
UsePrivilegeSeparation = yes
, ngoại trừ việc người ta cũng cần chạy sudo /bin/mkdir -p /var/run/sshd
(để tạo các thư mục phân tách đặc quyền) trước khi bắt đầu sshd. Hiện tại, WLS có hỗ trợ chroot () không, có một cách giải quyết khác trong nguồn openssh hay là = No
cài đặt thêm về khuyến nghị an toàn? Ngoài ra, tác vụ windows dường như chỉ hoạt động với tôi nếu người dùng của tôi đăng nhập.
/etc/ssh/sshd_config
đó đọc Port 22
và chuyển sang Port 8822
. Một lý do cho điều này là Windows chạy một số quy trình SSH trên 22. Tôi đã thấy các đề xuất nói rằng không có vấn đề gì với việc vô hiệu hóa điều đó, nhưng tôi thấy dễ dàng nhất là chỉ cần chuyển đổi cổng WSL SSH.
Tôi cần phải làm điều tương tự.
Đây là cách khởi động hệ thống con Ubuntu Linux với tất cả các dịch vụ của cron khi khởi động Windows và cung cấp phương tiện để 'khởi động lại' hệ thống con Linux.
Tôi đang lưu trữ thành công cơ sở dữ liệu openssh-server, nginx & mariadb trên máy chủ của chúng tôi.
Cài đặt hệ thống con Linux
Dán:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Cài đặt Ubuntu từ Windows Store.
Xóa dấu nhắc mật khẩu sudo (bắt buộc)
Dán:
sudo sed -i "s/%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" /etc/sudoers
Cho phép đăng nhập mật khẩu SSH (tùy chọn)
Dán:
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 autologin khi bắt đầu (bắt buộc nếu bạn có mật khẩu hoặc RDP trong)
Duyệt đến
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Tạo một chuỗi mới DefaultPassword
và viết mật khẩu của người dùng làm giá trị.
Chạy vòng lặp bash / cron khi bắt đầu
linux.bat
trongshell:startup
Dán:
C:\Windows\System32\bash.exe -c 'while [ true ]; do sudo /usr/sbin/cron -f; done'
Thêm ứng dụng / dịch vụ để khởi động trên cron
sudo crontab -e
Nối các ứng dụng khởi động như 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
Lưu và thoát : ctrlx, sau đó nhấn yvà enter.
Khởi động lại hệ thống con Linux mà không cần khởi động lại Windows
Mở bash hoặc SSH trong
sudo service ssh restart
Điều này sẽ đóng phiên bản hiện tại và tạo một cron mới áp dụng.
Bổ sung - Cài đặt PHP 7.1 (không hoàn toàn đơn giản)
Chạy các lệnh dưới đây để thiết lập tiêu chuẩn khá:
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
Chạy lệnh bên dưới để thiết lập 'ownCloud':
PHPV=7.1 && apt install --allow-unauthenticated -y php${PHPV}-redis redis-server php${PHPV}-ldap php${PHPV}-smbclient
Thêm - Cài đặt máy chủ web nginx
Chạy các lệnh bên dưới để thiết lập cơ sở với 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
Thêm - Cài đặt cơ sở dữ liệu mysql của mariadb
Chạy các lệnh dưới đây cho một máy chủ cơ sở dữ liệu 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
Khi được nhắc, hãy đặt mật khẩu người dùng cơ sở dữ liệu gốc.
Câu trả lời của @poma là rất tốt, và đó là câu trả lời của tôi dựa trên. Tôi muốn thêm một số cải tiến cho nó, mặc dù:
service
thay vì gọi sshd
trực tiếp: 'sudo service ssh start'
thay vì 'sudo /usr/sbin/sshd -D'
. Theo cách đó, ngay cả khi bạn gọi tập lệnh nhiều lần, sẽ chỉ có tối đa một sshd
quy trình. Ngoài ra, thật dễ dàng để giết nó với một kịch bản khác chạy 'sudo service ssh stop'
. Trong tệp sudoers, bạn chỉ cần thay thế /usr/sbin/sshd -D
bằng /usr/sbin/service
.sshd
trực tiếp, hãy loại bỏ -D
tùy chọn này , vì điều đó sẽ đặt một quá trình ở phía trước vô thời hạn. Nếu bạn không tin tôi, chỉ cần làm top
và bạn sẽ thấy một init
và một sudo
quy trình cho mỗi lần bạn gọi kịch bản. Đừng quên xóa -D
tùy chọn trong tệp sudoers!autostartsshd.ps1
và dán vào sau : bash -c 'sudo service ssh start'
. Để thực thi kịch bản, nhấp chuột phải vào nó và nhấp vào Run with PowerShell
.Một câu hỏi tràn ngăn xếp khác có các bước tương tự: /superuser//a/1114162/182590
Mong rằng sẽ giúp được ai đó :)
sudo service ssh start
và sau đó đóng bash, nó sẽ giết ssh daemon. Ít nhất đó là những gì nó đã làm tại thời điểm viết hướng dẫn của tôi.
đưa bash -c "echo [password] | service ssh start"
vào tập lệnh khởi động Windows và sử dụng mật khẩu sudo của riêng bạn để thay thế [mật khẩu]
sudo
từ khóa cần thiết mà câu của bạn ngụ ý). Điều này chỉ không hoạt động. Không phải là bạn nên lưu trữ mật khẩu của mình bằng mọi cách!
Câu trả lời @Poma và @Hintron rất tuyệt.
Tôi muốn mở rộng mô tả về điểm cuối cùng về cách thêm tác vụ ssh trong Trình lập lịch tác vụ Windows vì nó yêu cầu chuyển đổi một số tùy chọn:
Nó được sử dụng gọi bash trực tiếp. Không cần phải bọc nó trong các tập lệnh vbs hoặc powershell.
Tôi sử dụng lệnh dịch vụ vì lý do mà @Hintron giải thích. Ngoài ra lời gọi sshd trực tiếp cho lỗi
Thiếu thư mục phân tách đặc quyền: / var / run / sshd
Trong trường hợp như vậy, nó nên được thêm vào mục này bằng sudo visudo
lệnh
ALL ALL = (root) NOPASSWD: /usr/sbin/service ssh *
Cũng lưu ý rằng ở đây tất cả người dùng (cột đầu tiên) có thể bắt đầu hoặc dừng sshd. Nếu bạn chỉ là một người dùng của máy Windows này, thì nó sẽ ổn thôi.
Tạo một tệp có tên wsl_setup.bat
và thêm nội dung như sau
wsl -u root -e sudo service ssh start
wsl -u root -e sudo service nginx start
Thêm wsl_setup.bat
tệp vào thư mục khởi động windows windows-10-change-startup-apps
Khởi động lại và đăng nhập tài khoản windows của bạn (vâng, bạn cần đăng nhập)