Нукусский филиал ташкентского университета информационных технологии имени мухаммеда аль-хоразмий


Работа с сервером. настраиваем сервер


Download 310.26 Kb.
bet5/7
Sana15.06.2023
Hajmi310.26 Kb.
#1477137
TuriСамостоятельная работа
1   2   3   4   5   6   7
Bog'liq
Ерханов Шахзод СР

Работа с сервером.
настраиваем сервер


Давайте рассмотрим доступ к ssh на сервере серверов. В этом случае мы будем использовать метод authorized_keysдля аутентификации пользователей. Мы подразумеваем, что вы используете стандартный дистрибутив linux типа ubuntu.

Примечание

Вместо ручного использования и использования ключей, многое из описанного ниже может быть использовано для использования команды ssh-copy-id.

Для начала создадим пользователя gitи каталог .sshдля этого пользователя:
Затем вам необходимо добавить sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
одимо добавить открытое ssh-соединение в файл authorized_keysпользователя git. У вас уже есть несколько таких ключей и выявляются их во временных файлах. Напомним, открытый ключ выглядит примерно так:
$ cat /tmp/id_rsa.john.pub
Ssh-rsa aaaab3nzac1yc2eaaaadaqabaaabaqcb007n/ww+oun4gslkssmxxnbovf9lgt4l
Ojg6rs6hpb09j9r/t17/x4lhja0f3fr1rp6kybrswj2athgw6hxlm9/5zytk6ztg3rpkk+4k
Yjh6541nysneazuxz0jttyaufrtu3z5e003c4oxoj6h0rfif1kki9maqlmdpgw1gyeigs9ez
Sdfd8acciictdwbqlacu4upkax8kygllwsnuugztobf8m72alc/nlf6jltpofwfblgc+myiv
O7tcusbdlqlgmvofq1i2upwqokowqahukeomfjy2jctxsdbq220ymjansht4kgtzg2ayygpq
Dav8jggjicuvax2t9va5 gsg-keypair
Вы просто производите их в файле .ssh/authorized_keysв домашнем каталоге пользователя git:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Теперь вы можете создать пустой репозиторий для них, запустив git initс параметром --bare, что инициализирует репозиторий без рабочего каталога:
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty git repository in /srv/git/project.git/
После этого джон джози или джессика отправил первую версию своего проекта в этот репозиторий, выбрал его как удаленный и отправленный в соответствующую ветку. Заметьте, что кто-то должен заходить на сервер и создавать голый репозиторий каждый раз, когда вы хотите добавить проект. Пусть gitserver — имя хоста сервера, на которое вы влияете пользователя gitи репозиторий. Если он находится в вашей внутренней сети и вы учитываете запись dns для gitserver, указывающую на этот сервер, то можно использовать возможную команду как есть (считая, что myprojectэто существующий проект с файлами):
# на компьютере джона
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
Теперь все остальные могут клонировать его и отправлять в него изменения:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim readme
$ git commit -am 'fix for readme file'
$ git push origin master
Этим способом вы можете быстро получить git-сервер с доступом к чтению/запись для небольшой группы участников.
Заметьте, что теперь все эти пользователи заходят на сервер в качестве пользователя git. Чтобы это предотвратить, нужно изменить любую оболочку на что-то другое в файле /etc/passwd.
Вы можете легко ограничить пользователя gitтолько действиями, осуществляемыми с git, с использованием ограниченной транспортировки git-shell, поставляемой вместе с git. Если ее указать в качестве командного интерпретатора для пользователя git, то он не сможет получить доступ к обычной командной оболочке на предстоящем сервере. Для ее использования используется git-shellвместо bash или csh для пользователя git. Для этого вы должны сначала добавить git-shellв /etc/shellsесли ее там еще нет:
$ cat /etc/shells # посмотрим, присутствует ли `git-shell`. Если нет...
$ which git-shell # проверим, что `git-shell` установлена.
$ sudo -e /etc/shells # и добавим путь к `git-shell` из предыдущей команды
Теперь можно изменить оболочку для пользователя, используя chsh -s :
$ sudo chsh git -s $(which git-shell)
Теперь пользователь gitможет использовать соединение ssh только для работы с репозиториями git и не может зайти на машину. Если вы попробуете войти в систему, то вход будет отклонен:
$ ssh git@gitserver
Fatal: Interactive git shell is not enabled.
Hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
На момент использования все еще можно использовать перенаправление порта ssh для доступа к другому серверу git, к которому можно подключиться. Если это необходимо, вы можете добавить опции в файл authorized_keysперед темами ключей, для которых необходимо применить это обнаружение:
No-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty
В результате файл будет выглядеть следующим образом:
$ cat ~/.ssh/authorized_keys
No-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty ssh-rsa
Aaaab3nzac1yc2eaaaadaqabaaabaqcb007n/ww+oun4gslkssmxxnbovf9lgt4lojg6rs6h
Pb09j9r/t17/x4lhja0f3fr1rp6kybrswj2athgw6hxlm9/5zytk6ztg3rpkk+4kyjh6541n
Ysneazuxz0jttyaufrtu3z5e003c4oxoj6h0rfif1kki9maqlmdpgw1gyeigs9ezsdfd8acc
Iictdwbqlacu4upkax8kygllwsnuugztobf8m72alc/nlf6jltpofwfblgc+myivo7tcusbd
Lqlgmvofq1i2upwqokowqahukeomfjy2jctxsdbq220ymjansht4kgtzg2ayygpqdav8jggj
Icuvax2t9va5 gsg-keypair
No-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty ssh-rsa
Aaaab3nzac1yc2eaaaadaqabaaabaqdewennmomtboyi+ljieaay16qixih3wuvenhbg...
Теперь сетевые команды git будут работать, но пользователям не нужно заходить на сервер. Вы также можете создать подкаталог в домашнем каталоге пользователя git, чтобы немного изменить поведение git-shell. Например, вы можете отказаться от использования git, которые будут приниматься или получать сообщения, которые увидят пользователи, если попытаются зайти по ssh. Для получения дополнительной информации по установке git help shell.
Команда git pull используется для извлечения и загрузки содержимого из удаленного репозитория и немедленного обновления локального репозитория этим содержимым. Слияние удаленных вышестоящих изменений в локальный репозиторий — это обычная задача рабочего процесса, возникающая при совместной работе на основе системы git. Команда git pull на самом деле представляет собой комбинацию двух других команд: Git fetch и git merge. На первом этапе git pull выполняется команда git fetch, ограниченная локальной веткой, на которую указывает head. Сразу после загрузки содержимого команда git pull выполняет слияние. Для слитого содержимого создается новый коммит, а указатель head обновляется и начинает указывать на этот новый коммит.

Использование git pull

Порядок действий


Сначала команда git pull запускает команду git fetch для загрузки содержимого из указанного удаленного репозитория. Затем выполняется команда git merge, объединяющая ссылки и указатели удаленного содержимого в новый локальный коммит слияния. Чтобы лучше продемонстрировать процесс извлечения и слияния, рассмотрим пример. Предположим, у нас есть репозиторий с главной веткой main и удаленный репозиторий origin.

В этом сценарии команда git pull загрузит все изменения, начиная с того места, где разошлись локальная и главная ветки. В данном примере это точка e. Команда git pull получит удаленные коммиты из отходящей ветки (т. Е. Точки a‑b‑c). Затем в процессе запуска команды pull будет создан новый локальный коммит слияния, включающий содержимое новых удаленных коммитов из отходящей ветки.

На вышеприведенной схеме мы видим новый коммит h. Это коммит слияния, в который входит содержимое удаленных коммитов a‑b‑c и который имеет общее сообщение в журнале. Этот пример демонстрирует одну из нескольких стратегий слияния с помощью команды git pull. Чтобы сделать перебазирование, а не коммит слитого содержимого, укажите для команды git pull параметр --rebase. В следующем примере демонстрируется, как работает перебазирование с помощью команды pull. Предположим, что мы находимся в начальной точке нашей первой схемы и выполнили команду git pull --rebase.

На этой схеме видно, что при перебазировании с помощью команды pull не был создан новый коммит h. Вместо этого удаленные коммиты a‑b‑c были скопированы и добавлены в историю в локальной ветке origin/main перед локальными коммитами e–f–g с перезаписью последних.
Команда git push используется для выгрузки содержимого локального репозитория в удаленный репозиторий. Она позволяет передать коммиты из локального репозитория в удаленный. Эта команда симметрична команде git fetch: При извлечении с помощью fetch коммиты импортируются в локальные ветки, а при публикации с помощью push коммиты экспортируются в удаленные ветки. Настроить удаленные ветки можно с помощью команды git remote. Команда push может перезаписать изменения, поэтому при ее использовании следует соблюдать осторожность. Эти проблемы обсуждаются ниже.

Использование git push


Git push  
Публикация указанной ветки в удаленном репозитории вместе со всеми необходимыми коммитами и внутренними объектами. Эта команда создает локальную ветку в репозитории назначения. Чтобы предотвратить перезапись коммитов, git не позволит опубликовать данные, если в репозитории назначения нельзя выполнить ускоренное слияние.
Git push  --force
Аналогично приведенной выше команде, однако данные будут опубликованы принудительно, даже если нельзя выполнить ускоренное слияние. Не используйте флаг --force, если вы не уверены в своих действиях.
Git push  --all
Публикация всех локальных веток в указанном удаленном репозитории.
Git push  --tags
При публикации ветки или использовании опции --all теги не публикуются автоматически. Флаг --tags отправляет все локальные теги в удаленный репозиторий.

Download 310.26 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling