Mac OS X Lion'da her seferinde şifre girmeden giriş yapmak için SSH özel anahtarını nasıl kullanabilirim?


23

Mac OS X Lion kullanıyorum ve her gün SSH üzerinden uzak ana bilgisayarlara giriş yapıyorum. Uzaktan kimlik doğrulama için SSH anahtar çiftini kullanmama ve her ana bilgisayarın oturum açma deyimini motorize etmem gerekmese de, terminalin SSH özel anahtarıma erişmek için kullanılan parolayı sorması çok can sıkıcı.

Güvenlik nedeniyle, SSH'nin özel anahtarına erişmek için bir parola gerekmesi gerektiğini düşünüyorum. Terminalin başlangıçta yalnızca bir kez tümceciği sormasını, daha sonra SSH oturumlarında otomatik olarak anahtarımı kullanmasını ve ardından ezberlemesini isteyen bir yol var mı?

keychainGentoo Linux'ta iyi çalışan bir senaryo var . Ama ben asla Mac OS X Lion'da çözemedim. Dahası, örneğin pek çok korkutucu terim vardır ssh-agent, ssh-add. Bu SSH araç takımları hakkında çeşitli materyaller okuduktan ve bazı sinirli deneyler yaptıktan sonra, kafam çok karıştı.

Bu nedenle, aşağıdaki sorularla ilgili bazı tavsiyeler almak için StackExchange'e geldim.

  1. Ne ssh-agent, ssh-add, keychain, Keychain Access.appve nasıl etkileşimde birbirleriyle?
  2. SSH özel anahtarımın şifresini giriş yaptıktan sonra bir kez girip, daha sonra SSH oturumu oluşturma işleminde nasıl özgürce kullanabilirim?
  3. Errr ... Nesi var Keychain Access.app? SSH deyimini daha önce olduğu gibi kaydetmez.

Burada yaptıklarımı listeliyorum. Umarım kaçırdığım adımlar hakkında ipuçları vardır.

Adım 1. Mac'imde bir SSH anahtar çifti oluşturun.

$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.

Adım 2. SSH ortak anahtarımı uzaktaki ana bilgisayara kopyalayın. Bir örnek olarak, anahtarı localhost, Mac'e kopyalarım.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Adım 3. Sonra uzaktaki ana bilgisayara (burada localhost) bağlanmayı deneyin, SSH anahtar çifti doğrulama ile.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Adım 4. Uzak ana bilgisayardan çıkış yapın ve tekrar bağlanmayı deneyin. Kahretsin, terminal tekrar SSH cümle ister.

Sıkça sorulan bir soru, "ssh-agent'ın Mac'inizde iyi çalıştığını mı?" Açıkçası, bu şeyler neler olduğu hakkında hiçbir fikrim yok. İşte bazı koşu sonuçlarını göster.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Herhangi bir geri bildirim bekliyoruz. Teşekkürler!


İlgili . Muhtemelen kullanım durumunuz için kabul edilen cevabı uyarlayabilirsiniz.
Daniel Beck

Yanıtlar:


12

ssh-agentTam olarak ne istediğini yaptığın gibi, çalışmak istediğin parça. Aracı bir arka plan programı olarak çalışır ve ona özel bir anahtar "eklediğinizde", bu anahtarı hatırlar sshdve ilk bağlantı sırasında otomatik olarak uzaktan kumandaya sağlar . ( ssh-addyalnızca elle özel bir anahtar eklemek için çalıştırdığınız komuttur ssh-agent).

OS X’te, Leopard’dan itibaren, hiçbir zaman koşmaya ssh-agentya da ssh-addelle koşmanıza gerek kalmadı . Bir sunucuya bağlanmaya çalıştığınızda "sadece" olmalı. Anahtar başına bir kez, sizden (diğer şeylerin yanı sıra) anahtarı otomatik olarak eklemenize izin verecek şekilde bir UI şifresi iletişim kutusu isteyecektir ssh-agent.

Bu, soket launchdüzerindeki bağlantıları dinleyen $SSH_AUTH_SOCKve ssh-agentilk gerektiğinde otomatik olarak başlayan bir yapılandırmaya sahip olarak kullanılır; ssh-agentOndan sonra, yalnızca yeni bir anahtar açması gerektiğinde kimlik bilgileri ister.

Bu işe yaramazsa, doğru launchdyapılandırma dosyasına sahip olduğunuzdan emin olun :

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Hala bir nedenden dolayı hala işe yaramazsa, işte el ile çalışan şeyleri almanın "eski" yolu:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

Ayrıca, Leopard çıktığından beri kullanmayı bıraktığım, ancak temelde Mac OS X'in önceki sürümlerinde de aynı şeyi yapan bu uygulama var:

http://www.sshkeychain.org/


4
Teşekkürler Michael Edenfield. Neyin yanlış gittiğini anladım ve şimdi ssh-login-passphrase Mac OS X Lion'da mükemmel çalışıyor. Aptalca şeyler yaptım - her 2 saatte bir temizlemek için bir cron işini ~/tmpişaret eden /tmp/ve çalıştıran sembolik bir bağlantı kurdum ~/tmp, bu da ssh-agent soketini de çıkardı. Ah dostum kendimden nefret ediyorum.
Jianwen W.

13

"Sorun" çözme sürecinde, bazı ilgili konular googled ve nasıl hakkında bazı notlar yazmak ettik ssh-agent, ssh-add, keychain, KeyChain Access.appişin. Sonunda bu sorunun hiç bir sorun olmadığı ortaya çıkıyor, bunun yerine konu tamamen benimle ilgili ve ssh-login sormadan-parola-parola-her zaman mükemmel bir şekilde Mac'te kullanıma hazır.

Ancak, bu süreç bana bazı deneyimler kazandırıyor. Notlarımı buraya yazarken birisinin bu şartlar hakkında kafa karıştırıcı olmasına yardımcı olacağını umuyorum.

İki şifre terimi:

  • passphrase SSH özel anahtarınıza erişirken gerekli ifadeyi belirtir.
  • password Mac'inizde oturum açmak için gereken ifadeyi ifade eder.

Şimdi bu araç kitleri yapmak istediğinizi anlayarak olduğunu, ssh-agent, ssh-add, keychain, Keychain Access.appMac üzerinde.

  • ssh-agentSSH şifresini yazmadan SSH özel anahtarının kullanılmasını sağlayan kritik hizmettir. ssh-agentbu şekilde çalışır. Öncelikle SSH özel anahtarınızı ana bellekte saklar veya önbelleğe alır . Daha sonra bu oturumun ilerleyen saatlerinde SSH özel SSH anahtarınız uzaktan kimlik doğrulaması için gerekli olduğunda ssh-agent, özel anahtarınızı ana bellekte bulur ve uzak işleme verir. SSH parolanızı yazmanızın tek yolu özel anahtarınızın ssh-agentbaşlangıçta eklenmesidir .
  • ssh-addssh-agentSSH anahtarlarınızı yönetmenize yardımcı olan koleksiyonun bir parçasıdır ssh-agent. ssh-addSsh-agent'ın anahtarlığındaki özel anahtarları listelemek, eklemek, kaldırmak için komut kullanıyoruz . Sonra görevleri yerine getirmek için servis ssh-addile iletişim kurar ssh-agent.
  • keychainssh-agenthizmeti bulmak için komut dosyası (yoksa yeni bir tane başlatın) ve ssh-addSSH özel anahtarları eklemek için çağrı yapın. keychainssh-agent'ın genellikle otomatik olarak başlamadığı durumlarda Linux'ta iyi çalışan basit ve anlaşılır bir fikri vardır.
  • Keychain Access.appen karmaşık bileşen gibi görünüyor. Mac OS X'in evrensel belirteçli depolama hizmetidir. Parolalar, sertifikalar, vb. Gibi çeşitli belirteçleri depolar ve belirteçleri talep eden uygulamalar için bir belirteç aracı görevi görür . SSH özel anahtar durumumuzda, önce SSH özel anahtarına erişme isteğini kavrar ve bir tür belirteç olan SSH parolasını anahtarlığın anahtarına kaydetmenizi istemek için bir pencere açar Keychain Access.app. Ardından, kimlik doğrulama için özel anahtar kullanacaksanız Keychain Access.app, ayrıcalığın verilip verilmeyeceğini soran bir pencere yeniden açılır. Büyük bir evet aldıktan sonra keychain Access.app, özel anahtarınızı ssh-agentdepoya ekler .

İki şey dikkatinizi hak ediyor:

  1. Mac OS X Lion başlangıçta otomatik olarak bir ssh-agenthizmeti başlatır , altındaki bir soketi dinler /tmp.
  2. Keychain Access.appSSH parolanızı saklar, böylece ssh-agentsizi rahatsız etmeden özel anahtarınızı ekleyebilir . Evet, SSH ifadenizi yazmanıza gerek yoktur, ancak bu girişi ilk defa oluştururken ayrıcalık vermek için Mac hesabınızın giriş şifresini girmeniz gerekir.

Bu nedenle, özet olarak, SSH-login-sormadan-parola cümlesi Mac OS X’de kullanıma hazır olmalıdır.


1

Buradaki diğer çözümler insanlar için işe yaramazsa, aşağıdaki benim için çalıştı.

~ / .Ssh dizininizdeki her bir özel anahtar için, ilgili ortak anahtarın da bulunduğundan emin olun. Genel anahtarın, özel anahtarla tamamen aynı ancak .pubsonunda olduğu gibi adlandırıldığından emin olun . Zaten uygun bir ortak anahtara sahipseniz, yeniden oluşturmayı deneyin.

Genel anahtarları yeniden oluşturmanız gerekirse, bunu kolayca yapabilirsiniz: -

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

my_keyanahtarınız ne denirse onunla değiştirin .

Ondan sonra MacOS, anahtarlıktaki anahtar parolayı olması gerektiği gibi hatırlıyor.

Not - parolaya girmek ve onu kaydetmek anahtarlık artık sadece bir seferlik bir eylemdir (OP'nin istediği gibi bir oturum açma işlemi için bir defa değil), ancak söz konusu mac'ta oturum açmak için parola korumalı olduğunu ve parolanızın o oturum açma parolasıyla korunduğunu varsayalım. Ayrıca, bu çözüm benim için hiçbir şey ifade etmiyor ... özel anahtara ek olarak ortak bir anahtara gerek duyulmamalı, ancak bir sebepten dolayı MacOSX gerekli.

(başlangıçta Apple Stack Exchange'de benzer bir sorunun cevabından )


1

~/.sshKlasörün yapılandırılması ile ilgili nadiren bahsettiğim bir şey , dizin izinlerini kısıtlamak.

Ssh'nin şifreyi sormamaktan kaçınmasını sağlamak için her zaman kullanıcının giriş dizini izinlerini 700ve ~/.sshklasör izinlerini 700de ayarlamak zorunda kaldım .

Aksi halde, tüm anahtarların doğru şekilde üretilip kopyalanmasına rağmen, bana bir şifre sormaya devam ediyor. Kimlik doğrulama günlüklerinde bir hata mesajı oluşuyor ancak bu çoğu kullanıcı için son kullanıcı tarafından görünmez.


0

Deneyebileceğin başka bir şey, onun ssh-copy-idgibi bir şeyle değiştirmek olurdu k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2".


0

Bu cevap biraz bu sorunun çözümü değil; bununla birlikte çok yakın (sorunumun çözümünü ararken bu soruyu bitirdim).

Ayrıca, Mac'imdeki uzak sunuculara çokça SSH yapıyorum, bu soruda açıklandığı gibi, ancak Keychain Access.appuygulama anahtar kelimeyi sakladı ve bir SSH sunucusunda kimlik doğrulaması yapmak için her an anahtar ihtiyacım olduğunda yazmam gerekmiyor.

Ancak, Mac’imdeki SSH sunucusunu etkinleştirdim, böylece uzaktan bağlanabiliyorum. Mac'imde uzaktan oturum açtığımda, başka bir ana makinede SSH yapmak istediğimde her zaman anahtar kelimeye istendi.

Anahtar ifadenin geçerli oturum için saklanmasına izin veren bir çözüm buldum . Bunun birileri için yararlı olabileceğini düşündüm, bu yüzden bu yazı / cevap.


Benzer çözümümü burada yazdım. Superuser.com/a/659668/154113
orkoden

0

Bu sorunun üstesinden geliyorum. ssh, departmanımızdaki her makineye elmalar için çalışmaktadır (MacBook veya iMac'ler önemli değildir). Sonunda şifreleri yazmaktan yoruldum ve bu hata ayıklamaya karar verdim.

İMac'ime gittim ve paylaşım tercih panelinde sshd'yi devre dışı bıraktım. Daha sonra root olarak dava açtım ve sshd'yi hata ayıklama modunda çalıştırmak için "/ usr / sbin / sshd -d" yazdım. Daha sonra bu makineye ssh yapmaya çalıştım ve hemen her şeyin yolunda gibi göründüğü protokol 2'yi kullanmaya çalıştım, ancak sshd derhal "yetkili_keys" bulamadığını bildirdi. Tüm linux, solaris, unix kutularımın kabul edebileceği bir legal_keys2 dosyam vardı. Yetkilinin_keys2'yi yetkili_keyler ve BOOM'a kopyaladım. Şimdi mükemmel çalışıyor.

Neden * tuşlar yerine * tuşlar bilinmemektedir. Özellikle os x known_hosts2 ile oldukça mutlu olduğunda.

Her durumda, artık tüm elma kutularımız oturum açabilir veya bu şifreli parola olmadan üzerlerinde uzaktan komutlar verilmiş olabilir: prompt ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.