CIFS sobre SSH usando ferramentas padrão do Windows 10

Sou preguiçoso e por isso gosto quando tudo é organizado convenientemente, sem gestos desnecessários. Às vezes tenho preguiça de fazer isso confortavelmente.



Uma vez que precisei organizar o acesso ao servidor via protocolo SMB e em busca de uma solução me deparei com o seguinte artigo: Montando seu diretório home Nikhef usando SSH para Windows 8 . Foi uma solução simples e fácil de usar que Putty usou. Um pouco mais tarde, tive que configurar essa solução em outro computador e percebi que o Putty era supérfluo aqui, pois o cliente ssh embutido baseado em OpenSSH apareceu no Windows 10.



Sob o corte - um esquema idêntico, usando apenas OpenSSH no Windows 10.



Meu esquema é organizado da seguinte forma:



  1. O Samba está sendo executado no servidor, a pasta raiz com sites é compartilhada em nome do usuário www-data. Acesso ao servidor apenas via ssh com autorização de chave. Servidor atrás de NAT, porta encaminhada apenas para ssh.
  2. No processo de login em uma conta em uma máquina doméstica no Windows 10 por meio do sistema OpenSSH integrado, uma conexão é estabelecida com o servidor com autorização por chave.
  3. A porta 445 da máquina remota é canalizada para a porta local 44445 do adaptador de loopback de rede disponível em 10.255.255.1
  4. No adaptador de loopback 10.255.255.1, a porta 44445 é proxy para o local 445. Portanto, ao conectar-se a \\ 10.255.255.1 \, uma bola de arquivo remoto é aberta (que, se necessário, é montada como uma unidade de rede).


Tudo isso é automático - a preguiça triunfa. Seguro, rápido e com aparência nativa. Qualquer editor pode abrir e editar arquivos em um servidor remoto, bem como no meu local - sem problemas para baixar os arquivos editados e definir-lhes as permissões necessárias. Dito isso, não há problemas de segurança com o Samba.



Então - primeiro passo a passo:



Lado do WINDOWS



OpenSSH. Windows 10 Windows Server 2019 SSH OpenSSH. . –



ssh




— "", .



1.



loopback- . .



hdwwiz.exe




« » ( Windows 10 Pro).



«» -> « , » -> « » -> «Microsoft –> Microsoft KM-Test» -> «»



, , devcon.exe, .



CMD ( ).



netsh interface show interface




. Ethernet 2.









:



netsh interface ip set address name="Ethernet 2" source=static address=10.255.255.1 mask=255.255.255.0


10.255.255.1



, TCP- 445, Windows lanmanserver . lanmanserver portproxy, .



( «start=» !!!):



sc config lanmanserver start= demand
sc config iphlpsvc start= auto


10.255.255.1 44445 445



netsh interface portproxy add v4tov4 listenaddress=10.255.255.1 listenport=445 connectaddress=10.255.255.1 connectport=44445


, lanmanserver .



loopback-,



netstat -an | find ":445 "




TCP    10.255.255.1:445    0.0.0.0:0       LISTENING


. "0.0.0.0:445" — - .



netsh interface portproxy show v4tov4


2.



. , .



mkdir %APPDATA%\CIFSoverSSH
cd %APPDATA%\CIFSoverSSH


ssh- ( , : cifsoversshkey)



ssh-keygen -t rsa -N "" -f cifsoversshkey 


. , OpenSSH UNPROTECTED PRIVATE KEY FILE! . , Windows. GUI, . Windows :



icacls cifsoversshkey /RESET
icacls cifsoversshkey /grant _:F /inheritance:r


, .



icacls cifsoversshkey 


, OpenSSH !



cifsoverssh.cmd :



call cmd /c start "" /B C:\Windows\System32\OpenSSH\ssh.exe user@111.111.111.111 -p remoteport -i %APPDATA%\CIFSoverSSH\cifsoversshkey -L 10.255.255.1:44445:localhost:445 -N -o "StrictHostKeyChecking=no"


:

user@111.111.111.111 linux @



3.



: powershell -nologo -noninteractive -windowStyle hidden -command "%APPDATA%\CIFSoverSSH\cifsoversshkey.cmd"

powershell . CMD , , .



:



schtasks /CREATE /RU %username% /TN "CIFS over SSH" /TR "powershell.exe -nologo -noninteractive -windowStyle hidden -command %APPDATA%\CIFSoverSSH\cifsoversshkey.cmd" /SC ONLOGON /DELAY 0000:10 /IT /RL highest


Windows .



Linux



, ssh- .



ssh windows-



C:\Windows\System32\OpenSSH\ssh.exe user@111.111.111.111 -p remoteport


, ~/.ssh/authorized_keys ( – ).



mkdir ~/.ssh && touch ~/.ssh/authorized_keys


, windows- ( %APPDATA%\CIFSoverSSH\cifsoversshkey.pub). . , .



Samba ( Debian)



apt update && apt install samba




mv /etc/samba/smb.conf /etc/samba/smb.conf.old
touch /etc/samba/smb.conf


:



[global]
realm = webserver
server string = Web server
workgroup = WORKGROUP
# Setup charsets
dos charset = cp1251
unix charset = utf8
# Disable printers
load printers = No
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
# Setup logging
log file = /var/log/smbd.log
max log size = 50
max xmit = 65536
debug level = 1
# Setup daemon settings
domain master = No
preferred master = Yes
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=65536 SO_RCVBUF=65536 SO_KEEPALIVE
os level = 65
use sendfile = Yes
dns proxy = No
dont descend = /proc,/dev,/etc
deadtime = 15
# Enable synlinks
unix extensions = No
wide links = yes
follow symlinks = yes

# Securtity settings
security = user
map to guest = Bad Password
guest account = nobody
create mask = 0664
directory mask = 0775
hide dot files = yes
client min protocol = SMB2
client max protocol = SMB3
[ShareName]
comment = Sites folder
path = /home/web
force user = www-data
force group = www-data
read only = No
guest ok = Yes
writable = yes
create mask = 0664
directory mask = 2775


. ShareName. Path = , . force user force group linux-, . - – www-data



Samba



systemctl restart smbd


Windows



exit


. windows ( ).



\\10.255.255.1\ShareName — .




All Articles