Cifs over ssh штатными средствами windows 10

Я ленивый и потому люблю когда все организовано удобно, без лишних телодвижений. Иногда перебарываю лень, для того чтобы сделать удобно. Однажды потребовалось мн...

Я ленивый и потому люблю когда все организовано удобно, без лишних телодвижений. Иногда перебарываю лень, для того чтобы сделать удобно.

Однажды потребовалось мне организовать доступ к серверу по протоколу SMB и в поиске решения я наткнулся на следующую статью: Mounting your Nikhef home directory using SSH for Windows 8. Это было простое и удобное решение, которое использовало Putty. Чуть позже мне пришлось настраивать это решение на другом компьютере и я понял, что Putty тут лишний с тех пор как в Windows 10 появился встроенный ssh-клиент на основе OpenSSH.

Под катом — идентичная схема, только с использованием OpenSSH под Windows 10.

У меня схема организована следующим образом:

  1. На сервере запущена Samba, от имени пользователя www-data расшарена корневая папка с сайтами. Доступ к серверу только через ssh с авторизацией по ключу. Сервер за NATом, порт проброшен только для ssh.
  2. В процессе входа в аккаунт на домашней машине на Windows 10 через встроенный в систему OpenSSH устанавливается соединение с сервером с авторизацией по ключу.
  3. Туннелируется порт 445 удаленной машины на локальный порт 44445 сетевого loopback-адаптера доступного по адресу 10.255.255.1
  4. На loopback-адаптере 10.255.255.1 порт 44445 проксируется на локальный 445. Таким образом при подключении к \10.255.255.1 открывается удаленная шара с файлами (которая, при необходимости монтируется как сетевой диск).

Всё это автоматом – лень торжествует. Безопасно, быстро и нативно выглядит. Любым редактором могу открывать и править файлы на удаленном сервере как у себя на локальном — без проблем с загрузкой правленых файлов и установкой им необходимых разрешений. При этом нет проблем с безопасностью Samba.

Итак – сперва по шагам:

На стороне 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:WindowsSystem32OpenSSHssh.exe user@111.111.111.111 -p remoteport -i %APPDATA%CIFSoverSSHcifsoversshkey -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%CIFSoverSSHcifsoversshkey.cmd»
Это позволит запускать наш пакетный файл через powershell без открытия окна. Если запускать его через CMD будет открываться черное окно терминала и будет висеть все время, пока соединение будет установлено, а это неудобно и некрасиво.

Для автоматизации запуска при входе в систему можно создать задачу в планировщике:

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

На стороне клиентского компьютера Windows все приготовления были закончены.

Настройка Linux сервера

Предполагается, что ssh-сервер был предварительно настроен и включена авторизация по ключу.

Подключаемся по ssh из командной строки на windows-машине

C:WindowsSystem32OpenSSHssh.exe user@111.111.111.111 -p remoteport

В домашней папке пользователя, от имени которого мы будем авторизовываться при создании туннеля ищем файл ~/.ssh/authorized_keys (если файл отсутствует – создадим его).

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

Теперь необходимо в этот файл вставить содержимое нашего файла публичного ключа, созданного на нашей windows-машине (файл %APPDATA%CIFSoverSSHcifsoversshkey.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 symlinks
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.1ShareName — Можно даже монтировать её как сетевой диск.

CIFS-over-SSH

Sometimes there is a need to mount a remote Windows/Samba directory, but all you have is
an SSH connection to a remote server close to the fileserver.
This tutorial tries to explain how you can set up these Windows shares on Windows 10 & 11.

The concept behind mounting shares using SSH is this:

  • The SSH protocol has a feature known as port-forwarding. This feature allows you to forward all
    traffic from a TCP/IP network port on your local computer to another port on another computer at
    the «other» side of the SSH connection.
  • The Windows File Sharing protocol, a.k.a.CIFS, uses TCP/IP port 445 to communicate between the
    client and the server. Older versions of Windows also allowed the use of TCP/IP port 139 to
    communicate between the client and the server.
  • Unfortunately, it turns out to be quite hard to redirect local port 445 to another computer, as
    the OS also wants this port all for itself. However, with some special portproxy rules it is
    still possible to grab port 445 before the OS does.
  • Thus, by configuring SSH in just the right way, we can redirect all traffic from the TCP/IP port 445
    on your local computer to the remote Windows file server.
  • The result is that this will magically allow you to create a network share to view the remote directory
    on your home computer.

This tutorial has been tested on Windows 2000, XP, Vista, 7, 8, 10 and 11.

Note This tutorial does not work on Windows Server 2016 or 2019. If someone finds a way to make
it work for Windows Server editions please let me know!

Types of access

For Windows 10+, the tutorial is now split into multiple parts, depending on the type of remote server
access that is required:

  • Access to a single remote host, no Kerberos
  • Access to multiple remote hosts, no Kerberos
  • Access to multiple remote hosts, including DFS and Kerberos

Legacy tutorials

The following legacy tutorial pages are also available as single HTML pages:

  • Windows 10 with the built-in OpenSSH client
  • Windows 10 with the PuTTY SSH client
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows XP/2000

CIFS-over-SSH: Access to a single remote host, no Kerberos

(tested Win10 1809,1909,20H2,21H1,21H2,22H2 and Win11 22H2)

Introduction

This tutorial contains screenshots for the English version of Windows 10 and Windows 11.
Please note that in some screenshots references are made to ‘10.255.255.1’.
That is because these screenshots are shared with the Multi-host
version.

To be able to mount a Windows share on a single remote host over SSH we will need

  • Administrator access to the local computer, including the ability to
    elevate privileges. If you don’t know what I am talking about then
    stop reading right here.
  • One real or virtual network adapter, bound to the Client for Microsoft Networks
    driver.

Normally you should already have such an adapter, as otherwise you
would not be able to mount any Windows shares.

Note
With Windows 10 & 11, it is no longer required to add a Loopback adapter to if you need
access a single remote host. That is the main difference between this tutorial
and the Multi-host version.

This part of the tutorial is split into the following steps:

  1. Starting with Windows 10 update 1903, the Windows 10 feature «SMB 1.0» must be
    turned off.

  2. Furthermore, a few Windows system services need to be
    tweaked.

  3. Next, reboot Windows to verify that we’ve been able to
    grab port 445 and to see if the lanmanserver service is up and running.

  4. Finally, we launch a special OpenSSH session and
    mount our remote share.

  5. For those wishing to undo the above steps follow the
    instructions at the bottom of this page.

Disabling the ‘SMB 1.0’ Windows feature

NOTE: for a lot of users this does not seem to apply. I have left this step in the tutorial,
as it is good security practice anyways.

Starting with Windows 10 update 1903 we need to disable the Windows feature SMB 1.0:

  • Go to the Control Panel->Programs->Programs and Features and select
    Turn Windows features on or off

  • A list of features pops up:

    FeatureSMB 1.0

    Scroll down and deselect the feature SMB 1.0/CIFS File Sharing support

  • Now close this control panel item.

(Thanks to Michael Uhlenberg for pointing this out)

Tweaking the ‘LanmanServer’ service

First, we need to tweak a Windows system service to overcome the thing that
Microsoft broke. The root cause of the problem is that we need to access the
file share using TCP port 445. However, when Windows boots, this port is
grabbed by the system lanmanserver service for all interfaces.

If we can insert a portproxy rule to grab port 445 for the loopback
interface before the lanmanserver service starts, we can circumvent this.
Be aware that portproxy rules are executed by the iphlpsvc service.

By adding a dependency to the lanmanserver service we ensure that the
iphlpsvc service is always launched before the lanmanserver
service. This section explains how to do this:

  • Start a console window with elevated (Administrator) privileges.
  • Get the list of service dependencies by typing:

You should see output similar to this:

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: lanmanserver
        TYPE               : 20  WIN32_SHARE_PROCESS 
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:WINDOWSsystem32svchost.exe -k netsvcs -p
        LOAD_ORDER_GROUP   : 
        TAG                : 0
        DISPLAY_NAME       : Server
        DEPENDENCIES       : SamSS
                           : Srv2
        SERVICE_START_NAME : LocalSystem

Alternatively, you can use the Powershell command

  Get-Service -DisplayName server -RequiredServices
  • Note down the names of the services on which the Server service
    (also known as lanmanserver) depends. In this case, these services
    are samss and srv2 (the service names are case independent).

  • Change the list of services on which the lanmanserver services depends
    by adding the iphlpsvc service to the list of required services found in the
    previous step:

  sc config lanmanserver depend= samss/srv2/iphlpsvc

NOTES:

  • The space after the "depend= " is required!

  • Dependencies are separated using slashes («/»).

  • Next we add a portproxy rule to reroute TCP port 445 to a port of
    our choosing. For this tutorial, I choose 44445:

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

NOTE:
The connectaddress must be identical to the listenaddress

If all went well you should see something like

localhost-portproxy

The portproxy rule is persistent, so there should be no need to repeat
this step after a reboot.

Reboot and verify

Of course, now that we have made modifications to the ‘Required Services’ dependency of the
‘LanmanServer’ service we have to reboot Windows before proceeding.

  • Reboot Windows.
  • Verify that the portproxy was applied successfully by checking the open ports
    on the system. Type in a command console
  netstat -an | find ":445"

You should see something like:

C:WINDOWSsystem32>netstat -an | find ":445"
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    127.0.0.1:445          0.0.0.0:0              LISTENING
  TCP    [::]:445               [::]:0                 LISTENING

If you see only0.0.0.0:445‘ instead then the ‘portproxy’ rule was
not applied correctly. Verify that the right ‘portproxy’ rule was used

   netsh interface portproxy show v4tov4

and verify that the IpHlpSvc service is running at Windows startup using

Another reason for the ‘port grabbing’ to fail could be the LanmanWorkstation service
running at Windows startup. If so, try giving it the same treatment as LanmanServer.
However, on the Windows 10 & 11 installations I tested this service was running at system startup
without causing any problems.

  • After Windows comes up and you have logged in, check the status of the ‘lanmanserver’ service. Open
    a command console (no privilege elevation is required) and type

The ‘LanmanServer’ service should be in the state Running.
If it is not, then follow
these steps
to create a task using the Task Schedule to start it at system startup.

If the port is not grabbed correctly (i.e. no 127.0.0.1:445 in the netstat output)
then try the
Old driver tweak
instructions to see if that works better for you.

Putting it all together

Now that we have configured both our loopback adapter we can put it all together by launching
a special OpenSSH connection and mounting the shares from the remote server fs1.example.org
as a Windows share:

  • Launch an OpenSSH session with some special port-forwarding rules and login on
    login.example.org as normal. Open a Command console or terminal and type:
  ssh -v -N -n -L 127.0.0.1:44445:fs.example.org:445 
               <Your-userid>@login.example.org

Yes, there are lots of colons in that -L option but you need them all.

  • The first time you start the command with the special
    port forwarding rules, you will be (probably) be prompted by the Windows
    Defender Firewall that it has blocked some features:

    sshFirewall

    Allow access to at least Public networks by ticking the checkbox,
    then click on Allow access as otherwise the port-forwarding will not work.

  • Make sure port-forwarding is working properly by checking the (verbose) log:

    sshLog1

    Make sure the line

  debug1: Local connections to 127.0.0.1:44445 forwarded to remote address fs.example.org:445
is present before continuing.
  • Go to Start->Run and type \127.0.0.1
  • In the Console window you should now see a line
  debug1: Connection to port 44445 forwarding to fs.example.org:445 requested.

as in the following screenshot:

sshLog2

If this is present then you can decrease the debug logging of the OpenSSH session
by removing the -v option from the command line:

  ssh -N -n -L 127.0.0.1:44445:fs.example.org:445 <Your-userid>@login.example.org

Note
If you carefully inspect the above screenshot then you will notice that I am using
the (built-in) OpenSSH Authentication Agent in combination with an SSH public/private keypair to
avoid having to type in my password every time.

  • You will be prompted to authenticate yourself:

    networkLogin

    For the Username, fill in the domain DOMAIN followed by your userid.

  • You should now see your remote share in Windows Explorer!

Mapping a network drive

To make life even easier it might be handy to map a network drive to your remote share:

  • Start Windows Explorer and choose Tools->Map Network Drive.

  • In the next screen, fill in:

    mapNetworkDrive

  • Choose an available drive letter.

  • Do NOT click on Browse but type in as the Folder name: \127.0.0.1<directory>

  • Enable the checkbox in front of Connect using different credentials.

  • Now click on Finish.

  • In the next screen, fill in your Windows userid:

    networkLogin

    For the Username, fill in the domain DOMAIN followed by your userid.

  • In the next screen, click on Finish to complete the network drive mapping.

  • You should now see a new drive letter appear in the Folders tree-list
    in Windows Explorer. Click on it to verify that you are indeed viewing the remote
    share.

Control+Z! Undo! Undo!

For those wishing to undo the CIFS-over-SSH trick follow these steps:

  • Start a console window with elevated (Administrator) privileges.
  • Restore the dependencies of the lanmanserver service by typing
  sc config lanmanserver depend= samss/srv2

NOTES

  • the list of required services may be slightly different on your system.
    Use the PowerShell command from
    this section
    to obtain a list.
  • the space after the depend= !
  • Remove the portproxy rule by typing
  netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=445
  • Remove the firewall rule to allow SSH to do portforwarding from 127.0.0.1:
    • Go to the Windows Control Panel

    • Select System and Security, then Windows Defender Firewall

    • Select Allowed apps, and scroll down in the list to
      SSH Telnet and Rlogin client and deselect the permissions

      firewallAllowedApps

      Then press OK

  • Start a Device Manager by typing
  • Expand the ‘Network Adapters’, right-click on Loopback adapter and select
    Uninstall.
  • If necessary, use the ‘Task Scheduler’ from the ‘Administrative Tasks’ menu to delete the
    task ‘Start LanmanServer driver’.

CIFS-over-SSH: Access to a single remote host, no Kerberos

(tested Win10 1809,1909,20H2,21H1,21H2,22H2 and Win11 22H2)

Introduction

This tutorial contains screenshots for the English version of Windows 10 and Windows 11.
Please note that in some screenshots references are made to ‘10.255.255.1’.
That is because these screenshots are shared with the Multi-host
version.

To be able to mount a Windows share on a single remote host over SSH we will need

  • Administrator access to the local computer, including the ability to
    elevate privileges. If you don’t know what I am talking about then
    stop reading right here.
  • One real or virtual network adapter, bound to the Client for Microsoft Networks
    driver.

Normally you should already have such an adapter, as otherwise you
would not be able to mount any Windows shares.

Note
With Windows 10 & 11, it is no longer required to add a Loopback adapter to if you need
access a single remote host. That is the main difference between this tutorial
and the Multi-host version.

This part of the tutorial is split into the following steps:

  1. Starting with Windows 10 update 1903, the Windows 10 feature «SMB 1.0» must be
    turned off.

  2. Furthermore, a few Windows system services need to be
    tweaked.

  3. Next, reboot Windows to verify that we’ve been able to
    grab port 445 and to see if the lanmanserver service is up and running.

  4. Finally, we launch a special OpenSSH session and
    mount our remote share.

  5. For those wishing to undo the above steps follow the
    instructions at the bottom of this page.

Disabling the ‘SMB 1.0’ Windows feature

NOTE: for a lot of users this does not seem to apply. I have left this step in the tutorial,
as it is good security practice anyways.

Starting with Windows 10 update 1903 we need to disable the Windows feature SMB 1.0:

  • Go to the Control Panel->Programs->Programs and Features and select
    Turn Windows features on or off

  • A list of features pops up:

    FeatureSMB 1.0

    Scroll down and deselect the feature SMB 1.0/CIFS File Sharing support

  • Now close this control panel item.

(Thanks to Michael Uhlenberg for pointing this out)

Tweaking the ‘LanmanServer’ service

First, we need to tweak a Windows system service to overcome the thing that
Microsoft broke. The root cause of the problem is that we need to access the
file share using TCP port 445. However, when Windows boots, this port is
grabbed by the system lanmanserver service for all interfaces.

If we can insert a portproxy rule to grab port 445 for the loopback
interface before the lanmanserver service starts, we can circumvent this.
Be aware that portproxy rules are executed by the iphlpsvc service.

By adding a dependency to the lanmanserver service we ensure that the
iphlpsvc service is always launched before the lanmanserver
service. This section explains how to do this:

  • Start a console window with elevated (Administrator) privileges.
  • Get the list of service dependencies by typing:

You should see output similar to this:

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: lanmanserver
        TYPE               : 20  WIN32_SHARE_PROCESS 
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:WINDOWSsystem32svchost.exe -k netsvcs -p
        LOAD_ORDER_GROUP   : 
        TAG                : 0
        DISPLAY_NAME       : Server
        DEPENDENCIES       : SamSS
                           : Srv2
        SERVICE_START_NAME : LocalSystem

Alternatively, you can use the Powershell command

  Get-Service -DisplayName server -RequiredServices
  • Note down the names of the services on which the Server service
    (also known as lanmanserver) depends. In this case, these services
    are samss and srv2 (the service names are case independent).

  • Change the list of services on which the lanmanserver services depends
    by adding the iphlpsvc service to the list of required services found in the
    previous step:

  sc config lanmanserver depend= samss/srv2/iphlpsvc

NOTES:

  • The space after the "depend= " is required!

  • Dependencies are separated using slashes («/»).

  • Next we add a portproxy rule to reroute TCP port 445 to a port of
    our choosing. For this tutorial, I choose 44445:

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

NOTE:
The connectaddress must be identical to the listenaddress

If all went well you should see something like

localhost-portproxy

The portproxy rule is persistent, so there should be no need to repeat
this step after a reboot.

Reboot and verify

Of course, now that we have made modifications to the ‘Required Services’ dependency of the
‘LanmanServer’ service we have to reboot Windows before proceeding.

  • Reboot Windows.
  • Verify that the portproxy was applied successfully by checking the open ports
    on the system. Type in a command console
  netstat -an | find ":445"

You should see something like:

C:WINDOWSsystem32>netstat -an | find ":445"
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    127.0.0.1:445          0.0.0.0:0              LISTENING
  TCP    [::]:445               [::]:0                 LISTENING

If you see only0.0.0.0:445‘ instead then the ‘portproxy’ rule was
not applied correctly. Verify that the right ‘portproxy’ rule was used

   netsh interface portproxy show v4tov4

and verify that the IpHlpSvc service is running at Windows startup using

Another reason for the ‘port grabbing’ to fail could be the LanmanWorkstation service
running at Windows startup. If so, try giving it the same treatment as LanmanServer.
However, on the Windows 10 & 11 installations I tested this service was running at system startup
without causing any problems.

  • After Windows comes up and you have logged in, check the status of the ‘lanmanserver’ service. Open
    a command console (no privilege elevation is required) and type

The ‘LanmanServer’ service should be in the state Running.
If it is not, then follow
these steps
to create a task using the Task Schedule to start it at system startup.

If the port is not grabbed correctly (i.e. no 127.0.0.1:445 in the netstat output)
then try the
Old driver tweak
instructions to see if that works better for you.

Putting it all together

Now that we have configured both our loopback adapter we can put it all together by launching
a special OpenSSH connection and mounting the shares from the remote server fs1.example.org
as a Windows share:

  • Launch an OpenSSH session with some special port-forwarding rules and login on
    login.example.org as normal. Open a Command console or terminal and type:
  ssh -v -N -n -L 127.0.0.1:44445:fs.example.org:445 
               <Your-userid>@login.example.org

Yes, there are lots of colons in that -L option but you need them all.

  • The first time you start the command with the special
    port forwarding rules, you will be (probably) be prompted by the Windows
    Defender Firewall that it has blocked some features:

    sshFirewall

    Allow access to at least Public networks by ticking the checkbox,
    then click on Allow access as otherwise the port-forwarding will not work.

  • Make sure port-forwarding is working properly by checking the (verbose) log:

    sshLog1

    Make sure the line

  debug1: Local connections to 127.0.0.1:44445 forwarded to remote address fs.example.org:445
is present before continuing.
  • Go to Start->Run and type \127.0.0.1
  • In the Console window you should now see a line
  debug1: Connection to port 44445 forwarding to fs.example.org:445 requested.

as in the following screenshot:

sshLog2

If this is present then you can decrease the debug logging of the OpenSSH session
by removing the -v option from the command line:

  ssh -N -n -L 127.0.0.1:44445:fs.example.org:445 <Your-userid>@login.example.org

Note
If you carefully inspect the above screenshot then you will notice that I am using
the (built-in) OpenSSH Authentication Agent in combination with an SSH public/private keypair to
avoid having to type in my password every time.

  • You will be prompted to authenticate yourself:

    networkLogin

    For the Username, fill in the domain DOMAIN followed by your userid.

  • You should now see your remote share in Windows Explorer!

Mapping a network drive

To make life even easier it might be handy to map a network drive to your remote share:

  • Start Windows Explorer and choose Tools->Map Network Drive.

  • In the next screen, fill in:

    mapNetworkDrive

  • Choose an available drive letter.

  • Do NOT click on Browse but type in as the Folder name: \127.0.0.1<directory>

  • Enable the checkbox in front of Connect using different credentials.

  • Now click on Finish.

  • In the next screen, fill in your Windows userid:

    networkLogin

    For the Username, fill in the domain DOMAIN followed by your userid.

  • In the next screen, click on Finish to complete the network drive mapping.

  • You should now see a new drive letter appear in the Folders tree-list
    in Windows Explorer. Click on it to verify that you are indeed viewing the remote
    share.

Control+Z! Undo! Undo!

For those wishing to undo the CIFS-over-SSH trick follow these steps:

  • Start a console window with elevated (Administrator) privileges.
  • Restore the dependencies of the lanmanserver service by typing
  sc config lanmanserver depend= samss/srv2

NOTES

  • the list of required services may be slightly different on your system.
    Use the PowerShell command from
    this section
    to obtain a list.
  • the space after the depend= !
  • Remove the portproxy rule by typing
  netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=445
  • Remove the firewall rule to allow SSH to do portforwarding from 127.0.0.1:
    • Go to the Windows Control Panel

    • Select System and Security, then Windows Defender Firewall

    • Select Allowed apps, and scroll down in the list to
      SSH Telnet and Rlogin client and deselect the permissions

      firewallAllowedApps

      Then press OK

  • Start a Device Manager by typing
  • Expand the ‘Network Adapters’, right-click on Loopback adapter and select
    Uninstall.
  • If necessary, use the ‘Task Scheduler’ from the ‘Administrative Tasks’ menu to delete the
    task ‘Start LanmanServer driver’.

Bat. ssh. передача команд на выполнение

Всем доброго времени суток!

Есть bat-ник для подключения к удаленному хосту через ssh:

start "" "C:blablaputty.exe" login@host -pw password

Он благополучно выполняется и каждый раз я нахожусь в домашней директории. И каждый раз делаю cd bla/bla/bla в ту или иную директорию.

Вопрос: можно ли в bat-нике указать перечень команд, которые должны быть выполнены после подлючения к хосту?

Sshd_config

Аналогично операционным системам семейства Linux, OpenSSH Server в Windows имеет в своем составе особый файл, где хранятся все параметры для выполнения более подробных настроек. Например,  для ограничения входа.

Протокол SSH, помимо работы в интерактивном режиме, поддерживает также разовый запуск команд или скриптов на удаленном сервере.

Запуск службы openssh

После установки функции SSH-сервера нам остается только его запустить:

Start-Service sshd

Опционально можно установить для службы sshd автоматический запуск:

Set-Service -Name sshd -StartupType 'Automatic'

Команды ssh

SSH (Secure Shell) – сетевой протокол для защищенного удаленного управления операционной системой.

Для подключения к удаленному серверу по SSH требуется SSH клиент, например Putty (под Windows). Скачать Putty

Ниже список команд:

Системная информация:

arch или uname -m — отобразить архитектуру компьютера

uname -r — отобразить используемую версию ядра

dmidecode -q — показать аппаратные системные компоненты — (SMBIOS / DMI)

hdparm -i /dev/hda — вывести характеристики жёсткого диска

hdparm -tT /dev/sda — протестировать производительность чтения данных с жёсткого диска

cat /proc/cpuinfo — отобразить информацию о процессоре

cat /proc/interrupts — показать прерывания

cat /proc/meminfo — проверить использование памяти

cat /proc/swaps — показать файл(ы) подкачки

cat /proc/version — вывести версию ядра

cat /proc/net/dev — показать сетевые интерфейсы и статистику по ним

cat /proc/mounts — отобразить смонтированные файловые системы

lspci -tv — показать в виде дерева PCI устройства

lsusb -tv — показать в виде дерева USB устройства

date — вывести системную дату

cal 2007 — вывести таблицу-календарь 2007-го года

date 041217002007.00* — установить системные дату и время ММДДЧЧммГГГГ.СС (МесяцДеньЧасМинутыГод.Секунды)

clock -w — сохранить системное время в BIOS

Остановка системы:

shutdown -h now или init 0 или telinit 0 — остановить систему

shutdown -h hours:minutes & — запланировать остановку системы на указанное время

shutdown -c — отменить запланированную по расписанию остановку системы

shutdown -r now или reboot — перегрузить систему

logout — выйти из системы

Файлы и директории:

cd /home — перейти в директорию ‘/home’

cd .. — перейти в директорию уровнем выше

cd ../.. — перейти в директорию двумя уровнями выше

cd — перейти в домашнюю директорию

cd ~user — перейти в домашнюю директорию пользователя user

cd – — перейти в директорию, в которой находились до перехода в текущую директорию

pwd — показать текущую директорию

ls — отобразить содержимое текущей директории

ls -F — отобразить содержимое текущей директории с добавлением к именам символов, характеризующих тип

ls -l — показать детализированное представление файлов и директорий в текущей директории

ls -a — показать скрытые файлы и директории в текущей директории

ls *[0-9]* — показать файлы и директории содержащие в имени цифры

tree или lstree — показать дерево файлов и директорий, начиная от корня (/)

mkdir dir1 — создать директорию с именем ‘dir1’

mkdir dir1 dir2 — создать две директории одновременно

mkdir -p /tmp/dir1/dir2 — создать дерево директорий

rm -f file1 — удалить файл с именем ‘file1’

rmdir dir1 — удалить директорию с именем ‘dir1’

rm -rf dir1 — удалить директорию с именем ‘dir1’ и рекурсивно всё её содержимое

rm -rf dir1 dir2 — удалить две директории и рекурсивно их содержимое

mv dir1 new_dir — переименовать или переместить файл или директорию

cp file1 file2 — скопировать файл file1 в файл file2

cp dir/* . — копировать все файлы директории dir в текущую директорию

cp -a /tmp/dir1 . — копировать директорию dir1 со всем содержимым в текущую директорию

cp -a dir1 dir2 — копировать директорию dir1 в директорию dir2

ln -s file1 lnk1* — создать символическую ссылку на файл или директорию

ln file1 lnk1 — создать «жёсткую» (физическую) ссылку на файл или директорию

touch -t 0712250000 fileditest — модифицировать дату и время создания файла, при его отсутствии, создать файл с указанными датой и временем (YYMMDDhhmm)

Поиск файлов:

find / -name file1 — найти файлы и директории с именем file1. Поиск начать с корня (/)

find / -user user1 — найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)

find /home/user1 -name “*.bin” — найти все файлы и директории, имена которых оканчиваются на ‘. bin’. Поиск начать с ‘/ home/user1’*

find /usr/bin -type f -atime 100 — найти все файлы в ‘/usr/bin’, время последнего обращения к которым более 100 дней

find /usr/bin -type f -mtime -10 — найти все файлы в ‘/usr/bin’, созданные или изменённые в течении последних 10 дней

find / -name *.rpm -exec chmod 755 ‘{}’ ; — найти все фалы и директории, имена которых оканчиваются на ‘.rpm’, и изменить права доступа к ним

find / -xdev -name “*.rpm” — найти все фалы и директории, имена которых оканчиваются на ‘.rpm’, игнорируя съёмные носители, такие как cdrom, floppy и т.п.

locate “*.ps” — найти все файлы, содержащие в имени ‘.ps’. Предварительно рекомендуется выполнить команду ‘updatedb’

whereis halt — показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу ‘halt’

which halt — отображает полный путь к файлу ‘halt’

Монтирование файловых систем:

mount /dev/hda2 /mnt/hda2 — монтирует раздел ‘hda2’ в точку монтирования ‘/mnt/hda2’. Убедитесь в наличии директории-точки монтирования ‘/mnt/hda2’

umount /dev/hda2 — размонтирует раздел ‘hda2’. Перед выполнением, покиньте ‘/mnt/hda2’

fuser -km /mnt/hda2 — принудительное размонтирование раздела. Применяется в случае, когда раздел занят каким-либо пользователем

umount -n /mnt/hda2 — выполнить размонтирование без занесения информации в /etc/mtab. Полезно когда файл имеет атрибуты «только чтение» или недостаточно места на диске

mount /dev/fd0 /mnt/floppy — монтировать флоппи-диск

mount /dev/cdrom /mnt/cdrom — монтировать CD или DVD

mount /dev/hdc /mnt/cdrecorder — монтировать CD-R/CD-RW или DVD-R/DVD-RW( -)

mount -o loop file.iso /mnt/cdrom — смонтировать ISO-образ

mount -t vfat /dev/hda5 /mnt/hda5 — монтировать файловую систему Windows FAT32

mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share — монтировать сетевую файловую систему Windows (SMB/CIFS)

mount -o bind /home/user/prg /var/ftp/user — «монтирует» директорию в директорию (binding). Доступна с версии ядра 2.4.0. Полезна, например, для предоставления содержимого пользовательской директории через ftp при работе ftp-сервера в «песочнице» (chroot), когда симлинки сделать невозможно. Выполнение данной команды сделает копию содержимого /home/user/prg в /var/ftp/user

Дисковое пространство:

df -h — отображает информацию о смонтированных разделах с отображением общего, доступного и используемого пространства (Прим. переводчика. ключ -h работает не во всех *nix системах)

ls -lSr |more — выдаёт список файлов и директорий рекурсивно с сортировкой по возрастанию размера и позволяет осуществлять постраничный просмотр

du -sh dir1 — подсчитывает и выводит размер, занимаемый директорией ‘dir1’ (Прим. переводчика. ключ -h работает не во всех *nix системах)

du -sk * | sort -rn — отображает размер и имена файлов и директорий, с соритровкой по размеру

rpm -q -a –qf ‘{SIZE}t%{NAME}n’ | sort -k1,1n — показывает размер используемого дискового пространства, занимаемое файлами rpm-пакета, с сортировкой по размеру (fedora, redhat и т.п.)

dpkg-query -W -f=’${Installed-Size;10}t${Package}n’ | sort -k1,1n — показывает размер используемого дискового пространства, занимаемое файлами deb-пакета, с сортировкой по размеру (ubuntu, debian т.п.)

Пользователи и группы:

groupadd group_name — создать новую группу с именем group_name

groupdel group_name — удалить группу group_name

groupmod -n new_group_name old_group_name — переименовать группу old_group_name в new_group_name

useradd -c “Nome Cognome” -g admin -d /home/user1 -s /bin/bash user1 — создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell’а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome

useradd user1 — создать пользователя user1

userdel -r user1 — удалить пользователя user1 и его домашний каталог

usermod -c “User FTP” -g system -d /ftp/user1 -s /bin/nologin user1 — изменить атрибуты пользователя

passwd — сменить пароль

passwd user1 — сменить пароль пользователя user1 (только root)

chage -E 2005-12-31 user1 — установить дату окончания действия учётной записи пользователя user1

pwck — проверить корректность системных файлов учётных записей. Проверяются файлы /etc/passwd и /etc/shadow

grpck — проверяет корректность системных файлов учётных записей. Проверяется файл/etc/group

newgrp [-] group_name — изменяет первичную группу текущего пользователя. Если указать «-», ситуация будет идентичной той, в которой пользователь вышил из системы и снова вошёл. Если не указывать группу, первичная группа будет назначена из /etc/passwd

Выставление/изменение полномочий на файлы:

ls -lh — просмотр полномочий на файлы и директории в текущей директории

ls /tmp | pr -T5 -W$COLUMNS — вывести содержимое директории /tmp и разделить вывод на пять колонок

chmod ugo rwx directory1 — добавить полномочия на директорию directory1 ugo(User Group Other) rwx(Read Write eXecute) — всем полные права. Аналогичное можно сделать таким образом chmod 777 directory1

chmod go-rwx directory1 — отобрать у группы и всех остальных все полномочия на директорию directory1.

chown user1 file1 — назначить владельцем файла file1 пользователя user1

chown -R user1 directory1 — назначить рекурсивно владельцем директории directory1 пользователя user1

chgrp group1 file1 — сменить группу-владельца файла file1 на group1

chown user1:group1 file1 — сменить владельца и группу владельца файла file1

find / -perm -u s — найти, начиная от корня, все файлы с выставленным SUID

chmod u s /bin/binary_file — назначить SUID-бит файлу /bin/binary_file. Это даёт возможность любому пользователю запускать на выполнение файл с полномочиями владельца файла.

chmod u-s /bin/binary_file — снять SUID-бит с файла /bin/binary_file.

chmod g s /home/public — назначить SGID-бит директории /home/public.

chmod g-s /home/public — снять SGID-бит с директории /home/public.

chmod o t /home/public — назначить STIKY-бит директории /home/public. Позволяет удалять файлы только владельцам

chmod o-t /home/public — снять STIKY-бит с директории /home/public

Специальные атрибуты файлов:

chattr a file1 — позволить открывать файл на запись только в режиме добавления

chattr c file1 — позволяет ядру автоматически сжимать/разжимать содержимое файла.

chattr d file1 — указывает утилите dump игнорировать данный файл во время выполнения backup’а

chattr i file1 — делает файл недоступным для любых изменений: редактирование, удаление, перемещение, создание линков на него.

chattr s file1 — позволяет сделать удаление файла безопасным, т.е. выставленный атрибут s говорит о том, что при удалении файла, место, занимаемое файлом на диске заполняется нулями, что предотвращает возможность восстановления данных.

chattr S file1 — указывает, что, при сохранении изменений, будет произведена синхронизация, как при выполнении команды sync

chattr u file1 — данный атрибут указывает, что при удалении файла содержимое его будет сохранено и при необходимости пользователь сможет его восстановить

lsattr — показать атрибуты файлов

Архивирование и сжатие файлов:

bunzip2 file1.bz2 — разжимает файл ‘file1.gz’

gunzip file1.gz —

gzip file1 или bzip2 file1 — сжимает файл ‘file1’

gzip -9 file1 — сжать файл file1 с максимальным сжатием

rar a file1.rar test_file — создать rar-архив ‘file1.rar’ и включить в него файл test_file

rar a file1.rar file1 file2 dir1 — создать rar-архив ‘file1.rar’ и включить в него file1, file2 и dir1

rar x file1.rar — распаковать rar-архив

unrar x file1.rar —

tar -cvf archive.tar file1 — создать tar-архив archive.tar, содержащий файл file1

tar -cvf archive.tar file1 file2 dir1 — создать tar-архив archive.tar, содержащий файл file1, file2 и dir1

tar -tf archive.tar — показать содержимое архива

tar -xvf archive.tar — распаковать архив

tar -xvf archive.tar -C /tmp — распаковать архив в /tmp

tar -cvfj archive.tar.bz2 dir1 — создать архив и сжать его с помощью bzip2(Прим. переводчика. ключ -j работает не во всех *nix системах)

tar -xvfj archive.tar.bz2 — разжать архив и распаковать его(Прим. переводчика. ключ -j работает не во всех *nix системах)

tar -cvfz archive.tar.gz dir1 — создать архив и сжать его с помощью gzip

tar -xvfz archive.tar.gz — разжать архив и распаковать его

zip file1.zip file1 — создать сжатый zip-архив

zip -r file1.zip file1 file2 dir1 — создать сжатый zip-архив и со включением в него нескольких файлов и/или директорий

unzip file1.zip — разжать и распаковать zip-архив

RPM пакеты (Fedora, Red Hat и тому подобное):

rpm -ivh package.rpm — установить пакет с выводом сообщений и прогресс-бара

rpm -ivh –nodeps package.rpm — установить пакет с выводом сообщений и прогресс-бара без контроля зависимостей

rpm -U package.rpm — обновить пакет без изменений конфигурационных файлов, в случае отсутствия пакета, он будет установлен

rpm -F package.rpm — обновить пакет только если он установлен

rpm -e package_name.rpm — удалить пакет

rpm -qa — отобразить список всех пакетов, установленных в системе

rpm -qa | grep httpd — среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени «httpd»

rpm -qi package_name — вывести информацию о конкретном пакете

rpm -qg “System Environment/Daemons” — отобразить пакеты входящие в группу пакетов

rpm -ql package_name — вывести список файлов, входящих в пакет

rpm -qc package_name — вывести список конфигурационных файлов, входящих в пакет

rpm -q package_name –whatrequires — вывести список пакетов, необходимых для установки конкретного пакета по зависимостям

rpm -q package_name –whatprovides — show capability provided by a rpm package

rpm -q package_name –scripts — отобразит скрипты, запускаемые при установке/удалении пакета

rpm -q package_name –changelog — вывести историю ревизий пакета

rpm -qf /etc/httpd/conf/httpd.conf — проверить какому пакету принадлежит указанный файл. Указывать следует полный путь и имя файла.

rpm -qp package.rpm -l — отображает список файлов, входящих в пакет, но ещё не установленных в систему

rpm –import /media/cdrom/RPM-GPG-KEY — импортировать публичный ключ цифровой подписи

rpm –checksig package.rpm — проверит подпись пакета

rpm -qa gpg-pubkey — проверить целостность установленного содержимого пакета

rpm -V package_name — проверить размер, полномочия, тип, владельца, группу, MD5-сумму и дату последнего изменеия пакета

rpm -Va — проверить содержимое всех пакеты установленные в систему. Выполняйте с осторожностью!

rpm -Vp package.rpm — проверить пакет, который ещё не установлен в систему

rpm2cpio package.rpm | cpio –extract –make-directories *bin* — извлечь из пакета файлы содержащие в своём имени bin

rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm — установить пакет, собранный из исходных кодов

rpmbuild –rebuild package_name.src.rpm — собрать пакет из исходных кодов

YUM — средство обновления пакетов(Fedora, RedHat и тому подобное):

yum install package_name — закачать и установить пакет

yum update — обновить все пакеты, установленные в систему

yum update package_name — обновить пакет

yum remove package_name — удалить пакет

yum list — вывести список всех пакетов, установленных в систему

yum search package_name — найти пакет в репозиториях

yum clean packages — очисть rpm-кэш, удалив закачанные пакеты

yum clean headers — удалить все заголовки файлов, которые система использует для разрешения зависимостей

yum clean all — очисть rpm-кэш, удалив закачанные пакеты и заголовки

DEB пакеты (Debian, Ubuntu и тому подобное):

dpkg -i package.deb — установить / обновить пакет

dpkg -r package_name — удалить пакет из системы

dpkg -l — показать все пакеты, установленные в систему

dpkg -l | grep httpd — среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени «httpd»

dpkg -s package_name — отобразить информацию о конкретном пакете

dpkg -L package_name — вывести список файлов, входящих в пакет, установленный в систему

dpkg –contents package.deb — отобразить список файлов, входящих в пакет, который ещё не установлен в систему

dpkg -S /bin/ping — найти пакет, в который входит указанный файл.

APT — средство управление пакетами (Debian, Ubuntu и тому подобное):

apt-get update — получить обновлённые списки пакетов

apt-get upgrade — обновить пакеты, установленные в систему

apt-get install package_name — установить / обновить пакет

apt-cdrom install package_name — установить / обновить пакет с cdrom’а

apt-get remove package_name — удалить пакет, установленный в систему с сохранением файлов конфигурации

apt-get purge package_name — удалить пакет, установленный в систему с удалением файлов конфигурации

apt-get check — проверить целостность зависимостей

apt-get clean — удалить загруженные архивные файлы пакетов

apt-get autoclean — удалить старые загруженные архивные файлы пакетов

Pacman — средство управление пакетами (Arch, Frugalware и alike)

pacman -S name — install package «name» with dependencies

pacman -R name — delete package «name» and all files of it

Просмотр содержимого файлов:

cat file1 — вывести содержимое файла file1 на стандартное устройство вывода

tac file1 — вывести содержимое файла file1 на стандартное устройство вывода в обратном порядке (последняя строка становиться первой и т.д.)

more file1 — постраничный вывод содержимого файла file1 на стандартное устройство вывода

less file1 — постраничный вывод содержимого файла file1 на стандартное устройство вывода, но с возможностью пролистывания в обе стороны (вверх-вниз), поиска по содержимому и т.п.

head -2 file1 — вывести первые две строки файла file1 на стандартное устройство вывода. По умолчанию выводится десять строк

tail -2 file1 — вывести последние две строки файла file1 на стандартное устройство вывода. По умолчанию выводится десять строк

tail -f /var/log/messages — выводить содержимое файла /var/log/messages на стандартное устройство вывода по мере появления в нём текста.

Манипуляции с текстом:

grep -HR OLDTEXT ./ | awk ‘{print $1}’ | sed ‘s/:.*$//’ | grep -v ‘~’ | sort | uniq | xargs perl -i -pe “s/OLD_TEXT/NEW_TEXT/g;” — Поиск и замена текста OLDTEXT на NEW_TEXT во многих файлах одновременно с рекурсивным обходом директорий.

cat file_originale | [operation: sed, grep, awk, grep ит.п.] > result.txt — общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в новый

cat file_originale | [operazione: sed, grep, awk, grepит.п.] >> result.txt — общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в существующий файл. Если файл не существует, он будет создан

grep Aug /var/log/messages — из файла ‘/var/log/messages’ отобрать и вывести на стандартное устройство вывода строки, содержащие «Aug»

grep ^Aug /var/log/messages — из файла ‘/var/log/messages’ отобрать и вывести на стандартное устройство вывода строки, начинающиеся на «Aug»

grep [0-9] /var/log/messages — из файла ‘/var/log/messages’ отобрать и вывести на стандартное устройство вывода строки, содержащие цифры

grep Aug -R /var/log/* — отобрать и вывести на стандартное устройство вывода строки, содержащие «Augr», во всех файлах, находящихся в директории /var/log и ниже

sed ‘s/stringa1/stringa2/g’ example.txt — в файле example.txt заменить «string1» на «string2», результат вывести на стандартное устройство вывода.

sed ‘/^$/d’ example.txt — удалить пустые строки из файла example.txt

sed ‘/ *#/d; /^$/d’ example.txt — удалить пустые строки и комментарии из файла example.txt

echo ‘esempio’ | tr ‘[:lower:]’ ‘[:upper:]’ — преобразовать символы из нижнего регистра в верхний

sed -e ‘1d’ result.txt — удалить первую строку из файла example.txt

sed -n ‘/string1/p’ — отобразить только строки, содержащие «string1»

sed -e ‘s/ *$//’ example.txt — удалить пустые символы в конце каждой строки

sed -e ‘s/string1//g’ example.txt — удалить строку «string1» из текста не изменяя всего остального

sed -n ‘1,8p;5q’ example.txt — взять из файла с первой по восьмую строки и из них вывести первые пять

sed -n ‘5p;5q’ example.txt — вывести пятую строку

sed -e ‘s/0*/0/g’ example.txt — заменить последовательность из любого количества нулей одним нулём

cat -n file1 — пронумеровать строки при выводе содержимого файла

cat example.txt | awk ‘NR%2==1’ — при выводе содержимого файла, не выводить чётные строки файла

echo a b c | awk ‘{print $1}’ — вывести первую колонку. Разделение, по умолчанию, по пробелу/пробелам или символу/символам табуляции

echo a b c | awk ‘{print $1,$3}’ — вывести первую и третью колонки. Разделение, по умолчанию, по проблелу/пробелам или символу/символам табуляции

paste file1 file2 — объединить содержимое file1 и file2 в виде таблицы: строка 1 из file1 = строка 1 колонка 1-n, строка 1 из file2 = строка 1 колонка n 1-m

paste -d ‘ ‘ file1 file2 — объединить содержимое file1 и file2 в виде таблицы с разделителем « »

sort file1 file2 — отсортировать содержимое двух файлов

sort file1 file2 | uniq — отсортировать содержимое двух файлов, не отображая повторов

sort file1 file2 | uniq -u — отсортировать содержимое двух файлов, отображая только уникальные строки (строки, встречающиеся в обоих файлах, не выводятся на стандартное устройство вывода)

sort file1 file2 | uniq -d — отсортировать содержимое двух файлов, отображая только повторяющиеся строки

comm -1 file1 file2 — сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file1’

comm -2 file1 file2 — сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file2’

comm -3 file1 file2 — сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах

Преобразование наборов символов и файловых форматов:

dos2unix filedos.txt fileunix.txt — конвертировать файл текстового формата из MSDOS в UNIX (разница в символах возврата каретки)

unix2dos fileunix.txt filedos.txt — конвертировать файл текстового формата из UNIX в MSDOS (разница в символах возврата каретки)

recode ..HTML < page.txt > page.html — конвертировать содержимое тестового файла page.txt в html-файл page.html

recode -l | more — вывести список доступных форматов

Анализ файловых систем:

badblocks -v /dev/hda1 — проверить раздел hda1 на наличие bad-блоков

fsck /dev/hda1 — проверить/восстановить целостность linux-файловой системы раздела hda1

fsck.ext2 /dev/hda1 или e2fsck /dev/hda1 — проверить/восстановить целостность файловой системы ext2 раздела hda1

e2fsck -j /dev/hda1 — проверить/восстановить целостность файловой системы ext3 раздела hda1 с указанием, что журнал расположен там же

fsck.ext3 /dev/hda1 — проверить/восстановить целостность файловой системы ext3 раздела hda1

fsck.vfat /dev/hda1 или fsck.msdos /dev/hda1 или dosfsck /dev/hda1 — проверить/восстановить целостность файловой системы fat раздела hda11

Форматирование файловых систем:

mkfs /dev/hda1 — создать linux-файловую систему на разделе hda1

mke2fs /dev/hda1 — создать файловую систему ext2 на разделе hda1

mke2fs -j /dev/hda1 — создать журналирующую файловую систему ext3 на разделе hda1

mkfs -t vfat 32 -F /dev/hda1 — создать файловую систему FAT32 на разделе hda1

fdformat -n /dev/fd0 — форматирование флоппи-диска без проверки

mkswap /dev/hda3 — создание swap-пространства на разделе hda3

swap-пространство:

mkswap /dev/hda3 — создание swap-пространства на разделе hda3

swapon /dev/hda3 — активировать swap-пространство, расположенное на разделе hda3

swapon /dev/hda2 /dev/hdb3 — активировать swap-пространства, расположенные на разделах hda2 и hdb3

Создание резервных копий (backup):

dump -0aj -f /tmp/home0.bak /home — создать полную резервную копию директории /home в файл /tmp/home0.bak

dump -1aj -f /tmp/home0.bak /home — создать инкрементальную резервную копию директории /home в файл /tmp/home0.bak

restore -if /tmp/home0.bak — восстановить из резервной копии /tmp/home0.bak

rsync -rogpav –delete /home /tmp — синхронизировать /tmp с /home

rsync -rogpav -e ssh –delete /home ip_address:/tmp — синхронизировать через SSH-туннель

rsync -az -e ssh –delete ip_addr:/home/public /home/local — синхронизировать локальную директорию с удалённой директорией через ssh-туннель со сжатием

rsync -az -e ssh –delete /home/local ip_addr:/home/public — синхронизировать удалённую директорию с локальной директорией через ssh-туннель со сжатием

dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr ‘dd of=hda.gz’ — сделать «слепок» локального диска в файл на удалённом компьютере через ssh-туннель

tar -Puf backup.tar /home/user — создать инкрементальную резервную копию директории ‘/home/user’ в файл backup.tar с сохранением полномочий

( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr ‘cd /home/share/ && tar x -p’ — копирование содержимого /tmp/local на удалённый компьютер через ssh-туннель в /home/share/

( tar c /home ) | ssh -C user@ip_addr ‘cd /home/backup-home && tar x -p’ — копирование содержимого /home на удалённый компьютер через ssh-туннель в /home/backup-home

tar cf – . | (cd /tmp/backup ; tar xf – ) — копирование одной директории в другую с сохранением полномочий и линков

find /home/user1 -name ‘*.txt’ | xargs cp -av –target-directory=/home/backup/ –parents — поиск в /home/user1 всех файлов, имена которых оканчиваются на ‘.txt’, и копирование их в другую директорию

find /var/log -name ‘*.log’ | tar cv –files-from=- | bzip2 > log.tar.bz2 — поиск в /var/log всех файлов, имена которых оканчиваются на ‘.log’, и создание bzip-архива из них

dd if=/dev/hda of=/dev/fd0 bs=512 count=1 — создать копию MBR (Master Boot Record) с /dev/hda на флоппи-диск

dd if=/dev/fd0 of=/dev/hda bs=512 count=1 — восстановить MBR с флоппи-диска на /dev/hda

CDROM:

cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force — clean a rewritable cdrom

mkisofs /dev/cdrom > cd.iso — create an iso image of cdrom on disk

mkisofs /dev/cdrom | gzip > cd_iso.gz — create a compressed iso image of cdrom on disk

mkisofs -J -allow-leading-dots -R -V “Label CD” -iso-level 4 -o ./cd.iso data_cd — create an iso image of a directory

cdrecord -v dev=/dev/cdrom cd.iso — burn an ISO image

gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom — burn a compressed ISO image

mount -o loop cd.iso /mnt/iso — mount an ISO image

cd-paranoia -B — rip audio tracks from a CD to wav files

cd-paranoia — “-3” — rip first three audio tracks from a CD to wav files

cdrecord –scanbus — scan bus to identify the channel scsi

Сеть (LAN и WiFi):

ifconfig eth0 — показать конфигурацию сетевого интерфейса eth0

ifup eth0 — активировать (поднять) интерфейс eth0

ifdown eth0 — деактивировать (опустить) интерфейс eth0

ifconfig eth0 192.168.1.1 netmask 255.255.255.0 — выставить интерфейсу eth0 IP-адрес и маску подсети

ifconfig eth0 promisc — перевести интерфейс eth0 в promiscuous-режим для «отлова» пакетов (sniffing)

ifconfig eth0 -promisc — отключить promiscuous-режим на интерфейсе eth0

dhclient eth0 — активировать интерфейс eth0 в dhcp-режиме.

route -n

netstat -rn — вывести локальную таблицу маршрутизации

route add -net 0/0 gw IP_Gateway — задать IP-адрес шлюза по умолчанию (default gateway)

route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 — добавить статический маршрут в сеть 192.168.0.0/16 через шлюз с IP-адресом 192.168.1.1

route del 0/0 gw IP_gateway — удалить IP-адрес шлюза по умолчанию (default gateway)

echo “1” > /proc/sys/net/ipv4/ip_forward — разрешить пересылку пакетов (forwarding)

hostname — отобразить имя компьютера

host www.example.com или host 192.0.43.10 — разрешить имя www.example.com хоста в IP-адрес и наоборот

ip link show — отобразить состояние всех интерфейсов

mii-tool eth0 — отобразить статус и тип соединения для интерфейса eth0

ethtool eth0 — отображает статистику интерфейса eth0 с выводом такой информации, как поддерживаемые и текущие режимы соединения

netstat -tupn — отображает все установленные сетевые соединения по протоколам TCP и UDP без разрешения имён в IP-адреса и PID’ы и имена процессов, обеспечивающих эти соединения

netstat -tupln — отображает все сетевые соединения по протоколам TCP и UDP без разрешения имён в IP-адреса и PID’ы и имена процессов, слушающих порты

tcpdump tcp port 80 — отобразить весь трафик на TCP-порт 80 (обычно — HTTP)

iwlist scan — просканировать эфир на предмет, доступности беспроводных точек доступа

iwconfig eth1 — показать конфигурацию беспроводного сетевого интерфейса eth1

Microsoft Windows networks(SAMBA):

nbtscan ip_addr

nmblookup -A ip_addr — разрешить netbios-имя nbtscan не во всех системах ставится по умолчанию, возможно, придётся доустанавливать вручную. nmblookup включён в пакет samba.

smbclient -L ip_addr/hostname — отобразить ресурсы, предоставленные в общий доступ на windows-машине

smbget -Rr smb://ip_addr/share — подобно wget может получить файлы с windows-машин через smb-протокол

mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share — смонтировать smb-ресурс, предоставленный на windows-машине, в локальную файловую систему

IPTABLES (firewall):

iptables -t filter -nL

iptables -nL — отобразить все цепочки правил

iptables -t nat -L — отобразить все цепочки правил в NAT-таблице

iptables -t filter -F или iptables -F — очистить все цепочки правил в filter-таблице

iptables -t nat -F — очистить все цепочки правил в NAT-таблице

iptables -t filter -X — удалить все пользовательские цепочки правил в filter-таблице

iptables -t filter -A INPUT -p tcp –dport telnet -j ACCEPT — позволить входящее подключение telnet’ом

iptables -t filter -A OUTPUT -p tcp –dport http -j DROP — блокировать исходящие HTTP-соединения

iptables -t filter -A FORWARD -p tcp –dport pop3 -j ACCEPT — позволить «прокидывать» (forward) POP3-соединения

iptables -t filter -A INPUT -j LOG –log-prefix “DROP INPUT” — включить журналирование ядром пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса «DROP INPUT»

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE — включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми IP-адресами.

iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp –dport 22 -j DNAT –to-destination 10.0.0.2:22 — перенаправление пакетов, адресованных одному хосту, на другой хост

Мониторинг и отладка:

top — отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (с автоматическим обновлением данных)

ps -eafw — отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (единожды)

ps -e -o pid,args –forest — вывести PID’ы и процессы в виде дерева

pstree — отобразить дерево процессов

kill -9 98989 или kill -KILL 98989 — «убить» процесс с PID 98989 «на смерть» (без соблюдения целостности данных)

kill -TERM 98989 — корректно завершить процесс с PID 98989

kill -1 98989 или kill -HUP 98989 — заставить процесс с PID 98989 перепрочитать файл конфигурации

lsof -p 98989 — отобразить список файлов, открытых процессом с PID 98989

lsof /home/user1 — отобразить список открытых файлов из директории /home/user1

strace -c ls >/dev/null — вывести список системных вызовов, созданных и полученных процессом ls

strace -f -e open ls >/dev/null — вывести вызовы библиотек

watch -n1 ‘cat /proc/interrupts’ — отображать прерывания в режиме реального времени

last reboot — отобразить историю перезагрузок системы

last user1 — отобразить историю регистрации пользователя user1 в системе и время его нахождения в ней

lsmod — вывести загруженные модули ядра

free -m — показать состояние оперативной памяти в мегабайтах

smartctl -A /dev/hda — контроль состояния жёсткого диска /dev/hda через SMART

smartctl -i /dev/hda — проверить доступность SMART на жёстком диске /dev/hda

tail /var/log/dmesg — вывести десять последних записей из журнала загрузки ядра

tail /var/log/messages — вывести десять последних записей из системного журнала

Другие полезные команды:

apropos …keyword — выводит список команд, которые так или иначе относятся к ключевым словам. Полезно, когда вы знаете что делает программа, но не помните команду

man ping — вызов руководства по работе с программой, в данном случае, — ping

whatis …keyword — отображает описание действий указанной программы

mkbootdisk –device /dev/fd0 `uname -r` — создаёт загрузочный флоппи-диск

gpg -c file1 — шифрует файл file1 с помощью GNU Privacy Guard

gpg file1.gpg — дешифрует файл file1 с помощью GNU Privacy Guard

wget -r http://www.example.com — загружает рекурсивно содержимое сайта http://www.example.com

wget -c http://www.example.com/file.iso — загрузить файл http://www.example.com/file.iso с возможностью останова и продолжения в последствии

echo ‘wget -c http://www.example.com/files.iso’ | at 09:00 — начать закачку в указанное время

ldd /usr/bin/ssh — вывести список библиотек, необходимых для работы ssh

alias hh=’history’ — назначить алиас hh команде history

Копирование файлов

Также, как с сервером OpenSSH в любой системе * nix, вы можете использовать SCP для копирования файлов на сервер или с сервера.Например, администратор Linux может быстро получить файл журнала с сервера Windows с помощью той же команды, что и для сервера Linux.

На стороне windows

Должен быть установлены OpenSSH. В Windows 10 и Windows Server 2021 появился встроенный SSH клиент на основе OpenSSH. Им мы и воспользуемся. Сначала убедимся что он установлен – наберем в командной строке

ssh

Если видим исполнение команды — все “Ок”, клиент присутствует в системе.

Настройка linux сервера

Предполагается, что ssh-сервер был предварительно настроен и включена авторизация по ключу.

Подключаемся по ssh из командной строки на windows-машине

Настройка сетевого адаптера для dns-сервера

Установка DNS-сервера предполагает наличие доменной зоны, поэтому необходимо создать частную сеть в личном кабинете и подключить к ней виртуальные машины.

После того, как машина будет присоединена к двум сетям, важно не перепутать, какое из подключений требует настройки. Первичный сетевой адаптер настроен автоматически с самого начала, через него открыт доступ к интернету, в то время как на дополнительно подключенных сетевых адаптерах доступа в интернет нет, пока не будет произведена ручная настройка:

CIFS over SSH штатными средствами Windows 10 / Хабр

Наведя курсор на значок сети в системном трее, можно вызвать всплывающую подсказку с краткими сведениями о сетях. Из примера выше видно, что присоединённая сеть это Network 3.

Далее предстоит проделать цепочку действий:

  • Нажать правой клавишей мыши Пуск, в выпадающем меню выбрать пункт Сетевые подключения;
  • Правой кнопкой мыши нажать на необходимый сетевой адаптер, в меню выбрать Свойства;
  • В окне свойств выбрать IPv4 и нажать на кнопку Свойства;
  • Заполнить соответствующие поля необходимыми данными:

CIFS over SSH штатными средствами Windows 10 / Хабр

Здесь в качестве предпочитаемого DNS-сервера машина назначена сама себе, альтернативным назначен dns.google [8.8.8.8].

Первичная конфигурация ssh-сервера

По умолчанию при подключении к OpenSSH-серверу используется командная строка Windows. Вы можете использовать практически любую оболочку на вашем компьютере с Windows через SSH-соединение. Даже возможно использовать Bash, когда подсистема Windows для Linux (WSL) также установлена на целевой машине. Также возможно изменение оболочки по умолчанию на SSH-сервере на нечто иное, чем командная оболочка. Для этого ключ реестра «DefaultShell» необходимо изменить.

Сделать это можно как через редактор реестра regedit.exe, открыв в нем следующий путь: HKEY_LOCAL_MACHINESOFTWAREOpenSSH и изменив в нем параметр DefaultShell, указав в нем полный путь до исполняемого файла необходимой командной строки, например:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe

Тоже самое можно сделать используя PowerShell:

New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Проверим настройки Windows Firewall, используя для этого PowerShell:

Get-NetFirewallRule -Name *ssh*

Введя данную команду мы получим параметры правила, разрешающего SSH-подключение к серверу. Если правила не оказалось, введем следующую команду, создав его:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Подключение к серверу

Теперь мы готовы к работе и можем подключиться через установленное приложение к нашему хосту. Это можно осуществить либо с Windows 10, компьютера с Linux, с putty.exe на более старой машине с Windows, либо с Bash в настольной операционной системе от Microsoft. Все, что вам нужно, это найти какой-либо SSH-клиент, ввести в него имя пользователя, имя вашего сервера или IP-адрес и подключиться.

При первом подключении с неизвестного хоста будет показано следующее сообщение:

CIFS over SSH штатными средствами Windows 10 / Хабр

Ответив на него yes, хост подключения будет добавлен в список известных хостов сервера. После чего необходимо ввести пароль пользователя (по соображениям безопасности вводимые символы отображаться не будут). После успешного подключения отобразится интерфейс используемой командной строки:

Проверка

  • Проверьте изменения в каталогах обеих зон (на примере ниже в обеих зонах появилось по 2 новых записи):

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Откройте командную строку (cmd) или PowerShell и запустите команду nslookup:

CIFS over SSH штатными средствами Windows 10 / Хабр

Процесс настройки

Запускаем «Диспетчер серверов». Находим пункт DHCP в открывающемся списке «Tools»:

CIFS over SSH штатными средствами Windows 10 / Хабр

В нашем варианте мы рассматриваем выдачу IPv4 адресов, поэтому нужно создать новую область (Scope) — пул IP-адресов, выдаваемых клиентам. Нажимаем правой кнопкой мыши на IPv4 и выбираем «New Scope…»:

CIFS over SSH штатными средствами Windows 10 / Хабр

Открывается Мастер создания области, где мы вводим имя пула. Если необходимо, то можно ввести описание:

CIFS over SSH штатными средствами Windows 10 / Хабр

Определяем границы нашего пула, задав начальный и конечный IP-адрес. Также вводим маску подсети:

CIFS over SSH штатными средствами Windows 10 / Хабр

В случае необходимости можно добавить в исключения один или несколько IP-адресов из создаваемого пула. В этом диапазоне могут находиться сетевые устройства которым уже назначен статический IP. Тут же есть параметр задержки ответа сервера перед отправкой данных на запрос от хоста:

CIFS over SSH штатными средствами Windows 10 / Хабр

Далее можно указать время аренды IP-адреса. По умолчанию выставлено 8 дней:

CIFS over SSH штатными средствами Windows 10 / Хабр

Теперь Мастер предложит указать сетевые параметры (Gateway, DNS, WINS), выдаваемые клиентам в сети:

CIFS over SSH штатными средствами Windows 10 / Хабр

Укажем адрес сетевого шлюза:

CIFS over SSH штатными средствами Windows 10 / Хабр

Следующий этап позволяет добавить WINS-сервер:

CIFS over SSH штатными средствами Windows 10 / Хабр

Выбираем «Активировать» заданную нами область сейчас:

CIFS over SSH штатными средствами Windows 10 / Хабр

После настройки пула можно проверить работает ли сервер. Посмотреть подключенных клиентов можно перейдя в раздел «Address Leases». В нашем случае видим, что подключено одно устройство:

CIFS over SSH штатными средствами Windows 10 / Хабр

Если мы зайдем на клиентскую машину, то можем проверить правильность полученных настроек:

CIFS over SSH штатными средствами Windows 10 / Хабр

Хоть мы и рассматривали настройку на Windows Server 2021, данная инструкция так же подойдет и для Windows Server 2008—2021, так как процесс не сильно отличается.

Процесс установки

  • Запустим Диспетчер серверов и выберем «Add roles and features». Выберем первый пункт «Role — based or feature — based installation»:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Укажем сервер, на который будем устанавливать роль DHCP:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Мастер напомнит вам о то, что нужно заранее спланировать подсети, области и исключения:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Проверяем устанавливаемые компоненты и нажимаем «Install»:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • После завершения установки можно начать первичную настройку DHCP. Переходим по ссылке «Complete DHCP configuration»:

CIFS over SSH штатными средствами Windows 10 / Хабр

Процесс первичной настройки проходит в два этапа:

1. Создание «Группы безопасности» для управления этим DHCP—сервером. Всего их две:

2. Авторизация DHCP-сервера в Active Directory (если он присоединен к домену). Данная настройка нужна, чтобы избежать появления в сети посторонних DHCP-серверов. Сервер должен пройти авторизацию чтобы служба DHCP запустилась:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Вписываем учетные данные администратора и жмем кнопку «Commit». Если сервер не присоединен к домену, то выбираем последний пункт:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Если всё сделано верно, мастер оповещает об успешном выполнении настройки:

CIFS over SSH штатными средствами Windows 10 / Хабр

Работаем на ос семейства linux

Используем следующий формат команд:

scp [модификатор] [источник] [место_назначения]

Если в качестве источника или места назначения указывается удаленный сервер, то формат параметра такой:

[пользователь]@[сервер]:[путь_к_файлу]

После запуска команды потребуется ввести пароль от указанной учетной записи удаленного сервера.

За одну операцию можно скопировать несколько файлов, для этого необходимо указать их в качестве источника, разделив пробелом – местом назначения будет считаться последний указанный параметр. Например, загрузить файлы file1.tgz и file2.tgz из локального каталога на удаленный сервер позволит команда:

scp file1.tgz file2.tgz root@123.123.123.123:/root

Чтобы узнать какие еще модификаторы поддерживает команда, можно просто запустить scp без параметров и прочитать краткую справку.

Работаем на ос семейства windows

Если мы подключаемся к удаленному серверу с компьютера, работающего на операционной системе Windows, то нам снова потребуется обратиться к терминальному клиенту Putty, в состав которого входит исполняемый файл plink.exe. Работать с этим файлом необходимо из командной строки (cmd.exe) или из PowerShell.

Для запуска команды на удаленном сервере используется следующий синтаксис:

plink.exe [сервер] -ssh -l [пользователь] “[команда]”

Проверим конфигурацию сетевых интерфейсов:

plink.exe 123.123.123.123 -ssh -l root “ifconfig”

Как и при работе с командой SSH в Linux, plink.exe позволяет использовать “;” в качестве разделителя для запуска нескольких команд:

plink.exe 123.123.123.123 -ssh -l root “ifconfig; netstat -anp tcp”

А запуск команд из локального файла можно реализовать с помощью дополнительного ключа m:

plink.exe 123.123.123.123 -ssh -l root -m “C:Tempmyscript.sh”

Запустив команду plink.exe без параметров, можно ознакомиться с краткой справкой по синтаксису и списком дополнительных модификаторов команды.

Создание a-записи

Данный раздел инструкции в большей степени предназначен для проверки ранее проделанных шагов.

Ресурсная запись — единица хранения и передачи информации в DNS, заключает в себе сведения о соответствии какого-либо имени с определёнными служебными данными.

Запись A — запись, позволяющая по доменному имени узнать IP-адрес.

Запись PTR — запись, обратная A записи.

  • В Диспетчере DNS выберите каталог созданной ранее зоны внутри каталога Зон Прямого Просмотра. В правой части Диспетчера, где отображается содержимое каталогов, правой кнопки мыши вызовите выпадающее меню и запустите команду «Создать узел (A или AAAA)…»:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Откроется окно создания Нового Узла, где понадобится вписать в соответствующие поля имя узла (без доменной части, в качестве доменной части используется название настраиваемой зоны) и IP-адрес. Здесь же имеется чек-бокс Создать соответствующую PTR-запись — чтобы проверить работу обеих зон (прямой и обратной), чек-бокс должен быть активирован:

CIFS over SSH штатными средствами Windows 10 / Хабр

Если поле имени остается пустым, указанный адрес будет связан с именем доменной зоны.

  • Также можно добавить записи для других серверов:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Добавив все необходимые узлы, нажмите Готово.

Создание зон прямого и обратного просмотра

Доменная зона — совокупность доменных имён в пределах конкретного домена.

Зоны прямого просмотра предназначены для сопоставления доменного имени с IP-адресом.

Зоны обратного просмотра работают в противоположную сторону и сопоставляют IP-адрес с доменным именем.

Создание зон и управление ими осуществляется при помощи Диспетчера DNS.

Перейти к нему можно в правой части верхней навигационной панели, выбрав меню Средства и в выпадающем списке пункт DNS:

CIFS over SSH штатными средствами Windows 10 / Хабр

Создание зоны обратного просмотра

  • Выделите в Диспетчере DNS каталог Зоны Обратного Просмотра и нажатием кнопки Новая зона на панели инструментов сверху запустите Мастер Создания Новой Зоны:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Выберите тип Основная Зона, перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Выберите назначение для адресов IPv4, нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Укажите идентификатор сети (первые три октета сетевого адреса) и следуйте Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • При необходимости поменяйте название будущего файла зоны и перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Выберите, разрешить динамические обновления или нет. Разрешать не рекомендуется в силу значимой уязвимости. Перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Проверьте правильность выбранной конфигурации и завершите настройку, нажав кнопку Готово:

CIFS over SSH штатными средствами Windows 10 / Хабр

Создание зоны прямого просмотра

  • Выделите каталог Зоны Прямого Просмотра, запустите Мастер Создания Новой Зоны с помощью кнопки Новая зона на панели инструментов сверху:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Откроется окно Мастера с приветствием, нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Из предложенных вариантов выберите Основная зона и перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Укажите имя зоны и нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • При необходимости поменяйте название будущего файла зоны и перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Выберите, разрешить динамические обновления или нет. Разрешать не рекомендуется в силу значимой уязвимости. Перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

  • Проверьте правильность выбранной конфигурации и завершите настройку, нажав кнопку Готово:

CIFS over SSH штатными средствами Windows 10 / Хабр

Установка openssh в windows server 2021

Открываем SettingsApps & featuresManage optional features:

CIFS over SSH штатными средствами Windows 10 / Хабр

Нажимаем Add a feature, ищем OpenSSH ServerInstall:

CIFS over SSH штатными средствами Windows 10 / Хабр

На предыдущем экране дожидаемся окончания процесса инсталляции. OpenSSH сервер можем считать установленным.

Обращаем внимание, что установка этим методом автоматически создаст правило Windows Firewall, с названием «OpenSSH-Server-In-TCP», открывающее 22 порт для входящих подключений.

Используя PowerShell:

Проверим, присутствует ли на нашей системе встроенный OpenSSH:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

В ответ должны получить:

Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent #или Install, если клиент уже установлен
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

Устанавливаем клиент, если он не установлен:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Для установки сервера вводим:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

В обоих случаях вывод должен быть следующим:

Path :
Online : True
RestartNeeded : False

Установка роли dns-сервера

Для установки дополнительных ролей на сервер используется Мастер Добавления Ролей и Компонентов, который можно найти в Диспетчере Сервера.

На верхней навигационной панели Диспетчера сервера справа откройте меню Управление, выберите опцию Добавить Роли и Компоненты:

CIFS over SSH штатными средствами Windows 10 / Хабр

Откроется окно Мастера, в котором рекомендуют убедиться что:

1. Учётная запись администратора защищена надёжным паролем.

2. Настроены сетевые параметры, такие как статические IP-адреса.

3. Установлены новейшие обновления безопасности из центра обновления Windows.

Убедившись, что все условия выполнены, нажимайте Далее;

Выберите Установку ролей и компонентов и нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

Выберите необходимый сервер из пула серверов и нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

Отметьте чек-боксом роль DNS-сервер и перейдите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

Проверьте список компонентов для установки, подтвердите нажатием кнопки Добавить компоненты:

CIFS over SSH штатными средствами Windows 10 / Хабр

Оставьте список компонентов без изменений, нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

Прочитайте информацию и нажмите Далее:

CIFS over SSH штатными средствами Windows 10 / Хабр

В последний раз проверьте конфигурацию установки и подтвердите решение нажатием кнопки Установить:

CIFS over SSH штатными средствами Windows 10 / Хабр

Финальное окно Мастера сообщит, что установка прошла успешно, Мастер установки можно закрыть:

CIFS over SSH штатными средствами Windows 10 / Хабр

Шаг 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 следующего содержания:

Шаг 3. ярлык или задача в планировщике

Создаем ярлык для следующей команды: powershell -nologo -noninteractive -windowStyle hidden -command “%APPDATA%CIFSoverSSHcifsoversshkey.cmd”Это позволит запускать наш пакетный файл через powershell без открытия окна. Если запускать его через CMD будет открываться черное окно терминала и будет висеть все время, пока соединение будет установлено, а это неудобно и некрасиво.

Для автоматизации запуска при входе в систему можно создать задачу в планировщике:

I’m a blind student currently in a system admin/shell programming class. Although ssh works fine for executing commands like ls, pwd, etc editors do not work well with my screen reader and an ssh session. I was wondering if it is possible to mount a Linux folder over ssh so it appears as a windows drive? This way I could edit any files I needed to with accessible software and not have to constantly use SCP to send files back and fourth.

Michael Haren's user avatar

Michael Haren

104k40 gold badges165 silver badges205 bronze badges

asked Jan 14, 2009 at 16:45

Jared's user avatar

3

Back in 2002, Novell developed some software called NetDrive that can map a WebDAV, FTP, SFTP, etc. share to a windows drive letter. It is now abandonware, so it’s no longer maintained (and not available on the Novell website), but it’s free to use. I found quite a few available to download by searching for «netdrive.exe» I actually downloaded a few and compared their md5sums to make sure that I was getting a common (and hopefully safe) version.

Update 10 Nov 2017
SFTPNetDrive is the current project from the original netdrive project. And they made it free for personal use:

We Made SFTP Net Drive FREE for Personal Use

They have paid options as well on the website.

flawr's user avatar

flawr

10.2k3 gold badges41 silver badges63 bronze badges

answered Jan 14, 2009 at 16:56

Sunny Milenov's user avatar

Sunny MilenovSunny Milenov

21.8k6 gold badges79 silver badges106 bronze badges

5

Dokan looks like a FUSE and sshfs implementation for Windows. If it works as expected and advertised, it would do exactly what you are looking for.

(Link updated and working 2015-10-15)

answered Jan 14, 2009 at 16:59

matli's user avatar

matlimatli

27.6k6 gold badges36 silver badges37 bronze badges

13

Take a look at CIFS (http://www.samba.org/cifs/). It is a virtual file system you can run on your linux machine that will allow you to mount folders on your linux machine in windows using SMB.

CIFS on linux information can be found here: http://linux-cifs.samba.org/

answered Jan 14, 2009 at 17:03

neesh's user avatar

neeshneesh

5,0676 gold badges29 silver badges32 bronze badges

2

You need to mount a remote share on your windows machine. This is what Samba/smb is for.

What you’ll be doing is turning your Linux box into an SMB server, which lets it share files in a way that plays nice with Windows.

If you’re not on the same network, you’ll need to tunnel this through your SSH connection which may not be worth the effort.

answered Jan 14, 2009 at 16:48

Michael Haren's user avatar

Michael HarenMichael Haren

104k40 gold badges165 silver badges205 bronze badges

3

I don’t think you can mount a Linux folder as a network drive under windows having only access to ssh. I can suggest you to use WinSCP that allows you to transfer file through ssh and it’s free.

EDIT: well, sorry. Vinko posted before me and now i’ve learned a new thing :)

answered Jan 14, 2009 at 16:54

Stefano Driussi's user avatar

Stefano DriussiStefano Driussi

2,2411 gold badge14 silver badges19 bronze badges

Apparently the free NetDrive software from Novell can access SFTP file servers.

answered Jan 14, 2009 at 17:03

Alnitak's user avatar

AlnitakAlnitak

331k70 gold badges404 silver badges490 bronze badges

Second David’s answer below: I needed to mount a network drive automatically when users logged in. Dokan SSHFS is a nice tool, but wasn’t reliable enough in this case. The copy of Netdrive I found didn’t support SSHFS or sftp — not sure if a more recent one does.

The solution I’m trialling now involves adding a virtual network adapter (with file sharing disabled), using plink to open a tunnel via the new adapter to the remote machine running SAMBA, and mounting the network drive against the new adapter. There’s another useful tutorial here http://www.blisstonia.com/eolson/notes/smboverssh.php.

The tunnel and network drive can be set up with a login script, so a few seconds after login users can use the mapped drive without needing to take any action.

answered Oct 19, 2010 at 7:59

Leo's user avatar

LeoLeo

1,47916 silver badges15 bronze badges

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

Сегодня расскажу как смонтировать папку (например, с сайтами) из Debian в Windows 10 по SSH (SFTP) с удобным включением/выключением. Под нужным пользователем (www-data) с нужными правами.

Ниже длинное вступление о том как и зачем мне это нужно. Его можно промотать.

Те кто читал мои посты в блоге и видел видосики на канале знают что в основном я занимаюсь разработкой своих сайтов на WordPress, Yii, Laravel. Основной инструмент — PhpStorm. Боевые проекты хостятся на разных вдсках в основном это FastVPS и RuWEB. Везде Debian + Nginx и везде более менее стандартный конфиг (с поправкой на версии и нагрузку кажого из проектов). Всего порядка десяка вдсок.

Разработка и бэкапы на локальной машине под Windows 10, где крутится усредненный аналог боевой конфиги в VirtualBox. Т.е. дев сервер сейчас это Debian 10 + Nginx 1.15.

Разработка и деплой на rsync

Со всех вдсок sh скрипт с помощью

ssh + rsync + mysqldump  собирает текущие версии проектов и в итоге на дев инстансте всегда актуальные данные любого из проектов. На деве ведется разработка, тестирование, минификация, обфускация и т.д.После чего тем же скриптом изменения деплоятся на прод, на конкретную вдску. Git используется только на деве.

Я знаю про Docker :)

Эта схема не тренд, а мой личный велосипед. Логичнее было все это хозяйство контейнезировать и деплоить через гит. Однако некоторые проекты контейнезировать без потерь крайне сложно, а городить разные инфраструктуры при работе в одни руки не эффективно. Мой велосипед вполне успешно работает уже много лет, но есть одна проблема, над которой я бьюсь столько же лет сколько велосипед существует.

Проблема на самом деле в PhpStorm

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

В PhpStorm когда вы создаете проект из ранее созданных файлов ( Create New Project from Existing Files ) у вас есть по сути два выбора — файлы проекта расположены локально или удаленно. Если создать проект из удаленных файлов, то PhpStorm будет скачивать их все на локальный диск для индексации. А при изменении закачивать их обратно на удаленный сервер (например по SFTP). Это не проблема, когда разработка идет на одном компьютере.

Разработка на разных компах, в разных сетях

Однако я работаю сразу на 3х — стационарный десктоп под Windows 10, два ноутбука. Один ноут используется дома (нравится мне менять места и позы во время работы), второй используется реже — вне дома. И в этом случае возникает сложность синхронизации локальных проектов одного и того же удаленного проекта. Особенно если это проекты с множеством мелких файлов. Например Laravel c Laravel Mix. Короче жуткая головная боль.

Монтирование папки из Debian все бы решило

Куда проще если бы можно было подмонтировать удаленную папку сайта и создавать проект в PhpStorm как с локальными файлами. В Ubuntu это делается элементарно, а вот под виндой все на порядок сложнее.

Вариант с Samba

В принципе дома у меня работала схема с Samba сервером на дев виртуалке под юзером www-data. Но если работать с дев сервером с улицы (через проброс портов через роутер) и если домашний ip динамический, то возникает несколько сложностей — нужно каждый раз менять ip, пробрасывать порт в роутере ещё и на самбу (лишняя уязвимость), перемонтировать диски. Короче хотелось так чтобы как в Ubuntu. И выход нашелся.

Монтирование папки из Linux (Debian) в Windows по SFTP

Для монтирования папки из Linux в Window 10 по SFTP я использую связку billziss-gh/winfsp  + billziss-gh/sshfs-win . WinFSP — это порт https://github.com/libfuse/sshfs под винду. А sshfs — это как раз та сетевая файловая система что используется в Ubuntu для монтирования по SFTP. Как я и хотел.

Итак ставим сначала WinFSP, затем SSHFS-Win. Сразу после перезагрузки диски папки можно будет легко монтировать прямо из проводника Windows 10. См. картинку.

Монтирование папки через проводник в SSHFS-Win

Монтирование папки через проводник в SSHFS-Win

Однако в моем случае это не решило проблему.

Нестандартные порты SSH при монтировании

При монтировании папки через проводник вы можете указать путь до папки на сервере, но не можете указать порт SSH, если ssh висит не на 22. Это можно сделать в командной строке

net use Z: sshfs[LOCUSER=]REMUSER@HOST[!PORT][PATH]

Но тогда:

  • проводник, а соотв. и PhpStorm не увидит примонтированный диск
  • логин/пароль придется вводить каждый раз.

Есть ощущение что это все можно решить если глубоко погрязнуть в скрипты настройки SSHFS-Win, однако здесь есть и два GUI это SiriKali и SSHFS-Win-Manager  .

SiriKali мне жутко не понравился, а вот SSHFS-Win-Manager прижился. Собственно его использование решает почти все проблемы для монтирования дисков из Linux в Windows 10 по SFTP. Я напишу о его настройке чуть ниже. Однако в моем случае просто монтирования было не достаточно.

SSHFS-Win проблемы с юзером и правами на новые папки и файлы

Я ведь все эту чехарду устроил ради разработки и мне нужно чтобы работа на подмонтированном диске была из под юзера

wwwdata  юзер www-data по умолчанию не имеет доступа к консоли и под ним нельзя примонтировать диск. Также SSHFS-Win создает НОВЫЕ папки и файлы с правами 0700 (для уже созданных не меняет), а мне надо чтобы было 0755 на папки и 0644 на файлы.

Разрешаю монтирование под www-data

Это самое сомнительное решение. Во всей этой схеме. Однако для виртуалки за роутером я решил что сойдет.

sudo passwd wwwdata # задаем пароль для www-data

И в файле

/etc/passwd правлю строку:

wwwdata:x:33:33:wwwdata:/home:/bin/bash

Обрати внимание что я сменил и папку юзера на ту, которую буду монтировать. Перезагружаю виртуалку и все — под www-data можно логиниться и монтировать диски.

Права на вновь создаваемые папки и файлы под SSHFS-Win

Для задания нужных прав у WinFSP есть опции

create_file_umask  и

create_dir_umask . Их можно использовать в командной строке, однако проще в SSHFS-Win-Manager . Смотри картинки ниже.

Настройки SSHFS-Win-Manager

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

Здесь я создал два диска с одной буквой. Все эти маунты ведут на одну и туже виртуалку VirtualBox. Но один на внутренний IP, а второй через внешний динамический IP (через роутер с проброшенными портами на 80, 443 и ssh). Т.е. дома я монтирую верхний вариант и проброс в роутере могу вообще закрыть. А если работаю вне дома, то монтирую нижний. При этом для PhpStorm это всегда один и тотже локальный диск V. Невероятно удобно.

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

На этой картинки расширенные настройки, которые позволяют выставить нужные мне права (0755 / 0644). Если тебе нужны другие права гугли “permission umask ”.

На данный момент схема хорошо работает. На 4G Laravel проект под PhpStorm индексируется на 20-30 секунд, что более чем приемлемо.  Если есть что дополнить или вопросы — пиши комменты (могут отлетать в премодерацию — это норма, я одобрю и отвечу). Также я есть в Телеграм.

There are various tools available to copy files and directories between Linux server. In this article we will use SSHFS to transfer files over SSH from local to remote and remote to local server.

You can also use below tools to copy files between Linux servers:

  • RSYNC — my personal favorite
  • SCP
  • NFS
  • HTTPS
  • SFTP
  • Samba

Overview on SSHFS

  • SSHFS (Secure SHell FileSystem) is a file system for Linux (and other operating systems with a FUSE implementation, such as Mac OS X or FreeBSD) capable of operating on files on a remote computer using just a secure shell login on the remote computer.
  • The sshfs command is a client tool for using SSHFS to mount a remote file system from another server locally on your machine.
  • SSHFS allows you to mount a remote directory from remote server on your local machine using a mount point, and have it treated just like any other directory.

ALSO READ: 4 ways to SSH & SCP via proxy (jump) server in Linux

Advantage of using SSHFS

  • Compared to other shared filesystem such as NFS and Samba we do not need any server or client side configuration
  • SSHFS is a simple client tool which does not requires any additional configuration
  • You can also use SSHFS to transfer files over SSH between Linux and Windows Server
  • The files are transferred in completely encrypted channel so it is very secure

Drawbacks of using SSHFS

  • You mount the remote directory on local server similar as NFS server but with transfer over SSH using SSHFS both encryption and decryption is involved which can cause performance impacts
  • You should also save your data on the mount point as if there is a network connection problem then you may loose your data

Transfer File over SSH between two Linux servers

Install SSHFS on Linux

SSHFS is an opensource project and is not available in most default repositories of distributions

To install SSHFS on RHEL/CentOS 7, we must first install EPEL repository

# yum -y install epel-release

HINT:

At the time of writing this article, SSHFS was not available for RHEL/CentOS 8

Next install sshfs on your client node

[root@server1 ~]# yum -y install sshfs

To install sshfs on Ubuntu and Debian

$ sudo apt install sshfs

ALSO READ: SOLVED: SSH fails with postponed publickey error

Mount Remote File System

To transfer files over SSH using SSHFS, we must execute SSHFS using below syntax:

sshfs [user@]host:[dir] mountpoint [options]

Check sshfs -h to get the complete list of supported options

In this example I have installed SSHFS on server1 and we will mount

Remote directory (/shared) from server2

[root@server2 ~]# ls -l /shared/
total 0
-rw-r--r-- 1 root root 0 May 17 19:21 file1
-rw-r--r-- 1 root root 0 May 17 19:21 file2
-rw-r--r-- 1 root root 0 May 17 19:21 file3

to my local Linux node on server1 at (/mount_point)

[root@server1 ~]# ls -l /mount_point/
total 0

So we must execute sshfs on server1, we are using root user to transfer files over SSH. You can use any normal user, but make sure this user has enough permission to access the remote directory on server2

[root@server1 ~]# sshfs root@192.168.43.10:/shared /mount_point
root@192.168.43.10's password:

There was no error reported so the mount was successful. Verify the mount point on server1

[root@server1 ~]# mount | grep shared
root@192.168.43.10:/shared on /mount_point type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)

You can now access the content of remote directory (/shared) from server2 on /mount_point directory on local Linux node at server1

[root@server1 ~]# ls -l /mount_point/
total 0
-rw-r--r--. 1 root root 0 May 17 19:21 file1
-rw-r--r--. 1 root root 0 May 17 19:21 file2
-rw-r--r--. 1 root root 0 May 17 19:21 file3

Now we can add and modify content under /mount_point at server1 and the changes will be reflected runtime on server2 at /shared

Snippet from my terminal

How to transfer files over SSH with SSHFS in Linux & Windows

Transfer files over SSH in Linux

ALSO READ: How to perform tar incremental backup with example in Linux

To permanently mount this remote directory use /etc/fstab using below syntax:

user@host:/remote/path  /local/mount_point  fuse.sshfs  defaults  0  0

In this example we will add below content in our /etc/fstab

root@192.168.43.10:/shared     /mount_point    fuse.sshfs    defaults   0  0

Un-mount Remote File System

Once you have transferred your files, you can also un-mount the remote file system using umount. Execute umount on server1:

[root@server1 ~]# umount /mount_point/

Verify and make sure there are no mount paths using /shared directory from remote server i.e. server2

[root@server1 ~]# mount | grep shared

Transfer File over SSH between Windows and Linux servers

  • You can also use SSHFS to transfer files over SSH between Windows and Linux server.
  • This can also be achieved using Samba but let us concentrate on SSHFS for the sake of this article

Install SSHFS on Windows

  • To transfer files over SSH between Windows and Linux, you must install SSHFS on the WIndows server.
  • You can get the files required to installed from the official Github page
  • Download WinFsp and follow the onscreen instructions to install WinFsp on your Windows server
    Download SSHFS-Win and follow the onscreen instructions to install SSHFS-Win on your Windows server
  • At the time of writing this article I have installed winfsp-1.6.20027.msi and sshfs-win-3.5.20024-x64.msi

ALSO READ: Downgrade Ubuntu to previous version? [100% Working]

Mount Remote File System

Once you have installed WinFsp and SSHFS-Win on your windows server, next we must map the network location from remote server to a local mount point

I am using WIndows 10 so I will share the instructions based on my environment.

In Windows Explorer select This PCMap Network Drive

How to transfer files over SSH with SSHFS in Linux & Windows

Map network Drive

Provide the path of your remote server and remote directory using the below syntax

\sshfsREMUSER@HOST[PATH]

NOTE:

Here we cannot directly give our mount point as /shared from our remote Linux server. We must use (/) to navigate around the Linux server. In this example we will connect to the home folder of our root user using

\sshfsroot@192.168.43.10

How to transfer files over SSH with SSHFS in Linux & Windows

Mount remote file system

Provide the login credentials for root user from the remote server i.e. server2

How to transfer files over SSH with SSHFS in Linux & Windows

login credential

If all is good, you will be connected to your remote Linux server using Windows server. You can verify the path in the Navigation Pane. By default we are connected to home folder of root user

How to transfer files over SSH with SSHFS in Linux & Windows

Transfer files over SSH between Windows and Linux

How to connect to different folder using SSHFS in Windows?

In Windows SSHFS we are by default connected to user’s home directory so we must provide the absolute path using navigation symbols i.e. to go to /shared directory our path to transfer files over SSH on Windows would be //sshfs/root@192.168.43.10/../shared

If you NOTICE, I have first changed my current directory using ../ followed by the path of /shared directory. I hope you understand the point.

ALSO READ: Add timestamp to SSHD DEBUG logs [100% Working]

How to transfer files over SSH with SSHFS in Linux & Windows

Provide different remote directory path

Now we are connected to /shared directory where we had created three dummy files on server2

How to transfer files over SSH with SSHFS in Linux & Windows

Transfer files over SSH between Linux and Windows

For list of Advanced Usage with Windows SSHFS, check the official Github page for instructions

Disconnect Remote File System

Once you are done, to disconnect the network drive, in Windows Explorer select This PC. Look out for your mapped drive and Right Click on the drive to get a list of options. Select Disconnect to remove the mapped drive from your Windows server.

How to transfer files over SSH with SSHFS in Linux & Windows

Disconnect mapped drive from Windows

Conclusion

Lastly I hope the steps from the article to configure NIC teaming on Linux was helpful. In this tutorial we learned about SSHFS and how we can use SSHFS to transfer files over SSH between two Linux servers or between Linux and Windows server. So, let me know your suggestions and feedback using the comment section.

References

I have used below external references for this tutorial guide
man page for sshfs
Windows SSHFS Github page

Понравилась статья? Поделить с друзьями:
  • Cif single chip драйвер скачать windows 10 x64 genius
  • Cif single chip драйвер скачать windows 10 genius web camera
  • Cif single chip windows 10 driver
  • Chuzzle deluxe скачать торрент для windows 10
  • Chuzzle deluxe скачать бесплатно полную версию для windows 10