SSH z Windows na Linux bez wprowadzania hasła

11

Próbuję użyć ssh / scp z systemu Windows do systemu Linux bez konieczności podawania hasła.

Oto co zrobiłem i wydaje się, że to nie działa:

  • wygenerowane klucze publiczne i prywatne przy użyciu Putty Key Generator (w systemie Windows)
  • zapisał pliki jako id_rsa.pubiid_rsa
  • skopiował je do ~/.ssh
  • dodano id_rsa.pub do pola Linux w ~/.ssh/authorized_keys
  • Następnie próbuję przejść sshdo Linux-a z systemu Windows i nadal muszę wprowadzić hasło

Czy coś brakuje?

Peter Mortensen
źródło

Odpowiedzi:

10

Musisz uruchomić agenta uwierzytelniania w systemie Windows.

Na przykład Pageant , używany w połączeniu z PuTTY (graficzny klient SSH) lub Plink (jego odpowiednik w wierszu poleceń).

Musisz powiedzieć Pageantowi klucz publiczny serwera SSH. Następnie zajmie się żądaniami uwierzytelnienia serwera podczas działania w tle.

Silvio Donnini
źródło
2
Uwaga: (To nie było dla mnie oczywiste). Podczas otwierania Pageant otworzy się jako ikona w obszarze powiadomień w prawym dolnym rogu. Kliknij go prawym przyciskiem myszy, kliknij Dodaj klucz i wybierz plik .ppk, który został wygenerowany z puttygen.
badjr
8

Potrzebujesz Pageant .

Zobacz wideo Logowanie bez hasła za pomocą PuTTY i Pageant . I / lub post na blogu Howto: Bezhasłowe uwierzytelnianie SSH za pomocą PuTTY .

Eduardo
źródło
1
Spróbuj zamieścić link do samouczków tekstowych zamiast filmów.
koder
Link do bloga jest uszkodzony. Spróbuj tego: tecmint.com/ssh-passwordless-login-with-putty
Kai Wang
2
Uszkodzony link do bloga to dokładny powód, dla którego odpowiedzi powinny być czymś więcej niż linkiem.
Ramhound,
5

Spróbuj Plink (część PuTTY)

 plink -v [email protected] -pw yourpw "some linux command"
Carlos Gutiérrez
źródło
3
+1 za poprawną odpowiedź, ale lepiej jest użyć pary klucza publicznego / prywatnego niż hasła.
Ted Percival
Pomimo alternatywy, z plink nie możesz mieć przy nim normalnego terminala, na przykład: klawisze strzałek nie działają w historii bash
PYK
3

Konfigurowanie uwierzytelniania za pomocą klucza SSH może być nieco trudne. Brzmi, jakbyś obejmował wszystkie swoje bazy. Jedna rzecz, która często zaskakuje ludzi - musisz upewnić się, że .sshkatalog i jego zawartość są własnością użytkownika i są odczytywane / zapisywane tylko przez Ciebie.

Uruchom to (we wszystkich swoich .sshkatalogach):

chmod -R 700 on ~/.ssh

Jeśli to nie zadziała, włącz pełne rejestrowanie, dodając -vdo sshpolecenia (możesz dodać do trzech -vss, aby uzyskać większą szczegółowość).

rcw3
źródło
3

Użyłem tego:

c: \> type c:\users\my_name\.ssh\id_rsa.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys"

Robert Djabarov
źródło
2

Zakładam, że twoje klucze nie są chronione hasłem, a to, co otrzymujesz, nie jest prośbą o hasło do twojego klucza.

~ / .ssh nie jest używane przez kit po stronie systemu Windows, a kit nie ma domyślnego ustawienia klucza prywatnego. Jeśli używasz klienta ssh z wiersza poleceń, takiego jak cygwin, utworzenie katalogu .ssh poza domem będzie działać. Z poziomu Kit musisz skonfigurować i zapisać sesję.

W oknie dialogowym konfiguracji kitu spójrz na połączenie -> dane i wypełnij pole automatycznej nazwy użytkownika. Następnie przejdź do połączenia -> ssh -> auth i poprawnie ustaw swój klucz prywatny. Następnie wróć do okna dialogowego sesji i zapisz tę sesję. Możesz także ustawić nazwę hosta, jeśli chcesz.

Po zapisaniu sesji możesz użyć polecenia „putty-load” „savesession”.

Andrew B.
źródło
Ponadto chmod 700 ~ / .ssh na maszynie docelowej i chmod 644 ~ / .ssh / uprawnione klucze. Gdy wykonałem instrukcje i poprawnie ustawiłem uprawnienia, zaczęło to działać.
Blisterpeanuts,
1

Może być również konieczna zmiana uprawnień w katalogu domowym:

chmod 755 ~
Haydn
źródło
1

Byłem w stanie to zrobić dokładnie Windows 7za pomocą -iopcji dostarczenia prywatnego klucza tożsamości:

ssh -i X: \ win-path \ to \ klucz prywatny [email protected]

z wyjątkiem tego, że na zdalnym hoście moje autoryzowane klucze są /etc/ssh/authorized_keys/remoteuseri są /etc/ssh/sshd_config, zmieniłem

#AuthorizedKeysFile     .ssh/authorized_keys
AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

ale nie wiem, czy zdalna konfiguracja SSH powinna mieć znaczenie.

amfibia
źródło
1

Wszystko czego potrzebujesz to wieloplatformowe sshnarzędzia wiersza poleceń ssh-keygeni ssh-copy-id. git dla Windows zawiera je.

Zrób to z bashpowłoki zainstalowanej na git :

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :

ssh-keygen.exe -t rsa -b 2048 
ssh-copy-id -i ~/.ssh/id_rsa.pub  $remoteuser@$remotehost

# These two chmod lines are needed on unix platforms, probably not on Windows. 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod 700 ~/.ssh
chmod 640 ~/.ssh/id_rsa

Lub uruchom ten skrypt w PowerShell:

Param(
  [Parameter()][string]$keyfile="id_rsa",
  [Parameter()][string]$remotehost,
  [Parameter()][string]$remoteuser
  )
write-host "# ---------------------------------------------------------------------------------#"
write-host "# Create an RSA public/private key pair, and copy the public key to remote server  #"
write-host "#                                                                                  #"
write-host "# /superuser/96051                                            #"
write-host "#         ssh-from-windows-to-linux-without-entering-a-password/1194805#1194805    #"
write-host "#                                                                                  #"
write-host "# ---------------------------------------------------------------------------------#"

write-host "Keyfile pair will be saved at : ~/.ssh/$keyfile, ~/.ssh/$keyfile.pub"
write-host "And copied to $remoteuser@$remotehost"
write-host ""
write-host "You will need a password for the copy operation."
write-host ""

if( -not $(ls ~/.ssh) ) { mkdir ~/.ssh }
$sshdir=$(get-item ~/.ssh/).Fullname

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :
ssh-keygen.exe -t rsa -b 2048 -f "$sshdir$keyfile"

# ssh-copy-id somehow didn't work in Powershell so I called it via bash
bash -c "ssh-copy-id -i ~/.ssh/$keyfile.pub $remoteuser@$remotehost"

# I'm not sure if these two chmod lines work on windows but 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod.exe 700 $sshdir
chmod.exe 640 "$sshdir$keyfile"

Następnie logowanie bez hasła powinno działać zarówno dla, jak sshi dla scp.

Chris F. Carroll
źródło