GNU/Linux >> Znalost Linux >  >> Linux

Ssh – Kopírování chráněných souborů mezi servery v jednom řádku?

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.

Související:způsob, jak určit, aby část potrubí byla zcela „průchozí“?

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.


Linux
  1. Jak přenášet soubory mezi servery v Linuxu pomocí SCP a FTP

  2. Společné řádky mezi dvěma soubory?

  3. Kontrola stavu jednoho řádku v Makefile?

  1. Tisknout dva soubory ve dvou sloupcích?

  2. Přesuňte všechny soubory kromě jednoho

  3. Nejlepší způsob přenosu souborů přes LAN mezi dvěma počítači se systémem Linux

  1. Vykonat řadu příkazů jedním sudem?

  2. Zrychlete kopírování 1 000 000 malých souborů?

  3. Jednořádkový FTP server