GNU/Linux >> Znalost Linux >  >> Linux

Proč přidání místní IP a uživatelského jména do scp vrátí chybu veřejného klíče?

Důležitá poznámka:Stroj, kterému říkáte „místní stroj“, je zcela irelevantní. Skutečný příběh začíná, když už jste na 100.100.100.1 . V kontextu scp a v kontextu této odpovědi je "místní" stroj, kde je scp je vámi vyvoláno.

Proč selže první [příkaz]?

Pokusili jste se kopírovat mezi dvěma (formálně) vzdálenými hostiteli. scp rozpozná [email protected]:/path/1/ jako nemístní cestu. Nezáleží na tom [email protected] ukazuje na místní stroj. Nástroj nekontroluje (a neměl by) kontrolovat, zda adresa, která vypadá jako vzdálená, odkazuje na místní počítač. Pouhým odkazem na zdroj, jako by byl vzdálený, jste vytvořili scp zacházet s ním jako se vzdáleným přístupem. Také cíl byl vzdálený.

Kopírování mezi dvěma vzdálenými hostiteli lze provést s nebo bez -3 možnost:

-3
Kopie mezi dvěma vzdálenými hostiteli jsou přenášeny prostřednictvím místního hostitele. Bez této možnosti se data kopírují přímo mezi dvěma vzdálenými hostiteli. […]

Tučný fragment se vztahuje na váš případ (i když vaše scp nepodporuje -3 ).

Pokud používáte -v s vaším prvním příkazem

scp -v -i ~/keyfile -r [email protected]:/path/1/ [email protected]:/path/2/

uvidíte scp připojí se z místního hostitele ke zdrojovému hostiteli ("náhodou" je to stejný hostitel) pomocí klíče zadaného pomocí -i . (Zřejmě je hostitel nakonfigurován tak, aby tento klíč akceptoval, pravděpodobně proto, že druhý server používá k připojení identický klíč.)

Poté uvidíte další scp je vyvolán na zdrojovém hostiteli. Příkaz je:

scp -v -r /path/1/ [email protected]:/path/2/

-v a -r jsou tam, protože byli ve vašem místním velení. Zdrojová cesta je přeložena na místní cestu; cíl se nemění. Pokud tento příkaz proběhne úspěšně, data budou „zkopírována přímo mezi dvěma vzdálenými hostiteli“.

Všimněte si, že neexistuje žádný -i . Mělo by -i ~/keyfile buď tam? Nebo spíše -i /home/cindy/keyfile nebo tak? (protože místní scp dostal něco takového poté, co místní shell rozšířil vlnovku).

Ne. Vzdálený zdrojový hostitel může být (a obvykle je) jiný než lokální hostitel. Cesta, která je platná pro místního hostitele, může ukazovat na cokoli nebo nic na vzdáleném hostiteli. Pokud scp na zdrojovém hostiteli bylo vyvoláno -i způsobilo by to více problémů, než by to mohlo vyřešit. Je to dobrá věc -i se nerozšíří na příkaz vyvolaný na zdrojovém hostiteli. Ale pak se hostitel připojí k cíli pomocí svého výchozího klíče nebo čehokoli, co mu jeho konfigurace přikáže použít.

Ve vašem případě to vypadá, že potřebujete místní ~/keyfile pro připojení k cílovému hostiteli. Zdrojový hostitel obsahuje správný soubor (protože v tomto konkrétním případě je místní a zdrojový počítač stejný počítač), ale scp příkaz, který se skutečně připojuje k cíli, postrádá -i (jak by obecně mělo) a proto se klíč nepoužívá.

Váš druhý příkaz používal jako zdroj místní cestu, pouze cíl byl vzdálený. V tomto případě klíč určený pomocí -i byl použit k připojení od místního hostitele k cílovému hostiteli, přesně tak, jak jste plánovali. Proto to fungovalo.

Všimněte si, zda jste nakonfigurovali místní počítač tak, aby automaticky používal ~/keyfile pro připojení k druhému serveru (IdentityFile v ~/.ssh/config ), pak by fungoval první příkaz. Místní hostitel by se zbytečně připojoval sám k sobě, jen aby si řekl, aby se připojil k cíli, ale přesto by to fungovalo. První připojení by použilo ~/keyfile kvůli -i , druhé připojení by použilo ~/keyfile kvůli konfiguraci.


Z příručky scp, popis volby -3:Kopie mezi dvěma vzdálenými hostiteli jsou přenášeny prostřednictvím místního hostitele. Bez této možnosti jsou data kopírována přímo mezi dvěma vzdálenými hostiteli. Všimněte si, že tato možnost deaktivuje měřič průběhu a vybere dávkový režim pro druhého hostitele, protože scp nemůže žádat o hesla nebo přístupové fráze pro oba hostitele.

Podle popisu nejprve selže, protože 2 vzdálené servery budou komunikovat přímo (ve skutečnosti bude server 100.100.100.1 komunikovat se serverem 100.100.100.2 přes ssh), takže máte možnosti:

  1. Použijte možnost -3.
  2. Nakonfigurujte 2 vzdálené servery, aby se mohly autentizovat pomocí klíče ssh souboru klíčů. Pokud se můžete přihlásit od serveru 100.100.100.1 do 100.100.100.2 pomocí klíče ssh, váš původní příkaz bude fungovat.

Linux
  1. Proč moje veřejná knihovna volí Linux a open source

  2. Načítání veřejného klíče není povoleno – chyba WSO2 MySQL

  3. Co znamená Env X=() { :;}; Command‘ Bash dělat a proč je to nejisté?

  1. Instalace R z úložiště CRAN Ubuntu:Žádná chyba veřejného klíče

  2. Jaký chybový kód vrací proces, který segfaults?

  3. Proč ENOENT znamená Žádný takový soubor nebo adresář?

  1. Proč debian a ubuntu výchozí runlevel 2?

  2. Proč síťový provoz Linuxu prochází pouze přes eth0?

  3. Co dělá 'set -e' a proč by mohlo být považováno za nebezpečné?