Chtěl bych zkopírovat squid.conf
z jednoho serveru na druhý.
- Servery spolu nemluví. Chtěl bych projít svou pracovní stanici.
- Oba servery mají soubor, takže bude přepsán na cíli.
- Soubory mají
600
oprávnění a jsou vlastněny uživatelem root. - Přihlášení root přes ssh je zakázáno (
PermitRootLogin no
). - Chtěl bych to udělat v jednom řádku, pokud to bude možné, protože to bude součástí průvodce nastavením.
Vím to udělat
ssh source 'tar czpf - -C /etc/squid/ squid.conf' |
ssh target 'tar xzpf - -C /etc/squid/'
pro kopírování souborů mezi servery a zachování oprávnění. V tomto případě se mi však zobrazí „Povolení odepřeno“.
Také vím, že mohu udělat toto:
ssh -t source 'sudo cat /etc/squid/squid.conf'
Tímto způsobem -t
umožňuje sudo požádat o heslo správce před výstupem obsahu souboru.
Problém je v tom, že nevím, jak tyto techniky zkombinovat do něčeho, co bude vyžadovat sudo heslo na každém serveru a přenést soubor na místo určení. Je to možné?
AKTUALIZACE :Tady je to nejlepší, co jsem mohl vymyslet:
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'
Nazývat to jednovrstvým se zdá být oříšek. Myslím, že to v průvodci nastavením rozdělím na samostatné kroky.
Přijatá odpověď:
Je snazší řetězit ssh s ssh než řetězit ssh pomocí sudo. Takže změna konfigurace ssh serveru je v pořádku, doporučuji otevřít ssh pro root každého serveru, ale pouze z localhost. Můžete to udělat pomocí Match
klauzule v sshd_config
:
PermitRootLogin no
Match Host localhost
PermitRootLogin yes
Poté můžete nastavit klíčový autentizační řetězec od vzdáleného uživatele k místnímu uživateli a od místního uživatele k rootovi. Stále máte ověřovací stopu, takže vaše protokoly vám řeknou, kdo se přihlásil jako root, a kroky ověření jsou stejné, jako kdyby šlo o sudo.
Chcete-li se připojit k serveru jako root, definujte alias v ~/.ssh/config
takhle:
Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"
Pokud trváte na použití sudo
, Věřím, že budete potřebovat samostatné příkazy, jako sudo
trvá na čtení z terminálu (i když má lístek pro váš účet)¹ a žádná z obvyklých metod kopírování souborů (scp, sftp, rsync) nepodporuje interakci se vzdáleným terminálem.
Pokud zůstanete u ssh a sudo, vaše navrhované příkazy by mohly být zjednodušeny. Na každé straně, pokud máte sudo nastaveno tak, aby se znovu nepožadovalo heslo, můžete jej spustit jednou, abyste překonali požadavek na heslo, a jindy pro zkopírování souboru. (Soubor nelze snadno přímo zkopírovat, protože vám překáží výzva k zadání hesla.)
ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'
¹ pokud nemáte NOPASSWD
, ale pak byste se na to neptal.