SSH dari Windows ke Linux tanpa memasukkan kata sandi


11

Saya mencoba menggunakan ssh / scp dari Windows ke Linux tanpa harus memasukkan kata sandi.

Inilah yang telah saya lakukan, dan sepertinya tidak berhasil:

  • kunci publik dan pribadi yang dihasilkan menggunakan Putty Key Generator (di Windows)
  • menyimpan file sebagai id_rsa.pubdanid_rsa
  • disalin ke ~/.ssh
  • menambahkan id_rsa.pub ke kotak Linux di ~/.ssh/authorized_keys
  • Saya kemudian mencoba untuk sshke kotak Linux dari Windows dan saya masih harus memasukkan kata sandi

Apakah saya melewatkan sesuatu?

Jawaban:


10

Anda harus menjalankan agen otentikasi pada Windows.

Misalnya, Pageant , digunakan dalam kombinasi dengan Putty (klien SSH grafis) atau Plink (setara dengan baris perintahnya).

Anda harus memberi tahu Pageant kunci publik server SSH Anda. Setelah itu akan berurusan dengan permintaan otentikasi server Anda saat berjalan di latar belakang.


1
Catatan: (Ini tidak jelas bagi saya.) Saat membuka Pageant, itu akan terbuka sebagai ikon di area notifikasi di kanan bawah. Klik kanan, dan klik Tambahkan Kunci , dan pilih file .ppk yang dihasilkan dari puttygen.
badjr


4

Coba Plink (bagian dari Putty)

 plink -v youruser@yourhost.com -pw yourpw "some linux command"

3
Memberi +1 untuk respons yang benar, tetapi Anda lebih baik menggunakan pasangan kunci publik / pribadi daripada kata sandi.
Ted Percival

Terlepas dari alternatifnya, dengan plink Anda tidak dapat memiliki terminal normal dengannya, misalnya: tombol panah tidak akan berfungsi untuk sejarah bash
PYK

3

Menyiapkan otentikasi kunci SSH bisa sedikit rumit. Sepertinya Anda menutupi semua pangkalan Anda. Satu hal yang sering membuat orang lengah - Anda perlu memastikan .sshdirektori dan isinya dimiliki oleh Anda dan hanya dapat dibaca / ditulis oleh Anda.

Pastikan untuk menjalankan ini (di semua .sshdirektori Anda ):

chmod -R 700 on ~/.ssh

Jika itu tidak bekerja, nyalakan verbose logging dengan menambahkan -vke Anda sshperintah (Anda dapat menambahkan hingga tiga -vss lebih bertele-tele).


2

Saya berasumsi kunci Anda tidak dilindungi kata sandi, dan yang Anda dapatkan bukan permintaan kata sandi kunci Anda.

~ / .ssh tidak digunakan oleh dempul di sisi windows, dan dempul tidak memiliki pengaturan kunci pribadi default. Jika Anda menggunakan klien baris perintah ssh seperti cygwin, membuat direktori .ssh di luar rumah Anda akan berfungsi. Dari dempul, Anda harus mengonfigurasi dan menyimpan sesi.

Dari dialog konfigurasi dempul, lihat koneksi -> data, dan isi bidang nama pengguna masuk otomatis. Lalu pergi ke koneksi -> ssh -> auth, dan atur kunci pribadi Anda dengan benar. Kemudian kembali ke dialog sesi, dan simpan sesi ini. Anda juga dapat mengatur nama host jika mau.

Setelah sesi tersimpan, Anda dapat menggunakan 'putty -load "savesession"'.


Juga, chmod 700 ~ / .ssh pada mesin target, dan chmod 644 ~ / .ssh / kunci yang diotorisasi. Setelah saya mengikuti instruksi Anda dan mengatur izin dengan benar, itu mulai bekerja untuk saya.
Blisterpeanuts

2

Saya menggunakan ini:

c: \> type c:\users\my_name\.ssh\id_rsa.pub | ssh root@172.110.1.171 "cat >> ~/.ssh/authorized_keys"


1

Anda juga mungkin perlu mengubah izin pada direktori home Anda:

chmod 755 ~

1

Saya dapat melakukan ini Windows 7dengan menggunakan -iopsi untuk menyediakan kunci pribadi identitas:

ssh -i X: \ win-path \ to \ private-key remoteuser@remote.host.com

kecuali bahwa pada host jarak jauh, kunci resmi saya ada di /etc/ssh/authorized_keys/remoteuserdan di /etc/ssh/sshd_config, saya berubah

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

tapi saya tidak tahu apakah konfigurasi jarak jauh SSH itu penting.


1

Yang Anda butuhkan adalah alat baris perintah lintas-platform ssh, ssh-keygen& ssh-copy-id. git untuk Windows menyertakannya.

Lakukan ini dari bashshell yang diinstal 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

Atau jalankan skrip ini di 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"

Setelah ini, login tanpa kata sandi akan berfungsi untuk keduanya sshdan scp.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.