Otomatik oturum açmaya izin vermek için .ssh / config şifreleri belirleyebilir misiniz?

71

ubuntu 11.10 kullanıyorum. Her gün birçok sunucuya bağlanmak için ssh kullanıyorum, bu yüzden parametrelerini .ssh/config dosyasına koydum; böyle:

Host Home
User netmoon
Port 22
HostName test.com

Her bağlantı için bu dosyaya şifre koymanın bir yolu var mı? Bu yüzden, sunucu şifre istediğinde, terminal pastasını koyup sunucuya gönderir.

Çünkü bazen bilgisayardan uzak duruyorum ve geri döndüğümde ve şifre yazdığımda ve enter tuşuna bastığımda, terminali CONNECTION CLOSED.

  • Ortak / özel anahtar çifti kullanmak istemiyorum.
sordu Netmoon 15.12.2011 12:36

11 cevap

42

Güvenliğiniz için güvenlikten vazgeçme asla iyi bitmez ...

ssh-copy-id 's openssh-client paketinden kullanabilir misiniz?

man ssh-copy-id 'den:

ssh-copy-id is a script that uses ssh to log into a remote 
machine and append the indicated identity file to that 
machine's ~/.ssh/authorized_keys file.
    
verilen cevap waltinator 20.12.2011 04:50
21

Bir ortak / özel anahtar çifti kullanmak istemiyorsanız, hedef adrese bağlı olarak otomatik olarak şifrenizi girmek için expect komut dosyası yazabilirsiniz.

Düzenleme: Diğer bir deyişle, bir parola sizin için parola girmek için expect kullanır ve öte yandan belirli bir kullanıcı ve konak için parolayı bir yapılandırmadan okur. dosya. Örneğin, güneşli günlük senaryo için aşağıdaki python betiği çalışacaktır:

#!/usr/bin/python                                                                                                                        
import argparse
from ConfigParser import ConfigParser
import pexpect

def main(args):
    url = args.url
    user, host = url.split('@', 1)

    cfg_file = 'ssh.cfg'
    cfg = ConfigParser()
    cfg.read(cfg_file)
    passwd = cfg.get(user, host)

    child = pexpect.spawn('ssh {0}'.format(url))
    child.expect('password:')
    child.sendline(passwd)
    child.interact()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Run ssh through pexpect')
    parser.add_argument('url')
    args = parser.parse_args()
    main(args)

ve yapılandırma dosyası formatı aşağıdaki gibi olacaktır:

[user_1]
host1 = passwd_1
host2 = passwd_2

[user_2]
host1 = passwd_1
host2 = passwd_2

Not: Açıklandığı gibi, python betiğinin tüm olası hataları ve ssh ve tüm olası URL'lerden gelen soru mesajlarını işlemek için çok daha karmaşık olması gerekir (örnekte [email protected] gibi bir şey olduğu varsayılmıştır, ama kullanıcı kısmı çoğu zaman kullanılmaz), ancak temel fikir yine de aynı olurdu. Yapılandırma dosyasını yeniden kaydetmek için farklı bir yapılandırma dosyası kullanabilir veya .ssh/config kullanabilir ve bu dosyayı ayrıştırmak ve belirli bir kullanıcı ve ana bilgisayar için parola almak için kendi kodunuzu yazabilirsiniz.

    
verilen cevap jcollado 15.12.2011 14:26
15

Hayır. Korkarım bu mümkün değil.

Tek gerçek alternatif, özel anahtarları kullanmaktır ama istemediğini söyledin (neden olmasın?).

    
verilen cevap Caesium 15.12.2011 12:40
15

Ayrıca bunun için sshpass programı var. Nasıl kullanılır: % Co_de%

    
verilen cevap igor 16.01.2014 14:58
12

ProxyCommand hakkında:

Host Home-raw
    HostName test.com
Host Home
   User netmoon
   Port 22
   ProxyCommand sshpass -pmypass ssh [email protected]%h-raw nc localhost %p

ssh -W yerine nc de kullanabilirsiniz:

ProxyCommand sshpass -pmypass ssh [email protected]%h-raw -W localhost:%p
    
verilen cevap Eric Woodruff 10.06.2015 19:48
5

/ usr / local / bin dizininde basit bir ssh komut dosyası değiştirme oluşturabilirsiniz:

#!/bin/bash

host=
password='awk "/#Password/ && inhost { print \$2 } /Host/ { inhost=0 } /Host $host/ { inhost=1 }" ~/.ssh/config'

if [[ -z "$password" ]]; then
  /usr/bin/ssh $*
else
  sshpass -p $password /usr/bin/ssh $*
fi

Sonra ~ / .ssh / config dosyasında kullanabilirsiniz

Host foohost
    User baruser
    #Password foobarpassword
    
verilen cevap Arek Burdach 26.09.2016 13:54
4

SecureCRT adlı VanDyke Yazılımından bir uygulama kullanıyorum.

İşte

Ücretsiz değil, çok makul fiyatlı. Uzaktan erişim, terminal öykünmesi ve (dağılmış) ağ yönetimi için yıllarca kullandım (Windows'ta veya Şarap kullanarak). Sonunda 2011'in başında yerel bir Linux sürümü yayınladılar.

Karmaşık giriş ayarları (veya komut dosyaları), kayıtlı şifreler (veya sertifikalar), sekmeli çoklu oturumlar, vb. için desteğe sahiptir.

Başlangıçta, kayıtlı uzaktaki (veya yerel) makinelerin yapılandırılmış bir listesinden (ağaç görünümünden) hangi uzak hedefi (ve protokolü) seçebileceğinizi veya yalnızca bir bağlantı oluşturduğunuzu (daha sonra depolandığını) seçebilirsiniz.

Gelişmiş kimlik doğrulaması, standart olmayan bağlantı noktaları veya güvenlik duvarı erişimi anlaşması olan uzak siteler için özellikle yararlı buldum.

Uzaktan erişimi çok fazla yapıyorsanız (ana rolünüzün bir parçası), bu uygulama kullanımın ilk ayında masraflarını haklı çıkaracaktır.

    
verilen cevap david6 16.12.2011 06:37
1

@BrunoPereira'nın yanıtı bu soruya açıkça bir parola girmeden ve ssh tuşlarından kaçınmadan bağlanmak için alternatif bir yöntem gösterir.

Bu komutu hızlıca çalıştırmak için ~/.bashrc 'da bir komut dosyası, bir takma ad veya işlev oluşturabilirsiniz.

Açıkçası, bu yaklaşımla dikkate almanız gereken güvenlik önlemleri var.

    
verilen cevap enzotib 15.12.2011 13:02
1

Sorduğunuz soruyu cevaplayın, hayır ssh config dosyasında varsayılan şifre yapılandırmak mümkün değildir.

Ama eğer, dediğiniz gibi, " Çünkü bazen bilgisayardan uzak duruyorum ve geri döndüğümde parola yazıp enter tuşuna bastığımda, terminali BAĞLANTIYORUM. ", neden olmasın Oturumu kapatmayı engellemek yerine? SSH, bağlantıları sizin için canlı tutabilir.

Host Home
  User netmoon
  Port 22
  HostName test.com
  ServerAliveInterval 300
  ServerAliveCountMax 2
    
verilen cevap Krzysztof Jabłoński 23.03.2018 11:05
0

İşte ArekBurdach'ın yanıtındaki ayrıntılı varyasyonum. Aşağıdaki uzantıları sunuyor:

  • ana makine , ssh komut satırında herhangi bir yerde olabilir; diğer bir deyişle, ssh <args> <host> <commands> sözdizimini de destekler
  • , ssh yolunu sabit kod yapmıyor
  • ssh_config daha güçlü ayrıştırma
  • Bonus: scp için sarmalayıcı da

ssh-wrapper

#!/bin/bash

password=$(awk '
BEGIN {
    # Collect the SSH arguments as keys of a dictionary, so that we can easily
    # check for inclusion.
    for (i = 2; i < ARGC; i++) {
        sshArgs[ARGV[i]] = 1
    }

    # Only process the first argument; all others are the command-line arguments
    # given to ssh.
    ARGC = 2
}
 == "Password" && inhost { print  }
/^\s*Host\s/ {
    if ( in sshArgs)
        inhost=1
    else
        inhost=0
}
' ~/.ssh/config "[email protected]")


if [ "$password" ]; then
    sshpass -p "$password" "$(which ssh)" "[email protected]"
else
    "$(which ssh)" "[email protected]"
fi

scp-wrapper

#!/bin/bash

password=$(awk '
BEGIN {
    # Collect the SCP arguments as keys of a dictionary, so that we can easily
    # check for inclusion.
    for (i = 2; i < ARGC; i++) {
        colonIdx = index(ARGV[i], ":")
        if (colonIdx > 0) {
            scpArgs[substr(ARGV[i], 1, colonIdx - 1)] = 1
        }
    }

    # Only process the first argument; all others are the command-line arguments
    # given to scp.
    ARGC = 2
}
 == "Password" && inhost { print  }
/^\s*Host\s/ {
    if ( in scpArgs)
        inhost=1
    else
        inhost=0
}
' ~/.ssh/config "[email protected]")


if [ "$password" ]; then
    sshpass -p "$password" "$(which scp)" "[email protected]"
else
    "$(which scp)" "[email protected]"
fi

Kurulum

Takma adlarınızı ~/.bashrc cinsinden tanımlayın:

alias ssh=ssh-wrapper
alias scp=scp-wrapper

Yapılandırma

IgnoreUnknown yönergesiyle, ssh yeni tanıtılan Password yönergesinden şikayetçi değil, bu yüzden (ArekBurdach'ın yanıtının aksine), bunu "gerçek" bir yapılandırma olarak gösterebiliriz. Bunu beğenmezseniz, betiği tekrar yorumlanmış olana dönüştürebilirsiniz.

# Allow specifying passwords for Host entries, to be parsed by ssh-wrapper.
IgnoreUnknown Password

Host foohost
    User baruser
    Password foobarpassword
    
verilen cevap Ingo Karkat 31.01.2017 16:44
0

Anahtar çiftinize doğrudan erişiminiz yoksa, yerel makinenizdeki şifreyi şifreleyebilirsiniz.

Bunu yapmanın yolu anahtarınızı kullanarak şifrenizi şifreleyin .

Birleştirmenin bir yolu boru kullanıyor:

openssl rsautl -decrypt -inkey /path/to/decrypt_key -in /path/to/encrypted_password  | sshpass ssh real-destination -tt

burada

Host real-destination
    Hostname test.com
    User netmoon
    
verilen cevap Willian Z 02.04.2018 05:14

Etiketlerdeki diğer soruları oku