Я хотел бы скопировать squid.conf
с одного сервера на другой.
- Серверы не общаются друг с другом. Я хотел бы пройти через мою рабочую станцию.
- Файл есть на обоих серверах, поэтому он будет перезаписан на цели.
- Файлы имеют
600
разрешение и принадлежат пользователю root. - вход в систему через ssh отключен (
PermitRootLogin no
). - Я хотел бы сделать это в одну строку, если это возможно, так как это будет частью руководства по установке.
Я знаю, чтобы сделать
ssh source 'tar czpf - -C /etc/squid/ squid.conf' | \
ssh target 'tar xzpf - -C /etc/squid/'
копировать файлы между серверами и сохранять разрешения. Однако в этом случае я получу «Отказано в доступе».
Я также знаю, что могу сделать это:
ssh -t source 'sudo cat /etc/squid/squid.conf'
Таким образом, -t
sudo может запрашивать пароль администратора перед выводом содержимого файла.
Проблема в том, что я не знаю, как объединить эти методы в то, что будет запрашивать пароль sudo на каждом сервере, и передавать файл по назначению. Это возможно?
ОБНОВЛЕНИЕ : Вот лучшее, что я мог придумать:
ssh -t source 'sudo tar czf /tmp/squid.tgz -C /etc/squid squid.conf' && \
ssh source 'cat /tmp/squid.tgz' | \
ssh target 'cat >/tmp/squid.tgz' && \
ssh -t source 'sudo rm /tmp/squid.tgz' && \
ssh -t target \
'sudo tar xzf /tmp/squid.tgz -C /etc/squid && sudo rm /tmp/squid.tgz'
Назвать это одной строкой кажется натяжкой. Я думаю, что я просто разбью его на отдельные шаги в руководстве по установке.
ssh
sudo
file-transfer
itsadok
источник
источник
Ответы:
Проще связать ssh с ssh, чем ssh с sudo. Так что изменение конфигурации сервера ssh - это нормально, я предлагаю открыть ssh для root каждого сервера, но только с локального хоста. Вы можете сделать это с помощью
Match
пункта вsshd_config
:Затем вы можете настроить цепочку аутентификации на основе ключей от удаленного пользователя до локального пользователя и от локального пользователя до root. У вас все еще есть журнал аутентификации, поэтому ваши журналы сообщают вам, кто вошел в систему как root, и шаги аутентификации такие же, как если бы был задействован sudo.
Чтобы подключиться к серверу от имени пользователя root, определите псевдоним
~/.ssh/config
следующим образом:Если вы настаиваете на использовании
sudo
, я считаю, что вам понадобятся отдельные команды, какsudo
настаивает на чтении с терминала (даже если у него есть билет для вашей учетной записи) ¹, и ни один из обычных методов копирования файлов (scp, sftp, rsync) Поддержка взаимодействия с удаленным терминалом.Придерживаясь ssh и sudo, предложенные вами команды могут быть упрощены. С каждой стороны, если вы настроили sudo, чтобы не запрашивать пароль снова, вы можете запустить его один раз, чтобы закончить с требованием пароля, и еще раз, чтобы скопировать файл. (Вы не можете легко скопировать файл напрямую, потому что мешает запрос пароля.)
¹ если нет
NOPASSWD
, но тогда вы бы об этом не спрашивали.источник
Match host localhost
.Вы можете настроить,
sudo
чтобы не спрашивать пароль следующим образом:По источнику:
На цели:
И сделать на юре машину:
Но я рекомендую использовать что-то вроде марионетки . Это намного лучше и проще решает вашу проблему с распределением конфигурационных файлов.
PS. Кстати, если вы настроите
sudo
запрос пароля у пользователя,[sudo] password for user
в целевом файле появится строка с .источник
Вместо использования ssh вы можете использовать scp для передачи файла между серверами.
Войдите на целевой сервер:
Перейдите в целевой каталог, куда вы хотите скопировать файл.
r - рекурсивный p - сохраняет время модификации, время доступа и режимы из исходного файла
источник
Не изменяя конфигурацию ssh, вы можете создать два туннеля ssh host-> server1 и server2-> host через соединение ssh с server2. Соедините эти два туннеля на главном компьютере (тот же порт). И запустите sudo на сервере server2, чтобы получить данные из подключенных туннелей на сервере server1 и сохранить их на сервере server2.
Идея состоит в том, чтобы: 1 - создать локальный туннель от вашего компьютера до исходного компьютера через порт 60000
1b- Создайте удаленный туннель, чтобы добраться до вашей машины
2 - подключиться к целевой машине
3 - запустите все как root на целевой машине для записи
4 - подключиться к исходной машине через туннель. whoami и на localhost означают localhost на машине $ {target}.
5- упакуйте удаленный файл (ы) и отправьте его в stdout в сжатом виде
6 - получить пакет через стандартный вывод и распаковать файлы соответственно в каталог / path / to / target
Примечание. Вы можете получить до 3 подтверждений sshkey и 3 запроса пароля. Но файлы будут скопированы.
источник