Pertanyaan Bagaimana saya bisa mengatur login SSH tanpa password?


Saya ingin bisa login ke remote melalui ssh tanpa harus memasukkan kata sandi sepanjang waktu.

  • Bagaimana cara mengaturnya?
  • Apakah perintah yang berbeda diperlukan untuk menjalankan sesi tanpa sandi?

226
2018-06-04 17:24


asal


Apakah Anda menggunakan openssh? (jika itu mudah;)) - Rinzwind
@Rinzwind, Mengapa saya repot-repot mendapatkan versi kepemilikan ketika OpenSSH sudah terinstal? - Oxwivi
Saya mencoba untuk tidak membuat assuptions;) - Rinzwind
Perhatikan bahwa ini dianggap praktik keamanan yang buruk, dan beberapa distribusi menonaktifkannya di luar kotak. Saya tidak yakin, tetapi mungkin Anda harus mengaktifkannya PermitRootLogin di /etc/ssh/sshd_config untuk membuat ini bekerja. - Kevin
@Kevin, mohon klarifikasi. Kita berbicara tentang ssh-ing tanpa kata sandi, yang umumnya a praktik yang baik. Apakah maksud Anda ssh-ing ke shell root? Itu tidak tercakup oleh pertanyaan ini. - Oxwivi


Jawaban:


Menjawab

Jalankan perintah ini:

ssh-keygen

Maka Anda harus menyalin kunci baru ke server Anda:

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

Setelah kunci disalin, ssh ke mesin seperti biasa:

ssh user@host

Anda sekarang dapat masuk tanpa memasukkan kata sandi dari mesin tertentu yang Anda jalankan perintahnya.

Contoh

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Penjelasan

Ini mengasumsikan Anda sudah dapat berhasil terhubung ke server Anda melalui SSH.

Anda harus menghasilkan SSH Keypair yang memungkinkan Anda mengidentifikasi diri Anda sendiri tanpa menggunakan kata sandi. Anda dapat memilih untuk melindungi kunci dengan kode sandi jika Anda mau, tetapi ini dapat dibiarkan kosong sehingga memungkinkan akses SSH tanpa sandi sama sekali.

  1. Pertama buat SSH Keypair Anda dengan menjalankan ssh-keygen ini akan membuat id_rsa dan id_rsa.pub mengajukan. Itu pub file adalah apa yang terjadi di server, kunci privat (id_rsa) adalah apa yang tetap dengan Anda dan bagaimana Anda mengidentifikasi diri Anda sendiri.
  2. Selanjutnya salin kunci publik ke server Anda ssh-copy-id user@server mengganti pengguna dengan pengguna dan server jarak jauh Anda dengan nama DNS mesin atau alamat IP. Ini akan meminta kata sandi SSH Anda, masukkan dan jika semua berhasil diselesaikan Anda akan dapat mengakses mesin melalui ssh user@server tanpa perlu kata sandi.

Referensi


231
2018-06-04 17:36



@Oxwivi jawaban ini adalah cara yang lebih tepat untuk melakukannya - tetapi tampaknya lebih lama. Yang perlu Anda lakukan hanyalah mengetik ssh-keygen ikuti instruksi di layar, lalu ketik ssh-copy-id user@server mengganti pengguna dengan pengguna dan server jarak jauh Anda dengan mesin jarak jauh - Marco Ceppi♦
Saya memiliki kesalahan ini "Agen mengakui kegagalan untuk menandatangani menggunakan kunci." setiap kali ketika mencoba untuk masuk setelah mengikuti prosedur ini. Solusinya adalah dengan menjalankan "> ssh-add" pada komputer lokal dan sekarang saya dapat masuk ke mesin remote seperti yang diharapkan. - jmbouffard
Penting untuk disebutkan bahwa jika Anda perlu menggunakan port khusus untuk @server, Anda perlu melakukan ini dengan: ssh-copy-id "not-marco@127.0.0.1 -p 1234". - s3m3n
@Rinzwind: Apakah ini berarti saya tidak dapat mengotentikasi dari klien / mesin yang tidak dikenal ke server saya jika saya menonaktifkan otentikasi passwd & hanya membolehkan otentikasi kunci. Apakah ada cara untuk memungkinkan login dari mesin yang tidak dikenal menggunakan kunci privat yang dihasilkan untuk klien yang dikenal / dikonfigurasi untuk berkomunikasi ke server? Maksud saya, apakah ini kunci pribadi portabel & dapat digunakan untuk mengotentikasi diri ke server dari mesin lain, dalam hal kebutuhan darurat ?? - Rajat Gupta
Tetapi server masih meminta kata sandi ,,, - lerner


Ketik perintah berikut:

  1. ssh-keygen 

    tekan Memasukkan kunci sampai Anda mendapatkan prompt

  2. ssh-copy-id -i root@ip_address

    (Ini akan sekali meminta kata sandi dari sistem host)

  3. ssh root@ip_address

Sekarang Anda harus bisa masuk tanpa kata sandi.


30
2018-05-17 08:45





Cara saya biasanya melakukan ini adalah sebagai berikut:

ssh-keygen -t rsa

(Saat diminta kata sandi, biarkan kosong)

Kemudian: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Ini mengharuskan folder .ssh berada di direktori home pada nama host yang ditargetkan, dengan file authorized_keys di dalamnya)

Tentu saja, ganti nama pengguna dengan nama pengguna yang diinginkan, dan nama host dengan nama host atau alamat IP yang diinginkan

Setelah itu, cukup SSH ke kotak itu seperti biasanya.


21
2018-06-04 18:22



Bagaimana tentang touch dan chmod perintah dalam jawaban Rinzwind? - Oxwivi
Anda harus melakukan chmod .ssh/authorized_keys file ke 0600 atau ini tidak akan berfungsi - Marco Ceppi♦
Ini sangat membantu karena saya tidak bisa mendapatkan ssh-copy-id untuk bekerja untuk root di server saya. itu harus menjadi root dalam situasi di mana backuppc (atau daemon lain) perlu ssh ke komputer lain. - Adam


Saya biasanya menggunakan sshpass untuk itu, instal dengan sudo apt-get install sshpass dan gunakan seperti ini

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



Mengapa tidak menggunakan kunci ssh? - enzotib
Ini bukan situasi "mengapa tidak", itu masih bekerja sempurna tanpa menambahkan kunci, itu hanya metode lain yang akan saya katakan. - Bruno Pereira
Terima kasih atas informasi tentang sshpass, belum pernah mendengarnya sebelumnya. - Panther
Kunci SSH adalah jawaban yang "benar" untuk pertanyaan itu, tetapi sshpass adalah peretasan yang sangat berguna jika Anda tidak dapat mengubah metode autentikasi di server jauh! - Jacob Krall
Ini sangat berbahaya, Anda akan tetap di bash_history atau apa pun kata sandi biasa untuk host yang Anda hubungi. - kappa


Solusi ini khusus untuk pengguna yang menggunakan Windows untuk ssh ke dalam mesin jarak jauh mereka termasuk gambar awan AWS Cloud dan GCE Cloud


9
2017-11-20 09:07





Nonaktifkan Otentikasi Kata Sandi

Karena banyak orang dengan server SSH menggunakan kata sandi yang lemah, banyak   penyerang online akan mencari server SSH, lalu mulai menebak   kata sandi secara acak. Seorang penyerang dapat mencoba ribuan kata sandi dalam   jam, dan tebak password terkuat yang diberikan cukup waktu. Itu   solusi yang disarankan adalah menggunakan kunci SSH bukan kata sandi. Untuk menjadi seperti   sulit ditebak sebagai kunci SSH normal, kata sandi harus berisi   634 huruf dan angka acak. Jika Anda selalu bisa masuk   komputer Anda dengan kunci SSH, Anda harus menonaktifkan kata sandi   otentikasi semuanya.

Jika Anda menonaktifkan otentikasi kata sandi, itu hanya akan mungkin untuk   terhubung dari komputer yang telah Anda setujui secara khusus. Ini secara besar-besaran   meningkatkan keamanan Anda, tetapi membuat tidak mungkin bagi Anda untuk terhubung   komputer Anda sendiri dari PC teman tanpa pra-menyetujui PC, atau   dari laptop Anda sendiri saat Anda secara tidak sengaja menghapus kunci Anda.

Dianjurkan untuk menonaktifkan otentikasi kata sandi kecuali Anda memiliki   alasan spesifik untuk tidak melakukannya.

Untuk menonaktifkan otentikasi kata sandi, cari baris berikut di   file sshd_config Anda:

#PasswordAuthentication yes

ganti dengan garis yang terlihat seperti ini:

PasswordAuthentication no

Setelah Anda menyimpan file dan restart server SSH Anda, Anda   seharusnya tidak diminta kata sandi saat Anda masuk.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


7
2018-02-15 01:10



Ini adalah jawaban yang paling mendasar tetapi bagus untuk keamanan! Juga menonaktifkan login root adalah salah satu yang bagus - FreeSoftwareServers
Apakah PasswordAuthentication no mempengaruhi semua pengguna? Jika tidak, bagaimana cara mematikannya untuk pengguna biasa tetapi membiarkannya tidak berubah untuk root sementara saya mengujinya? Saya tidak benar-benar ingin memfitnah dan mengunci diri sepenuhnya. - Adam
Biarkan sesi ssh terbuka sehingga Anda dapat mengubahnya kembali. Anda ingin menonaktifkan kata sandi DAN root. Ya, Anda bisa membuatnya. Jangan;) - Thufir
Selama ssh, saya memiliki kesalahan Permission denied (publickey). dengan PasswordAuthentication no. Apa yang harus saya lakukan? Apakah saya berubah PasswordAuthentication nodi host lain? - ParisaN


Jika Anda membuat keypair publik / pricate dan masuk menggunakan kunci publik yang baru dibuat, Anda tidak perlu mengetikkan kata sandi Anda. Bergantung pada konfigurasi agen key-ring dan / atau ssh Anda mungkin perlu melindungi kunci Anda dengan frasa sandi.

Ini adalah salah satu dari sekian banyak howto pendeks untuk Anda. Ini sangat penting untuk keamanan metode ini, bahwa kunci privat yang dihasilkan tetap pribadi! Anda tidak boleh membaginya dengan siapa pun atau mengizinkan aksesnya dalam kapasitas apa pun.

Perintah ini menghasilkan kunci yang cukup kuat ~/.ssh/:

ssh-keygen -b 4096

Di ~/.ssh/ Anda akan menemukan kunci publik Anda sebagai id_rsa.pub. Isinya harus ditambahkan ke server Anda authorized_keys file dengan mengangkut melalui media yang diangkut (pen drive) atau dengan segera mengaktifkan otentikasi kata sandi di server, kemudian menggunakan ssh-copy-id ~/.ssh/id_rsa.pub username@server dan kemudian nonaktifkan lagi.

Jika Anda memilih untuk mengamankan kunci Anda dengan passphrase (pada langkah pertama), Anda dapat menggunakan ssh-agent atau keyring Ubuntu untuk mengamankan pharse secara lokal sehingga Anda tidak perlu mengetiknya setiap saat.


4
2018-06-04 17:32





Login / copy jarak jauh tanpa memberikan kata sandi

Aplikasi ssh dan scp untuk login jarak jauh dan remote copy, masing-masing, memungkinkan Anda untuk berkomunikasi dengan host jarak jauh tanpa memberikan kata sandi. Ini mengharuskan Anda mengikuti prosedur otentikasi seperti yang dijelaskan di bawah ini. Menurut klien, kami berarti mesin yang Anda duduki dan oleh server kami maksud mesin yang ingin Anda masuki tanpa memberikan kata sandi. Langkah-langkah dari prosedur otentikasi adalah:

  1. Jalankan ssh-keygen untuk menghasilkan kunci pribadi dan publik, kecuali ini sudah dilakukan di komputer Anda. Ini disimpan dalam file di $HOME/.ssh.
  2. Tambahkan isi file kunci publik ke file $HOME/.ssh/authorized_keys atau $HOME/.ssh/authorized_keys2 di server.

Ada tiga jenis protokol otentikasi yang berbeda. Anda menentukan jenis ketika menjalankan ssh-keygen:

  1. SSH versi protokol 1, RSA1: ini adalah pilihan default dan menghasilkan identitas file (kunci pribadi, harus diambil chmod 0700 untuk memastikan bahwa file ini tidak dapat dibaca oleh orang lain) dan identity.pub (kunci publik).
  2. SSH versi protokol 1, RSA: ini diperoleh dengan berlari ssh-keygen -t rsa dan menghasilkan file id_rsa (kunci pribadi) dan id_rsa.pub (kunci publik)
  3. SSH versi protokol 1, DSA: ini diperoleh dengan berlari ssh-keygen -t dsa dan menghasilkan file id_dsa (kunci pribadi) dan id_dsa.pub (kunci publik)

Saat menjalankan ssh-keygen Anda dapat mengandalkan jawaban default (menyiratkan bahwa Anda tidak memberikan passphrase). Ini membuat seluruh pengaturan sederhana, tetapi juga tidak aman.

Anda dapat menentukan jenis kunci yang akan digunakan oleh opsi ssh; ssh -1 kekuatan penggunaan RSA1 kunci (versi protokol 1), sedangkan ssh -2 pasukan ssh untuk mencoba RSA atau DSA kunci saja (versi protokol 2). Dalam contoh di bawah ini, kami membuat dan memasang RSA1 dan DSA kunci pada host jarak jauh sehingga Anda memiliki lebih banyak fleksibilitas. Anda dapat membuat file konfigurasi di Anda .ssh direktori dengan garis

Protocol 1,2

Ini membuat ssh coba sebuah RSA1 (versi protokol 1) koneksi sebelumnya RSA / DSA (versi protokol 2).

Menggunakan kunci RSA1

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

Menggunakan kunci DSA

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Ini semua yang harus Anda lakukan jika Anda tidak menggunakan passphrase ketika menghasilkan kunci. Anda dapat menguji koneksi dengan menjalankan ssh $ remote dan melihat apakah Anda dapat masuk tanpa memberikan kata sandi (Anda mungkin perlu menggunakannya -1 atau -2 sebagai opsi untuk ssh). Prosedur ini dapat, tentu saja, diulang untuk setiap mesin yang ingin Anda masuki.

Jika Anda menggunakan passphrase, Anda harus menjalankan program ssh-agent untuk memulai shell khusus, diikuti oleh ssh-add untuk mendaftarkan Anda kunci / passphrase kombinasi dengan sshd. Lihat halaman manual untuk program ini untuk informasi lebih lanjut.

Skrip untuk mengotomatisasi koneksi bebas kata sandi: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

disalin dari: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27





Untuk membuat beberapa tambahan:

  • Mac secara default tidak punya ssh-copy-id, Anda harus menginstalnya sendiri:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

temukan lebih lanjut di sini: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • jika Anda telah membuat port-forwarding, perintahnya harus seperti ini:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

perhatikan bahwa kutipan diperlukan.


2
2017-09-14 12:14





Saya ingin menambahkan jawaban bagi mereka yang mungkin menemukan bahwa mereka harus memasukkan kata sandi bahkan mereka telah membaca semua jawaban di sini karena Anda telah menetapkan Identitas Hanya sebagai ya. Dan jawabannya di sini dapat menghemat banyak waktu untuk mengelola beberapa kunci, menjadi kunci untuk git atau server.

Setelah saya membuat kunci dan menyalinnya ke server:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

Saya menemukan itu tidak berhasil.

Lalu saya pergi untuk memeriksa ~/.ssh/config file, saya melihat ini di bagian bawah:

Host *
IdentitiesOnly yes

Lalu saya tambahkan ini di atas:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Saya bisa masuk begitu saja dengan masuk ssh somename.

Kemudian Anda dapat menambahkan beberapa kunci ssh menggunakan nama favorit Anda, dan Anda hanya perlu menambahkan pengaturan seperti empat baris di atas ke file konfigurasi.

Host adalah nama yang ingin Anda masukkan ketika Anda menghubungkan server nanti; HostName adalah ip server; Pengguna adalah nama pengguna yang Anda masukkan di server; dan identityfile adalah file tempat Anda menyimpan kunci yang telah Anda buat.


1
2018-01-24 09:08