GNU/Linux >> Znalost Linux >  >> Linux

Ssh – Jak spustit Ssh-add automaticky, bez výzvy k zadání hesla?

Chci komunikovat mezi několika počítači v mé síti (statický Ethernet) prostřednictvím SSH. Abych to udělal, musím spustit ssh-add pokaždé, když se přihlásím na konkrétním počítači, jak to udělat, aby se to nastavilo jednou a nepožadovalo po mě heslo při každém přihlášení nebo restartu můj stroj?

Vím, že existuje způsob, jak byste měli přidat nějaké řádky do bash_profile soubor, ale i tak musím zadat heslo pokaždé, když restartuji/přihlásím se ke konkrétnímu počítači.

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Přijatá odpověď:

Toto je typický příklad kompromisu mezi bezpečností a pohodlím. Naštěstí existuje několik možností. Nejvhodnější řešení závisí na scénáři použití a požadované úrovni zabezpečení.

klíč ssh s přístupovou frází, ne ssh-agent

Nyní je třeba zadat přístupovou frázi pokaždé, když je klíč použit pro ověření. I když je to nejlepší možnost z hlediska zabezpečení, nabízí nejhorší použitelnost. To může také vést k tomu, že bude zvolena slabá přístupová fráze, aby se snížila zátěž při jejím opakovaném zadávání.

klíč ssh s přístupovou frází, s ssh-agent

Přidání následujícího do ~/.bash_profile automaticky spustí ssh-agent a načtěte ssh-klíč(e) při přihlášení:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Nyní musí být heslo zadáno při každém přihlášení. I když je to z hlediska použitelnosti o něco lepší, má to nevýhodu ssh-agent vyzve k zadání přístupové fráze bez ohledu na to, zda má být klíč během relace přihlášení použit nebo ne. Každé nové přihlášení také vytvoří odlišného ssh-agent instance, která zůstane spuštěná s přidanými klíči v paměti i po odhlášení, pokud není výslovně zabita.

Chcete-li zabít ssh_agent při odhlášení přidejte do ~/.bash_logout následující

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

nebo následující do ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

Vytvoření více ssh-agent Instancím se lze vyhnout vytvořením trvalého komunikačního soketu pro agenta na pevném místě v systému souborů, jako je tomu v odpovědi Collina Andersona. Toto je zlepšení oproti vytváření instancí více agentů, ale pokud není dešifrovaný klíč explicitně zabit, zůstává po odhlášení v paměti.

Na počítačích mohou být ssh-agenti zahrnutí do desktopového prostředí, jako je Gnome Keyring SSH Agent, lepším přístupem, protože obvykle mohou být vyzváni k zadání přístupové fráze při prvním použití klíče ssh během relace přihlášení a uložte dešifrovaný soukromý klíč do paměti až do konce relace.

klíč ssh s přístupovou frází, s ssh-ident

ssh-ident je nástroj, který dokáže spravovat ssh-agent vaším jménem a podle potřeby načtěte identity. Přidává klíče pouze jednou, když jsou potřeba, bez ohledu na to, kolik terminálů, ssh nebo přihlašovacích relací vyžaduje přístup k ssh-agent . Může také přidat a použít jiného agenta a jinou sadu klíčů v závislosti na hostiteli, ke kterému se připojujete, nebo na adresáři ssh, ze kterého je voláno. To umožňuje izolovat klíče při použití předávání agentů s různými hostiteli. Umožňuje také používat více účtů na webech, jako je GitHub.

Související:Php:imagecropauto — Automatické oříznutí obrázku pomocí jednoho z dostupných režimů

Chcete-li povolit ssh-ident , nainstalujte jej a přidejte následující alias do svého ~/bash_profile :

alias ssh='/path/to/ssh-ident'

klíč ssh s přístupovou frází, s keychain

keychain je malý nástroj, který spravuje ssh-agent vaším jménem a
umožňuje ssh-agent aby zůstal spuštěný, když relace přihlášení skončí. Při dalších přihlášeních keychain se připojí ke stávajícímu ssh-agent instance. V praxi to znamená, že heslo musí být zadáno pouze při prvním přihlášení po restartu. Při následných přihlášeních nešifrovaný klíč ze stávajícího ssh-agent instance se používá. To může být také užitečné pro povolení RSA/DSA autentizace bez hesla v cron úlohy bez ssh klíčů bez hesla.

Chcete-li povolit keychain , nainstalujte jej a přidejte něco jako následující do ~/.bash_profile :

eval `keychain --agents ssh --eval id_rsa`

Z bezpečnostního hlediska ssh-ident a keychain jsou horší než ssh-agent instance jsou omezeny na dobu trvání konkrétní relace, ale nabízejí vysokou úroveň pohodlí. Pro zlepšení zabezpečení keychain , někteří lidé přidávají --clear možnost do jejich ~/.bash_profile vyvolání klíčenky. Tímto způsobem musí být hesla znovu zadána při přihlášení, jak je uvedeno výše, ale cron úlohy budou mít i po odhlášení uživatele stále přístup k nešifrovaným klíčům. keychain wiki stránka obsahuje více informací a příkladů.

klíč ssh bez přístupové fráze

Z hlediska zabezpečení je to nejhorší možnost, protože soukromý klíč je v případě odhalení zcela nechráněný. Toto je však jediný způsob, jak zajistit, že po restartu nebude nutné znovu zadávat přístupové heslo.

klíč ssh s přístupovou frází, s ssh-agent , předávání přístupové fráze do ssh-add ze skriptu

I když se může zdát jako jednoduchý nápad předat přístupovou frázi ssh-add ze skriptu, např. echo "passphrase\n" | ssh-add , není to tak přímočaré, jak se zdá jako ssh-add nečte přístupovou frázi z stdin , ale otevře /dev/tty přímo ke čtení.

To lze obejít pomocí expect , nástroj pro automatizaci interaktivních aplikací. Níže je uveden příklad skriptu, který přidává klíč ssh pomocí přístupové fráze uložené ve skriptu:

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

Všimněte si, že jelikož je přístupová fráze ve skriptu uložena v prostém textu, z hlediska zabezpečení je to stěží lepší než mít ssh klíč bez hesla. Pokud má být použit tento přístup, je důležité se ujistit, že expect skript obsahující přístupovou frázi má nastavena správná oprávnění, takže je čitelný, zapisovatelný a spustitelný pouze vlastníkem klíče.


Linux
  1. Jak nastavit SSH přihlášení bez hesla

  2. Jak spustit konkrétní program jako root bez výzvy k zadání hesla?

  3. MySQLdump bez hesla v cronjob

  1. Jak nastavit Rsync s SSH na UNIX / Linux (rsync bez hesla)

  2. Jak předat heslo do su/sudo/ssh bez přepsání TTY?

  3. Jak spustit skript jako jiný uživatel bez hesla?

  1. Jak provádět SSH a SCP bez hesla z SSH2 na OpenSSH

  2. Jak automaticky spouštět příkazy při přihlášení SSH?

  3. Přihlášení SSH nefunguje pomocí klíče Bez hesla?