SSH bez hasła z domyślną lokalizacją pliku tożsamości

16

W ramach skryptu startowego muszę automatycznie otworzyć kilka okien terminali gnome, jeden z tych terminali automatycznie wysyła:

ssh [email protected]

Ograniczeniem jest to, że nadal muszę wpisać hasło, aby zakończyć połączenie SSH.

Chcę, aby mój skrypt zainicjował polecenie i dokończył połączenie. W tym zakresie starałem się postępować zgodnie z instrukcjami opisanymi w zaakceptowanej odpowiedzi tutaj .

Z systemu, z którego chcę się połączyć, uruchomiłem:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key

Następnie skłonił mnie do wprowadzenia hasła. Zostawiłem to puste, ponieważ nie byłem pewien, po co to będzie, więc założyłem, że ustawienie jednego będzie wymagało odblokowania go za pomocą wspomnianego hasła za każdym razem, gdy go użyję.

Kontynuując powyższe instrukcje, uruchomiłem i otrzymałem następujące informacje:

ssh-copy-id user@IP
ERROR: No identities found

Szybkie wyszukiwanie ujawniło, że muszę określić lokalizację klucza, ponieważ nie było go w domyślnej lokalizacji zapisu, więc naprawiłem:

ssh-copy-id -i /home/user/ssh/keys/server1key.pub [email protected]

Po zapytaniu o hasło serwera pomyślnie dodał klucz. Jednak po próbie zalogowania się za pomocą „ssh użytkownik @ IP” nadal byłem monitowany o hasło.

O ile mi wiadomo, postępowałem zgodnie z instrukcjami, więc albo coś mi brakuje, a może istniejąca konfiguracja uniemożliwia mi to uruchomienie?

Oba systemy używają 18.04 i openssh.

hiigaran
źródło
Więc muszę podać lokalizację pliku .pub podczas wysyłania polecenia SSH?
hiigaran
Mam trochę inny sposób organizowania plików, stąd lokalizacje inne niż domyślne, ale wy bardzo pomogliście. Dzięki. Zapraszam do odpowiedzi, którą mogę zaakceptować.
hiigaran

Odpowiedzi:

35

Nie udaje się z tego samego powodu, który ssh-copy-idzawiódł za pierwszym razem - tj. Dlatego, że wybrałeś inną niż domyślna lokalizację pliku tożsamości.

Możesz rozwiązać to w ten sam sposób, dodając -i /home/user/ssh/keys/server1keydo sshpolecenia - zwróć uwagę, że po stronie klienta wymagana jest lokalizacja pliku klucza prywatnego .

Od man ssh

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.

Alternatywnie, możesz chcieć utworzyć ~/.ssh/configwpis pliku dla hosta wzdłuż linii

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
steeldriver
źródło
1
Zawsze zakładałem, że plik konfiguracyjny wymaga wcięcia - widzę, że tak nie jest. Intrygujące.
Boris the Spider
Każdy, kto korzysta z OpenSSH, powinien mieć ~/.ssh/config, w przeciwnym razie OpenSSH korzysta z domyślnych ustawień systemowych /etc/ssh/ssh_config. Na wypadek, gdyby ktokolwiek uznał to za pomocne, przesłałem jakiś czas wcześniej gotowy ssh_config do mojego GitHub jako punkt wyjścia dla użytkowników, którzy mogą nie mieć czasu na przeczytanie strony
podręcznika ssh_config
@ JW0914 to tylko połowa prawdy: poszczególne wartości zastąpią wartości ~/.ssh/configglobalne ssh_config, ale samo posiadanie pliku nie wyłączy konfiguracji całego systemu.
Sebastian Stark,
@SebastianStark Być może źle odczytałeś mój komentarz, ponieważ nigdy nie powiedziałem, że spowoduje to wyłączenie konfiguracji całego systemu. To, co powiedziałem, było w 100% zgodne z faktami.
JW0914,
2

Innym powodem ssh-copy-idniepowodzenia jest to, że klucz nie został dodany do agenta SSH.

Najpierw sprawdź i uruchom, jeśli ssh-agentdziała:

eval "$(ssh-agent -s)"

Jeśli dostaniesz identyfikator procesu, możesz dodać swój klucz:

ssh-add -k /home/user/ssh/keys/server1key

Wraz z -kdodaniem klucza do pęku kluczy.

Sprawdź, czy klucze zostały dodane za pomocą:

ssh-add -l

ssh-copy-id powinien już działać.

Martijn
źródło
-1

Mam nadzieję, że to zadziała dla ciebie. „Sshpass -p twoje hasło” automatycznie zaloguje się na zdalnym hoście.

[root @ localhost .ssh] # sshpass -p hasło123 ssh -l root localhost

JackyChan
źródło
-1

Wystarczy wykonać 2 polecenia:

ssh-keygen
ssh-copy-id

Długa odpowiedź:

user@ip:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): temp_file
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in stemp.
Your public key has been saved in stemp.pub.
The key fingerprint is:
SHA256:5**M user@ip
The key's randomart image is:
+---[RSA 2048]----+
|  ...            |
| ...             |
| ..              |
| ..+.    o .     |
|                 |
|    B            |
|                 |
|=      *         |
|=+   o .         |
+----[SHA256]-----+

I wtedy:

user@ip:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ipDestination -p portDest
Mohsen Abasi
źródło