jak uniknąć pytania „Wprowadź hasło dla klucza”, gdy wykonuję operację ssh na zdalnym hoście?

45

Jestem ssh na zdalnym hoście (linux, fedora) i chcę tam wykonać operację ssh (git z bitbucket). Na tym komputerze działa ssh-agent,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

ale kiedy chcę się bawić, muszę wprowadzić hasło

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Uwaga: jeśli działam na tym komputerze lokalnie, nie poprosi mnie o podanie hasła

lilia
źródło
1
Nie korzystałem z niego, ale istnieje polecenie ssh-add, które moim zdaniem służy do tego rodzaju rzeczy
barlop

Odpowiedzi:

82

Moim zdaniem najlepszy sposób użycia ssh

Przed użyciem Git dodaj swój klucz do ssh-agent

Uruchom ssh-agent, jeśli nie został uruchomiony:

$ eval `ssh-agent -s`

Dodaj swój klucz prywatny za pomocą ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
Wprowadź hasło dla /home/user/.ssh/id_rsa_key:
Dodano tożsamość: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Sprawdź, czy klucz został dodany (parametr to mała litera L):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)

Spróbuj połączyć się z serwerem Git:

$ ssh git.example.com

Teraz możesz korzystać z Git bez dodatkowych monitów dotyczących hasła.

Inaczej

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

rzymski
źródło
ale użyłem Git dodaj swój klucz do ssh-agent, to jak to zrobić? dzięki
lily,
@ lily Przepraszamy, nie rozumiem twojego pytania.
Rzym.
1
To rozwiązanie działało dla mnie.
Skatox
2
Jak mogę to utrwalić? Po prostu włóż to .bashrc?
Oarfish
1
Do Twojej wiadomości evaljest potrzebny, ponieważ wyświetla polecenia, które eksportują zmienne środowiskowe, takie jak SSH_AUTH_SOCK, które są potrzebne. unix.stackexchange.com/questions/351725/…
wisbucky
21

Jeśli masz już ssh-agenturuchomiony, możesz dodać klucz i będziesz musiał wprowadzić hasło raz i tylko raz dla tej sesji.

ssh-add ~/.ssh/id_rsa

Nie mówisz, jakiego systemu operacyjnego używasz, ale jeśli tak się dzieje, to Linux & Gnome, to aplikacja „Hasła i klucze” (nazwa CLI:) seahorsemoże nimi zarządzać, aby były odblokowane po zalogowaniu (nie wymaga hasła) . Inne środowiska pulpitu Linux mają własnych menedżerów. Nie jestem pewien, co robią tutaj inne systemy operacyjne.

ams
źródło
3

Głównym powodem pytania o hasło jest to, że klucz jest zaszyfrowany, porównaj te dwa:

  • nieszyfrowane

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • zaszyfrowane

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Musisz więc wykonać jedną z następujących czynności:

  1. Jeśli jest zaszyfrowany, możesz spróbować usunąć szyfrowanie .
  2. Używasz niewłaściwego klucza. Jeśli chcesz użyć innego klucza, określ inny plik lub dokonaj edycji ~/.ssh/configi podaj inny plik tożsamości ( IdentityFile).
  3. Biegać ssh-add -l aby wyświetlić listę wszystkich swoich tożsamości (następnie porównaj z lokalnymi) i sprawdź dwukrotnie w Stash, jeśli używasz odpowiednich kluczy (istnieją one w konfiguracji Stash).
  4. Jeśli znasz hasło i chcesz je zautomatyzować, wypróbuj następujące obejście:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Rozwiązywanie problemów:

  1. Sprawdź dokładnie, czy działa agent SSH (eval "$(ssh-agent -s)" ).
  2. Uruchom ponownie git przez: GIT_TRACE=1 git pulllub za pomocąGIT_SSH_COMMAND="ssh -vv"Uruchom ponownie (Git 2.3.0+), aby ponownie debugować polecenie.
  3. Możesz spróbować ominąć prośbę o hasło (które przekieruje je na true), ale nie sądzę, żeby to pomogło. Jeśli o to poprosi, istnieje ku temu powód i jest to w zasadzie wymagane.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    
kenorb
źródło
2

ssh-addProgram rozpoczyna czynnik , który może mieć (i świadczenia) swoje hasło. Zdalnym sposobem korzystania z niego jest element nadrzędny interaktywnej powłoki (aby agent się nie zatrzymał).

Oto kilka powiązanych pytań:

Teraz ... łączymy się zdalnie , z reguły twoje polecenie nie loguje się jako takie, więc się nie uruchamia ssh-add. Możesz obejść ten problem, wykonując skrypt, który

  • zaczyna się ssh-agent
  • zaczyna się ssh-add
  • dodaje swój klucz
  • uruchamia polecenie, które chcesz.

Słaby punkt to drugi krok: nadal będziesz monitowany o hasło, chyba że osłabisz swoje bezpieczeństwo za pomocą klucza, który nie ma hasła . Niektórzy to robią, większość odradza.

Thomas Dickey
źródło
ssh-addnie uruchamia agenta. Łączy się z już działającym agentem.
AMS
Dzięki - jestem przyzwyczajony do robienia tego w osobnych skryptach i przeoczyłem brakującą część.
Thomas Dickey,
0

Możesz łatwo usunąć hasło klucza, używając następującego polecenia

ssh-keygen -p

W pierwszym monicie wprowadź ścieżkę do pliku (lub naciśnij klawisz Enter, aby zmienić domyślną) Drugi monit, wprowadź starą frazę Kolejny monit, wystarczy nacisnąć Enter, aby rozbroić hasło

Wygląda na to, że jest to najprostszy sposób!

Justin Samuel
źródło
0

Nadal pojawi się monit o hasło do odszyfrowania klucza prywatnego, nawet jeśli jest on załadowany ssh-agent momentu dodania odpowiedniego klucza publicznego SSH do zdalnego ~/.ssh/authorized_keys.

Powielać:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Dość mylące. W takim przypadku wystarczy zdalne hasło logowania SSH.

Mogę spekulować, że to uniemożliwia dodanie twojego klucza publicznego (który jest sparowany z zaszyfrowanym kluczem prywatnym) bez znajomości hasła szyfrowania dla odpowiedniego klucza prywatnego. W każdym razie jest to procedura jednorazowego logowania.

uvsmtid
źródło