OS X anahtarlığındaki parolaları kullanarak ssh'ye otomatik olarak giriş yapabilir miyim?


9

Anahtar tabanlı kimlik doğrulamayı desteklemeyen bir ssh sunucusuna giriş yapmam gerekiyor. Ve şifreleri her seferinde yazmak istemiyorum.

OS X Lion (10.7.2) kullanıyorum. Şifreleri OS X anahtarlığına ekledim [1]. Şimdi şifreyi anahtarlıktan otomatik olarak alabilirim /usr/bin/security, ancak bu şifreyi ssh istemine göndermenin bir yolunu bulamıyorum.

Ben de denedim sshpass. Ancak çalıştırmaya çalıştığımda ssh aşağıdaki hatayla çıkar:

ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied (publickey,password).

Yine de her seferinde şifreyi girmek zorunda kalmadan bu sunucuya giriş yapabiliyorum

notlar

  1. Anahtarlıkta kullandığım şema böyle görünüyor
    • Tür: İnternet şifresi
    • Hesap kullanıcı adı
    • Nerede: ssh: // sunucu adı

Yanıtlar:


11

Etkileşimli olmayan SSH oturumları

Uzak sunucuda etkileşimli bir oturum yapmanız sshgerekmiyorsa tty, örneğin Automator'daki Kabuk Betiğini Çalıştır eyleminin bir parçası olmayan bir ortamda çalıştırabilirsiniz .

Çağrıldığında parolayı standart çıktıya yazdırmak için bir program oluşturmanız gerekir, örn. Aşağıdaki bash betiği kullanarak çalıştırılabilir yapmanız gerekir chmod +x pwd.sh:

#!/usr/bin/env bash
echo "password"

Ardından, SSH_ASKPASSortam değişkenini bu programın yoluna ayarlayın ve sshAutomator eyleminde aşağıdaki gibi çalıştırın :

export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls

Hiçbir yokken tty, ancak SSH_ASKPASSve DISPLAYayarlanır (X11, varsayılan olarak ayarlanan için), SSH ile belirtilen programı çalıştırır SSH_ASKPASSve şifre olarak çıkışını kullanır. Bu, grafiksel ortamlarda kullanılmak üzere tasarlanmıştır, böylece bir pencere açılır ve şifrenizi ister. Bu durumda, pencereyi atladık ve şifreyi programımızdan geri döndürdük. Bunun securityyerine anahtarlığınızdan okumak için kullanabilirsiniz :

#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2

ls( sshkomut satırında) sshoturum açıldığında yürütülen komuttur ve çıktısı Automator'da yazdırılır. Tabii ki, başlattığınız programın çıktısını günlüğe kaydetmek için bir dosyaya yönlendirebilirsiniz.


Etkileşimli SSH oturumları sshpass

İndirdim, derledim ve yükledim sshpassve mükemmel çalıştı. İşte yaptım:

  1. Apple geliştirici araçlarını edinin
  2. İndirin ve açın sshpass-1.05.tar.gz
  3. Dizine bir kabuk açma sshpass-1.05
  4. Çalıştırmak ./configure
  5. Çalıştırmak make
  6. Çalıştır make install(ihtiyacınız olabilir sudo)

Şimdi program yüklenir /usr/local/bin/sshpass. Aşağıdaki gibi bir çizgi kullanarak yürütün:

sshpass -pYourPassword ssh username@hostname

Bunu securityyapmadan hemen önce şifreyi okuyabilir ve şu şekilde kullanabilirsiniz:

SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname

Bunu bir kabuk işlevine sarın ssh-yourhostnameve parolayı otomatik olarak alması ve girmesi için örneğin bağlanmak için yazabilirsiniz .


Merhaba, beni çözüme götürdüğü için cevabınızı iptal ettim. Ancak, burada açıkladığınız şey tam olarak işe yaramadı (bu, Lion'un ssh sürümüne özgü olabilir) 1) Etkileşimli olmayan oturumlar için, ssh hala bir şifre istedi ve girdikten sonra aldım STDIN is not a terminal. 2) ile etkileşimli oturumlar için sshpass, -pseçenek görünüşe göre hiçbir şey yapmaz. Ama çalışan sshpassederken SSH_ASKPASSişi ayarlanır yapar!
Chaitanya Gupta

@ChaitanyaGupta Odd. Benim için Lion'daki Automator'dan etkileşimli olmayan bir şekilde çalıştı. İkinci konu ile ilgili olarak, o noktada kirli bir kabuk oturumu yapmış olabilirim, artık emin değilim. +1 ve sitenize çözümünüzü eklediğiniz için teşekkür ederiz.
Daniel Beck

Benim kötü (1 ile ilgili) - Ben Automator değil, terminalde etkileşimli olmayan oturum çalıştırmak için çalışıyordu. Şimdi Automator'da denedim ve hala STDIN is not a terminalhata alıyorum. Ancak, bu sefer herhangi bir şifre istenmedi; SSH_ASKPASSAutomator'da çalıştığına inanıyorum , çünkü dosyayı SSH_ASKPASSyanlış şifre karşılığında yaparsam, bir Permission denied, please try again.hata alıyorum.
Chaitanya Gupta

1
Son örnekler için Unix altında OSes komut satırı argümanlarının ve ortam değişkenlerinin sistemdeki diğer kullanıcılar tarafından görülebildiğine dikkat edin, bu nedenle hassas bir çok kullanıcılı ortamda güvenli değildir.
Jürgen Strobel

@DanielBeck herhangi bir fikir bu işe nasıl yapılırmacOs >= 10.13
nbari

7

Bir çözüm buldum (bunun için gerekli temel bilgileri sağladığı için Daniel Beck'e teşekkürler). Bunu yalnızca OS X Lion 10.7.2 ile test ettiğimi unutmayın. Bu sizin için işe yaramazsa Daniel'in çözümünü deneyin.

İlk olarak SSH_ASKPASSortam değişkenini ayarlamamız gerekiyor - değeri parolayı standart çıktıya yazdıran bir programın yolu olmalıdır. Şifreyi anahtarlıktan almak için, buna benzemesi gerekir (buna diyorum get-ssh-password.sh):

#!/bin/bash

/usr/bin/security find-internet-password -a "$SSH_PASSWORD_USER" -s "$SSH_PASSWORD_HOSTNAME" -r "ssh " -g 2>&1 1>/dev/null | cut -d\" -f2

Dikkat edilmesi gereken birkaç nokta:

  1. Bu, şifreyi soruda açıkladığım şekilde anahtarlıkta sakladığınızı varsayar.

  2. Verilen program SSH_ASKPASShiçbir argüman olmadan çağrılır; bu nedenle kullanıcıyı ve ana bilgisayar adını ona geçirmek için ortam değişkenlerini kullanırız.

Şimdi sunucumuza giriş yapmak için ayarlayabilir SSH_PASSWORD_USERve SSH_PASSWORD_HOSTNAMEçalışabiliriz sshpass.

Bunu ssh-kcpassyapmak için başka bir komut dosyası oluşturdum :

#!/bin/bash

export SSH_ASKPASS=~/bin/get-ssh-password.sh
export SSH_PASSWORD_USER=$(echo "$1" | cut -d@ -f1)
export SSH_PASSWORD_HOSTNAME=$(echo "$1" | cut -d@ -f2)

sshpass ssh "$1"

Herhangi bir şifre yazmadan ssh sunucusuna giriş yapmak için, çalıştırmanız yeterlidir ssh-kcpass user@hostname.


Bunu çalışmak için nasılmacOS >= 10.13
nbari

-3

Merhaba, başka bir şey arayan bu konuyla karşılaştım ama ... Burada bir şey eksik olup olmadığımı bilmiyorum ... ama yaklaşımınız bana tuhaf geliyor. neden sadece ortak anahtar kimlik doğrulamasını kullanmıyorsunuz ... Bir rsa anahtarı oluşturun $ ssh-keygen -t rsa -b 2048 -C 'e-posta / kimlik'

İdeal olarak, ssh-copy-id user @ host'u bir kez kullanır ve anahtarı diğer sunucuya yüklemek için bir kez şifre ile kimlik doğrulaması yapar veya anahtarı ~ / .ssh / yetkili_keys'e dağıtmak için herhangi bir komut dosyası veya doğrulama aracı kullanırsınız. diğer ana bilgisayar (oturum açmak istediğiniz kullanıcı için) Komutu manuel olarak tamamlarsanız, / etc / ssh / sshd_config dosyasını buna göre düzenlemeniz ve w otomasyonunu (aşçı, ansible) istediğiniz durum için tam kondomu itmeniz gerekir.

Dağıtmak için önemli olan anahtar id_rsa.pub, özel anahtarı güvende tutun

~ / .Ssh / config üzerinde makinenizde otomatik olarak basit bir moda düzenlemesinde ana bilgisayarlara kimlik doğrulaması yapmak için anahtarlık kullanmak ve ekleyin:

Ana bilgisayar * UseKeychain evet

Ssh config dosya seçenekleri hakkında daha fazla bilgi için umut bunlardan herhangi biri kullanışlı geliyor


1
Soru gövdesinin ilk cümlesini okuyun: '' Anahtar tabanlı kimlik doğrulamayı desteklemeyen bir ssh sunucusuna giriş yapmam gerekiyor . ''
Scott

Merhaba Scott Sanırım şifresini her zaman yazmak istemediğini söylediği kısmı da kaçırdın, yani bunu yapıyor demektir.
Ricardo Mendes

Hayır, bunu özlemedim. Neden yaptığımı düşünüyorsun?
Scott

BC hala konuşuyorsun
Ricardo Mendes
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.