Подключение сетевого диска (расшареной папки) на Alt Linux

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Подключение сетевого диска (расшареной папки) на Alt Linux

Сообщение Артём Мамзиков »

Подключение сетевого диска (расшареной папки) на Alt Linux
монтирование сетевого диска.

Подключение данным скриптом проверено на Alt Linux 8

05.06.2021 На некоторых ПК
выходила ошибка
mount error(121): Remote I/O error
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Пришлось добавить в команды vers=2.1
PASSWD="$p" mount "//$fs" "$mountdir" -o username="$l",vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777
echo -e "//$fs $mountdir cifs vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777,suid,credentials=$pwdfile 0 0\n" >> /etc/fstab


Скачать
shareconnect.zip
shareconnect.zip
(1.88 КБ) 55 скачиваний
Что делает скрипт:
0. От монтирование старой папки (была под гостем) иначе будет ошибка
1. Определяет текущую сеть и поставляет ip файлового сервера с рашареной папкой. Пример 192.168.121.7/docs
2. Так как сrрипт запускается удалено под ssh root, нужно указать вывод графического интерфейса пользователю (это как vnc настройки)
3. Далее получаем переменные от пользователя (Логин Пароль для подключения сетевой папки с файлового через доменную учетку)
4. Проверяем что путь правильно сформировался
5. Создаем папку для монтирования /mnt/docs
6. Проверяем что директория создалась
7. Проверка что ведены логин пароль, а не пустые строки
8. Пробуем тестовое монтирование, что логин пароль и путь указанные верно
9. Бейкапим конфиг, удаляем старый логин пароль строку для гостя.
10. Шифруем пароль сохраняем в отдельный файл в шифрованном виде
11. Прописываем новую строку авторизации в файл /etc/fstab
12. Выводим результат об удачном монтировании, если где то ошибка начинаем сначала.

shareconnect.sh

Код: Выделить всё

#!/bin/sh

# Отмонтировать старую папку
umount /mnt/docs

# IP Хоста
ip=`hostname -i`

#Разбираем IP адрес по точкам, берем первые 3 блока и подставляем .7
SAVEIFS=$IFS
IFS='.'
read -a iparr <<< "$ip"
IFS=$SAVEIFS

# Подставляем начало IP
fs=${iparr[0]}.${iparr[1]}.${iparr[2]}.7
# Получаем IP путь след вида переменная fs="xxx.xxx.xxx.7/docs"
fs="$fs/docs"

# Выбираем экран для вывода графического запроса пользователю
export DISPLAY=:0.0; export XAUTHORITY='/var/run/lightdm/root/:0';

while true; do
# Запрашиваем Данные у пользователя и заносим их в переменные
    fsq=$(zenity --entry --title="Монтирование ФС" --text="Адрес подключения:" --entry-text="$fs")
    l=$(zenity --entry --title="Монтирование ФС" --text="Введите имя пользователя (логин почты Zimbra):")
    p=$(zenity --entry --title="Монтирование ФС" --text="Введите пароль (пароль почты Zimbra):" --hide-text)

# Разбираем путь по слешу / подставляем второе значение docs
    SAVEIFS=$IFS
    IFS='/'
    read -a fsp <<< "$fsq"
    IFS=$SAVEIFS

# Выводим 2 значение docs
    mountdir=${fsp[1]}
# Проверяем что в строке не 0 символов, если 0 то ошибка , нет продолжаем
    if [ -z "$mountdir" ]; then
        zenity --error --title="Монтирование ФС" --text="1-Не удалось! Попробуйте снова."
        continue
    fi
# Создаем каталог mkdir "/mnt/docs"
    mountdir="/mnt/$mountdir"
    mkdir "$mountdir" > /dev/null 2>&1

# Проверка существования дириктории
    if ! [ -d "$mountdir" ]; then
        zenity --error --title="Монтирование ФС" --text="2-Не удалось! Попробуйте снова."
        continue
    fi
# Проверяем что в строках не 0 символов т.е. есть логин пароль
    if [[ -n "$l" && -n "$p" ]]; then
		# Путь на подключение fs="xxx.xxx.xxx.7/docs"
        fs="$fsq"
		# Пробуем монтируем папку, проверяем
        #mount "//$fs" "$mountdir" -o username="$l",password="$p",iocharset=utf8,file_mode=0666,dir_mode=0777
		PASSWD="$p" mount "//$fs" "$mountdir" -o username="$l",vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777
		#PASSWD="$p" mount "//$fs" "$mountdir" -o dom="csvvo",username="$l",iocharset=utf8,file_mode=0666,dir_mode=0777
		
# Пример что должно выйти
#mkdir "/mnt/docs"
#mount "//xxx.xxx.xxx.7/docs" "/mnt/docs" -o username="Логин",password="Пароль",iocharset=utf8,file_mode=0666,dir_mode=0777

		# Входная переменная с проверки, результат
        res=$?
		# Если результат монтирования 0=0 то сохраняем настройки, удалив предыдущие
        if [[ $res -eq "0" ]]; then
			# Делаем бэйкап файла с текущей датой, перед изменениями
            cp /etc/fstab /etc/fstab.$(date +%d%m%Y%H%M%S)

            #Если переменная содержит /mnt/docs и = /mnt/docs
            if [ "${mountdir}" == "/mnt/docs" ]; then
				# Удалить строку содержащую /mnt/docs
                sed -i '/\/mnt\/docs/d' /etc/fstab
            fi
            #Передаем логин пароль в криптографические стойки генератора псевдослучайных чисел
            pwdfile=/root/.`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1`.pwd
			# Создаем шифрованный файл с логином паролем построчно в папке root и даем права
			echo -e "username=$l\npassword=$p" > $pwdfile && chmod 600 $pwdfile

            # удаляем символы перевода строки
            sed -i '/^$/d' /etc/fstab
            # Добавляем строку монтирования в файл fstab
            echo -e "//$fs    $mountdir    cifs    vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777,suid,credentials=$pwdfile    0    0\n" >> /etc/fstab

            zenity --info --title="Монтирование ФС" --text="Всё ГУД!"
            break
        else
            zenity --error --title="Монтирование ФС" --text="3-Не удалось! Попробуйте снова."
        fi
    fi
done
Инструкция Скрипт Для подключения общего ресурса Windows

Резервный случай если отвалилась связь и сервер не загрузил с ldap учетные записи , никто зайти в общий ресурс не сможет
Так как есть Учетки Администраторов домена и они же Локальные временно до перезапуска хостов выполним вход от этой учетки.
Стоит учесть что данным способом для всех хостов пользователей применяются одинаковые права доступа!
Seti-shareconnect.sh
Показать
#!/bin/bash
# Автор Мамзиков Артём Андреевич 2021.06.10
echo "Seti-shareconnect.sh"

# Получим текущую подсеть
IP=`ip address|sed 's/inet//'|grep -E '192.168.*.5|172.16.*.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'`

# Список IP которые пропускаем
skip="$IP.1$\|$IP.3$\|$IP.5$\|$IP.7$\|$IP.10$\|$IP.15$\|$IP.75$\|$IP.253$"

# Выберем доступные хосты где есть пинг
IPHOST=`nmap -sn "${IP}".0/24|grep -E "Nmap scan report for "|sed 's/Nmap scan report for //'|sed 's/[()]//g'|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|sed -e "s/$skip//g"|sed -e '/^$/d'`

#echo "${IPHOST}"

# Переменные логина пароля для подключения к хосту
USER=root
PASS=Пароль

# Логин пароль для подключения к общей папке
DOCSLOGIN=MamzikovAA
DOCSPASS=Пароль

# Переменные IP для перебора подсетей
for IPH in $IPHOST
do

/usr/bin/expect<<EOF
# spawn - вызов программы
# expect - ожидание вывода запущенной программой строки (дословно: ожидаем, что скажет выполняемая программа);
# send - передача данных или команд в вызванную программу (выполняется так, как будто вы сами набираете команды в консоли)
# close - завершение сценария

# Время ожидания
set timeout 7
# Подключаемся по ssh
spawn ssh -p 22 $USER@$IPH
# Если выходит запрос потверждаем yes
expect {
"(yes/no)?*" {
send "yes\r"
}
}
# Ждем строку запроса пароля password:
expect "word:"
# Водим пароль
send "$PASS\r"
# Ждем строку для ввода команд от root #
expect "#*"
# Создадим дирикторию
send "mkdir '/mnt/$mountdir' > /dev/null 2>&1\r"
# Ждем строку для ввода команд от root #
expect "#*"
# До перезапуска подключим общую папку
send "mount '//$IP.7/docs' '/mnt/docs' -o username='$DOCSLOGIN',password='$DOCSPASS',iocharset=utf8,file_mode=0666,dir_mode=0777\r"
# Время ожидания установки
set timeout 5
# Проверяем что перешли в папку root
expect "~]#*"
set timeout 3
expect eof
# Выполняем выход из сеанса
send "exit\r"
EOF

done
Скачать
Резервный временный способ.zip
Резервный временный способ.zip
(1.63 КБ) 32 скачивания
Как переподключить, без перезагрузки если во время работы смонтированный диск отвалился.
# a, --all - примонтировать все устройства, описанные в fstab; (Обратите внимание, что если вы добавите файл подкачки в свой fstab, mount -aон не будет включен : вы захотите запустить swapon -a.)
mount -a

Можно прописать в крон или вывести ярлык

Код: Выделить всё

#!/bin/bash
# reconnecting-mout

# создадим файл для проверки
#echo "Proverka mount" > /mnt/docs/access
# Проверка доступности общей папки
#if [[ `ls -aF /mnt/docs |grep -av "/" | grep "access"` != "access" ]]

# Проверка через память диска
if [[ `timeout 5 df -h|grep "/mnt/docs"` = "" ]]
then
# a, --all - примонтировать все устройства, описанные в fstab;
mount -a
fi
Еще был такой скрипт.
reconnecting-mout.sh

Код: Выделить всё

#!/bin/bash
# reconnecting-mout

# Выберем строку для переподключения сетевого диска.
dan=$(cat /etc/fstab|grep "/mnt/docs"|grep -o '.*pwd')

#auth=$(echo "${dan}"|sed 's|.*credentials=||'|xargs -I {} bash -c 'cat {}'|sed ':a;N;$!ba;s/\n/,/g')
#echo "${auth}"

us=$(echo "${dan}"|sed 's|.*credentials=||'|xargs -I {} bash -c 'cat {}'|sed 's|username=||'|sed 's/pas.*//g'|tr -d ' ')
pwd=$(echo "${dan}"|sed 's|.*credentials=||'|xargs -I {} bash -c 'cat {}'|tr -d '\n'|sed 's|.*password=||'|tr -d ' ')
#echo $us $pwd

put=$(echo "${dan}"|sed 's|cifs.*||')

# Отмонтировать старую папку
#umount /mnt/docs
#mkdir "/mnt/docs"
# Повторное подключение
#mount $put-o "${auth}",iocharset=utf8,file_mode=0666,dir_mode=0777

PASSWD="${pwd}" mount $put cifs -o username="${us}",vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777
#echo PASSWD="${pwd}" mount $put-o username="${us}",vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777

# Пример:
#mount "//xxx.xxx.xxx.7/docs" "/mnt/docs" -o username="Логин",password="Пароль",iocharset=utf8,file_mode=0666,dir_mode=0777
#PASSWD=Пароль mount //xxx.xxx.xxx.xxx/docs /mnt/docs -o username=Логин,vers=2.1,iocharset=utf8,file_mode=0666,dir_mode=0777
количество слов: 904
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Подключение сетевого диска (расшареной папки) на Alt Linux

Сообщение Артём Мамзиков »

Разово до перезагрузки открыть расшареную папку можно зайдя в СЕТЬ выбрать нужную рабочую группу и ПК
Либо в адресной строке набрать smb://192.168.xxx.xxx или имя ПК , далее логинимся и получаем доступ до перезагрузки.

Как это было все вручную

1. Монтирование общей сетевой папки.
Все действия выполняются под суперпользователем root.
Отличие то что вы находитесь под пользователем или администратором root
Пользователь [имя_пользователя@имя_компьютера текущая папка] $ означает что вы работает под обычным пользователем $
Администратор [root@имя_компьютера текущая папка] # означает что вы работаете под Администратором #
1.1. Авторизуемся в терминале под пользователем root:
su
переход под su.jpg
переход под su.jpg
su это супер пользователь т.е. root

Вводим пароль суперпользователя администратора root который задавали при установке системы

1.2. Создаем каталог docs (docs - это расшареная папка не сервере доступ к ней без паролей) в каталоге /mnt. В этот каталог будем монтировать общий сетевой ресурс:
mkdir /mnt/docs
создание папки общей папки.jpg
создание папки общей папки.jpg
1.3. Например Монтируем сетевой каталог:
mount //192.168.203.7/docs /mnt/docs -o username=user
где
//192.168.203.7/docs – сетевой каталог,
/mnt/docs – точка монтирования, каталог, в который монтируем сетевой ресурс,
user – имя пользователя для входа на сетевой ресурс.
монтируем сетевой каталог.jpg
монтируем сетевой каталог.jpg
Вводим пароль для пользователя user.

1.4. Проверяем каталог /mnt/docs:
ls /mnt/docs
просмотр смонтировался ли каталог.jpg
просмотр смонтировался ли каталог.jpg
Должен отобразиться список содержимого смонтированного общего сетевого каталога

2. Автомонтирование сетевого каталога при загрузке компьютера.
Все действия выполняются под суперпользователем root.
2.1. Авторизуемся в терминале под пользователем root:
su
переход под su.jpg
переход под su.jpg
Вводим пароль суперпользователя

2.2. Добавляем права обычному пользователю на выполнение монтирования (команды mount -a). Для этого открываем на редактирование файл /etc/sudoers:
pluma /etc/sudoers
редактируем конфиг судореза.jpg
редактируем конфиг судореза.jpg
2.3. Добавляем в конец файла следующую строчку:
user ALL=NOPASSWD: /bin/mount -a
добавим строку в конфиг судореза.jpg
добавим строку в конфиг судореза.jpg
Сохраняем и закрываем файл.

2.4. Добавляем монтирование сетевого ресурса в автозагрузку
Для этого открываем на редактирование файл /etc/fstab
pluma /etc/fstab
монтирование в автозагрузку.jpg
монтирование в автозагрузку.jpg
2.5. Добавляем в конец файла следующую строчку (параметры разделены табуляцией):
//192.168.203.7/docs /mnt/docs cifs iocharset=utf8,uid=500,gid=500,suid,workgroup=workgroup,credentials=/root/password.txt 0 0
где
//192.168.203.7/docs – сетевой каталог,
/mnt/docs – точка монтирования - каталог, в который монтируем сетевой ресурс,
/root/password.txt – файл, содержащий логин и пароль для входа на сетевой ресурс (см. пункт 2.6.)
монтирование прописываем строку.jpg
монтирование прописываем строку.jpg
Сохраняем и закрываем файл.

2.6. Создаем файл password.txt, содержащий логин и пароль для входа на сетевой ресурс.
pluma /root/password.txt
создаем файл для переменных логина пароля.jpg
создаем файл для переменных логина пароля.jpg
2.7. Добавляем в созданный файл следующие строчки
username=user
password=pass
где
user – имя пользователя для входа на сетевой ресурс,
pass – пароль пользователя user для входа на сетевой ресурс.
В примере на скриншоте имя пользователя для входа на сетевой ресурс – spec1, а пароль пользователя spec1 для входа на сетевой ресурс 00000
файл для переменных логина пароля.jpg
файл для переменных логина пароля.jpg
Сохраняем и закрываем файл.

2.8. Создаем скрипт mount.sh перемонтирования всех устройств, на случай если автомонтирование из fstab выполнится раньше, чем инициализируется сетевое подключение.
pluma /home/mount.sh
где
/home/mount.sh – полный путь к файлу скрипта
скрипт монтирования.jpg
скрипт монтирования.jpg
2.9. Добавляем в файл /home/mount.sh следующие строчки:
#!/bin/sh
sudo mount -a
exit 0
скрипт монтирования содержание.jpg
скрипт монтирования содержание.jpg
Сохраняем и закрываем файл.

2.10. Даем права на выполнение созданного в п. 2.8 скрипта
chmod 775 /home/mount.sh
права на скрипт монтирования.jpg
права на скрипт монтирования.jpg
2.11. Помещаем скрипт в Запускаемые приложения
На панели вверху экрана выбрать «Система» – «Параметры» – «Запускаемые приложения».
В запускаемые приложения добавить.jpg
В запускаемые приложения добавить.jpg
В появившемся окне нажимаем кнопку «Добавить»
Откроется окно добавления нового запускаемого приложения:
новая автоматическая запускаемая программа mount.jpg
новая автоматическая запускаемая программа mount.jpg
В данном окне заполняем поля:
«Имя» - имя запускаемого приложения (можно придумать любое),
«Команда» - путь к созданному файлу скрипта.
Нажимаем кнопку «Добавить».
Скрипт добавлен в автозапуск.

2.12. Перезагружаем компьютер и проверяем автомонтирование. Если все сделано правильно, то в каталог /mnt/docs/ будет смонтировано содержимое общего сетевого каталога.


Или еще один вариант скрипта
#!/bin/bash

# Переменные
user=имя пользователя
passworduser=пароль учетки пользователя
imyauchetnoj=имя учетки
IPFS=192.168.321.7

# Общая папка
# Создать каталог
mkdir /mnt/docs
# Дать парва
chmod 777 /mnt/docs
# Монтируем сетевой каталог
mount //$IPFS/docs /mnt/docs -o username=$user
# Создать ярлык на рабочий стол
ln -s /mnt/docs/ "/home/$imyauchetnoj/Рабочий стол/Общая"
# Добавление прав пользователю
echo "$user ALL=NOPASSWD: /bin/mount -a" >> /etc/sudoers
# Добавим в fstab Каждая строчка описывает раздел, который нужно примонтировать
echo "//$IPFS/docs /mnt/docs cifs iocharset=utf8,uid=500,gid=500,suid,workgroup=workgroup,credentials=/root/password.txt 0 0" >> /etc/fstab
# Создать файл с логин паролем
{
echo "username=$user"
echo "password=$passworduser"
} > /root/password.txt
# Создать скрипт
{
echo '#!/bin/sh'
echo 'sudo mount -a'
echo 'exit 0'
} > /home/mount.sh
# дать права
chmod 775 /home/mount.sh
# Вынести скрипт на рабочий стол
ln -s /home/mount.sh "/home/$imyauchetnoj/Рабочий стол/Если не открывается Общая папка"
# Дать права
chmod +x /home/mount.sh
# Монтируем
mount -a
# ?Добавить скрипт в автозагрузку (например в крон при включении) /home/mount.sh
количество слов: 306
Ответить Вложения 17 Пред. темаСлед. тема

Вернуться в «Linux»