Mam witrynę jako zdalne repozytorium Git pobierające z Bitbucket.com przy użyciu aliasu SSH. Mogę ręcznie uruchomić agenta ssh na moim serwerze, ale muszę to robić przy każdym logowaniu przez SSH.
Ręcznie uruchamiam agenta ssh:
eval ssh-agent $SHELL
Następnie dodaję agenta:
ssh-add ~/.ssh/bitbucket_id
Następnie pojawia się, gdy:
ssh-add -l
I dobrze mi idzie. Czy istnieje sposób na zautomatyzowanie tego procesu, więc nie muszę tego robić przy każdym logowaniu? Na serwerze działa RedHat 6.2 (Santiago).
ssh-agent <command>
działa<command>
jako podprocesssh-agent
, więc zaczynasz nową powłokę. Myślę, że chceszeval ssh-agent
..bash_profile
jest specyficzny dla bash,.profile
jest ogólny dla wszystkich powłok POSIX.bash
najpierw szuka.bash_profile
, a następnie domyślnie.profile
.ssh-agent
dla „standardowej” powłoki (zgodnej z POSIX) jesteval $(ssh-agent -s)
. Należy również zauważyć, że trzeba upewnić się, że prawidłowo pozbyć się agenta, gdy użytkownik loguje się, więc jest to również wskazane, aby umieścićtrap 'kill $SSH_AGENT_PID' EXIT
w twojej.profile
po linii, która zaczyna agenta.Odpowiedzi:
Przejrzyj ten artykuł. Może ci się to bardzo przydać:
http://mah.everybody.org/docs/ssh
Na wypadek, gdyby powyższy link zniknął pewnego dnia, przechwytuję główny fragment poniższego rozwiązania:
źródło
.bash_profile
używającsource ~/.bash_profile
w bieżącej sesji powłoki. Ponowne uruchomienie komputera będzie również działać, ponieważ i tak załaduje nową konfigurację.SSH_ENV="$HOME/.ssh/env"
(tj. Po prostu nie / środowiska) Dlaczego? sshd używa ~ / .ssh / environment (patrz strona podręcznika man: PermitUserEnvironment). Github również poleca to w swoim rozwiązaniu - help.github.com/articles/…ssh-agent
polecenia start w .bashrc spowoduje, żescp
polecenie nie będzie działać.W Arch Linux następujące działania działają naprawdę świetnie (powinny działać na wszystkich dystrybucjach systemowych):
Utwórz usystematyzowaną usługę użytkownika, umieszczając następujące elementy w
~/.config/systemd/user/ssh-agent.service
:Skonfiguruj powłokę, aby mieć zmienną środowiskową dla gniazda (
.bash_profile, .zshrc, ...
):Włącz usługę, aby została uruchomiona automatycznie podczas logowania i uruchom ją:
Dodaj następujące ustawienie konfiguracji do lokalnego pliku konfiguracyjnego ssh
~/.ssh/config
(działa od wersji SSH 7.2):To poinstruuje klienta ssh, aby zawsze dodawał klucz do działającego agenta, więc nie ma potrzeby wcześniejszego dodawania go.
źródło
ssh-agent
procesu. Być może brakuje mi wiedzy nawet po przeczytaniu dokumentacji.SSH_AGENT_PID
zmiennej środowiskowej :(Stare pytanie, ale natrafiłem na podobną sytuację. Nie sądzę, że powyższa odpowiedź w pełni spełnia wymagania. Brakującym elementem jest
keychain
; zainstaluj, jeśli jeszcze nie jest.Następnie dodaj następujący wiersz do swojego
~/.bashrc
Spowoduje to uruchomienie,
ssh-agent
jeśli nie jest uruchomione, połączenie się z nim, jeśli tak, załadowaniessh-agent
zmiennych środowiskowych do powłoki i załadowanie klucza ssh.Zmień
id_rsa
na dowolny klucz prywatny,~/.ssh
który chcesz załadować.Odniesienie
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
źródło
keychain --eval id_[yourid file]
do .bashrceval `keychain --eval id_[yourid file]`
do.bashrc
. Wsteczki wymagane do oceny zmiennych środowiskowych w bieżącej powłoce w celu uzyskania dostępu do działającego agenta ssh.-q
opcję trybu cichego. Więcej informacji o pęku kluczy: funtoo.org/KeychainPrzyjęte rozwiązanie ma następujące wady:
Jeśli twoje klucze nie wymagają wpisywania hasła, sugeruję następujące rozwiązanie. Dodaj na
.bash_profile
samym końcu (edytuj listę kluczy do swoich potrzeb):Ma następujące zalety:
Ma możliwe wady:
ssh-add
polecenie wpłynie tylko na jedną sesję, co w rzeczywistości jest problemem tylko w bardzo nietypowych okolicznościach;Zauważ, że kilka
ssh-agent
procesów nie jest wadą, ponieważ nie zajmują więcej pamięci ani czasu procesora.źródło
Dodaj to do swojego
~/.bashrc
, a następnie wyloguj się i zaloguj ponownie, aby zastosować.Powinno to monitować o podanie hasła tylko przy pierwszym logowaniu po każdym ponownym uruchomieniu. Będzie używać tego samego
ssh-agent
tak długo, jak długo będzie działać.źródło
~/.ssh/id_rsa
? Wygląda na to, żessh-add
część twojej odpowiedzi oczekuje domyślnych nazw plików dla kluczy.Używałem więc opisanych powyżej podejść, ale wolę, aby agent umarł po zakończeniu mojej ostatniej sesji bash. Jest to nieco dłużej niż w przypadku innych rozwiązań, ale to moje preferowane podejście. Podstawową ideą jest to, że pierwsza sesja bash uruchamia agenta ssh. Następnie każda dodatkowa sesja bash sprawdza plik konfiguracyjny (
~/.ssh/.agent_env
). Jeśli tak jest i jest uruchomiona sesja, wówczas/tmp
należy pobrać środowisko i utworzyć dowiązanie twarde do pliku gniazda w (musi znajdować się w tym samym systemie plików, co oryginalny plik gniazda). Po zamknięciu sesji bash każda usuwa swój własny link twardy. W ostatniej sesji do zamknięcia okaże się, że hardlinki mają 2 linki (hardlink i oryginał), usunięcie własnego gniazda procesów i zabicie procesu spowoduje 0, pozostawiając czyste środowisko po zamknięciu ostatniej sesji bash.źródło
Aby dodać jeszcze jedno rozwiązanie: P, wybrałem kombinację rozwiązań @spheenik i @ collin-anderson.
Może być trochę bardziej elegancki, ale jest prosty i czytelny. To rozwiązanie:
AddKeysToAgent yes
jest w konfiguracji ssh, więc klucze zostaną automatycznie dodane po użyciuKomentarze mile widziane :)
źródło
AddKeysToAgent yes
ustawieniu. Dzięki.Rozwiązałem to, dodając to do / etc / profile - w całym systemie (lub do lokalnego pliku .profile użytkownika lub _.bash_profile_):
Spowoduje to uruchomienie nowego agenta ssh-agent, jeśli nie jest uruchomiony dla bieżącego użytkownika, lub ponowne ustawienie parametru env ssh-agent, jeśli jest uruchomiony.
źródło
if pgrep -u $WHOAMI $SERVICE >/dev/null
działaUżytkownicy skorupy ryb mogą użyć tego skryptu, aby zrobić to samo.
źródło
Używam do tego narzędzia ssh-ident .
Z jego strony man :
źródło
Wypróbowałem kilka rozwiązań z wielu źródeł, ale wszystkie wydawały się zbyt wielkim problemem. Wreszcie znalazłem najłatwiejszy :)
Jeśli nie znasz jeszcze zsh i oh-my-zsh zainstaluj go. Będzie Ci się podobało :)
Następnie edytuj
.zshrc
znajdź
plugins
sekcję i zaktualizuj ją, aby użyć w następującyssh-agent
sposób:I to wszystko! Będziesz
ssh-agent
działał przy każdym uruchomieniu powłokiźródło
Bardzo lubię twoje odpowiedzi.
cygwin / linux
Ułatwiło to pracę z hostami. Połączyłem funkcje początkowe i końcowe, aby zapewnić bezpieczeństwo.źródło