Câu hỏi Làm thế nào tôi có thể thiết lập đăng nhập SSH không mật khẩu?


Tôi muốn để có thể đăng nhập vào một từ xa thông qua ssh mà không cần phải nhập mật khẩu tất cả các thời gian.

  • Làm cách nào để thiết lập?
  • Một lệnh khác có cần thiết để thực thi một phiên mật khẩu không?

226
2018-06-04 17:24


gốc


Bạn đang sử dụng openssh? (nếu điều đó thật dễ dàng;)) - Rinzwind
@Rinzwind, Tại sao tôi lại bận tâm khi nhận được phiên bản sở hữu độc quyền khi OpenSSH đã được cài đặt sẵn? - Oxwivi
Tôi cố gắng không đưa ra các giả định;) - Rinzwind
Lưu ý rằng đây được coi là một thực hành bảo mật kém và một số bản phân phối vô hiệu hóa nó ra khỏi hộp. Tôi không chắc chắn, nhưng có thể bạn sẽ cần bật PermitRootLogin trong /etc/ssh/sshd_config để thực hiện công việc này. - Kevin
@ Kevin, hãy làm rõ bản thân. Chúng ta đang nói về ssh-ing không có mật khẩu, thường là thực hành tốt. Bạn có nghĩa là ssh-ing vào một vỏ gốc? Điều đó không được đề cập trong câu hỏi này. - Oxwivi


Các câu trả lời:


Câu trả lời

Thực hiện các lệnh này:

ssh-keygen

Sau đó, bạn sẽ cần sao chép khóa mới vào máy chủ của mình:

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

Sau khi khóa được sao chép, ssh vào máy như bình thường:

ssh user@host

Bây giờ bạn có thể đăng nhập mà không cần nhập mật khẩu từ máy cụ thể mà bạn đã thực thi lệnh tại.

Thí dụ

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.

Giải trình

Điều này giả định bạn đã có thể kết nối thành công với máy chủ của bạn thông qua SSH.

Bạn sẽ cần tạo một Khóa SSH cho phép bạn xác định bạn là chính bạn mà không cần sử dụng mật khẩu. Bạn có thể chọn bảo vệ các khóa bằng mật mã nếu muốn, nhưng điều này có thể để trống cho phép truy cập SSH hoàn toàn bằng mật khẩu.

  1. Trước tiên hãy tạo Khóa SSH của bạn bằng cách chạy ssh-keygen điều này sẽ tạo ra id_rsa và id_rsa.pub tập tin. Các pub tệp là những gì xảy ra trên máy chủ, khóa cá nhân (id_rsa) là những gì ở lại với bạn và là cách bạn tự xác định mình.
  2. Tiếp theo, sao chép khóa công khai vào máy chủ của bạn với ssh-copy-id user@server thay thế người dùng bằng người dùng và máy chủ từ xa bằng tên DNS hoặc địa chỉ IP của máy. Nó sẽ nhắc mật khẩu SSH của bạn, nhập mật khẩu và nếu tất cả hoàn tất thành công, bạn sẽ có thể truy cập máy qua ssh user@server mà không cần mật khẩu.

Tài liệu tham khảo


231
2018-06-04 17:36



@Oxwivi câu trả lời này là cách chính xác hơn để làm điều đó - nhưng có vẻ như lâu hơn. Tất cả những gì bạn cần làm là nhập ssh-keygen làm theo hướng dẫn trên màn hình, sau đó nhập ssh-copy-id user@server thay thế người dùng bằng máy chủ và người dùng từ xa của bạn bằng máy từ xa - Marco Ceppi♦
Tôi đã có lỗi này "Đại lý thừa nhận thất bại ký bằng cách sử dụng phím." mỗi khi cố gắng đăng nhập sau khi làm theo quy trình này. Giải pháp là chạy "> ssh-add" trên máy cục bộ và bây giờ tôi có thể đăng nhập vào máy từ xa như mong đợi. - jmbouffard
Điều đáng nói là nếu bạn cần sử dụng cổng tùy chỉnh cho @server, bạn cần thực hiện điều này với: ssh-copy-id "not-marco@127.0.0.1 -p 1234". - s3m3n
@Rinzwind: Điều này có nghĩa là tôi không bao giờ có thể xác thực từ một máy khách / máy không xác định đến máy chủ của tôi nếu tôi vô hiệu hóa xác thực passwd và chỉ cho phép xác thực khóa. Có cách nào để cho phép đăng nhập từ máy không xác định bằng cách sử dụng khóa riêng đã được tạo cho máy khách đã biết / được định cấu hình để liên lạc với máy chủ không? Ý tôi là, khóa cá nhân này có thể được sử dụng để tự xác thực với máy chủ từ các máy khác, trong trường hợp khẩn cấp không? - Rajat Gupta
Nhưng máy chủ vẫn yêu cầu mật khẩu ,,, - lerner


Nhập các lệnh sau:

  1. ssh-keygen 

    nhấn Đi vào cho đến khi bạn nhận được lời nhắc

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

    (Nó sẽ một lần yêu cầu mật khẩu của hệ thống máy chủ)

  3. ssh root@ip_address

Bây giờ bạn sẽ có thể đăng nhập mà không cần bất kỳ mật khẩu nào.


30
2018-05-17 08:45





Cách tôi thường làm như sau:

ssh-keygen -t rsa

(Khi được nhắc nhập mật khẩu, hãy để trống)

Sau đó: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Điều này yêu cầu thư mục .ssh nằm trong thư mục chính trên tên máy chủ được nhắm mục tiêu, với tệp authorized_keys trong đó)

Tất nhiên, thay thế tên người dùng bằng tên người dùng mong muốn và tên máy chủ bằng tên máy chủ hoặc địa chỉ IP mong muốn

Sau đó, chỉ cần SSH vào hộp đó giống như bạn đang sử dụng.


21
2018-06-04 18:22



Vậy còn touch và chmod lệnh trong câu trả lời của Rinzwind? - Oxwivi
Bạn sẽ cần phải chmod .ssh/authorized_keys tập tin đến 0600 hoặc điều này sẽ không hoạt động - Marco Ceppi♦
Điều này thực sự hữu ích vì tôi không thể lấy ssh-copy-id để làm việc cho root trên máy chủ của tôi. nó phải là root trong tình huống mà backuppc (hoặc bất kỳ daemon nào khác) cần ssh trên một máy khác. - Adam


Tôi thường sử dụng sshpass cho rằng, cài đặt nó với sudo apt-get install sshpass và sử dụng nó như thế này

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



Tại sao không sử dụng khóa ssh? - enzotib
Nó không phải là một "tại sao không" tình hình, nó vẫn hoạt động hoàn hảo mà không cần thêm phím, nó chỉ là một phương pháp tôi sẽ nói. - Bruno Pereira
Cảm ơn thông tin về sshpass, chưa bao giờ nghe nói về nó trước đây. - Panther
Khóa SSH là câu trả lời "đúng" cho câu hỏi, nhưng sshpass là một hack rất hữu ích trong trường hợp khi bạn không thể thay đổi phương pháp xác thực trên máy chủ từ xa! - Jacob Krall
Điều này rất nguy hiểm, bạn sẽ giữ trong bash_history hoặc bất kỳ mật khẩu đơn giản nào cho các máy chủ mà bạn kết nối với .. - kappa


Giải pháp này dành riêng cho người dùng sử dụng các cửa sổ đến ssh vào máy từ xa của họ bao gồm cả hình ảnh trên đám mây Đám mây AWS và GCE Cloud


9
2017-11-20 09:07





Tắt xác thực mật khẩu

Bởi vì rất nhiều người có máy chủ SSH sử dụng mật khẩu yếu, nhiều   kẻ tấn công trực tuyến sẽ tìm kiếm một máy chủ SSH, sau đó bắt đầu đoán   mật khẩu ngẫu nhiên. Kẻ tấn công có thể thử hàng ngàn mật khẩu trong một   giờ, và đoán ngay cả mật khẩu mạnh nhất có đủ thời gian. Các   giải pháp được khuyến nghị là sử dụng các khóa SSH thay vì mật khẩu. Để được như   khó đoán như một khóa SSH bình thường, mật khẩu sẽ phải chứa   634 chữ cái và số ngẫu nhiên. Nếu bạn luôn có thể đăng nhập vào   máy tính của bạn bằng khóa SSH, bạn nên tắt mật khẩu   xác thực hoàn toàn.

Nếu bạn tắt xác thực mật khẩu, nó sẽ chỉ có thể   kết nối từ máy tính mà bạn đã phê duyệt cụ thể. Điều này ồ ạt   cải thiện bảo mật của bạn, nhưng làm cho bạn không thể kết nối với   máy tính của riêng bạn từ PC của một người bạn mà không cần phê duyệt trước máy tính, hoặc   từ máy tính xách tay của riêng bạn khi bạn vô tình xóa khóa của mình.

Bạn nên tắt xác thực mật khẩu trừ khi bạn có   lý do cụ thể không.

Để tắt xác thực mật khẩu, hãy tìm dòng sau trong   tệp sshd_config của bạn:

#PasswordAuthentication yes

thay thế nó bằng một dòng giống như sau:

PasswordAuthentication no

Khi bạn đã lưu tệp và khởi động lại máy chủ SSH, bạn   thậm chí không nên hỏi mật khẩu khi bạn đăng nhập.

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


7
2018-02-15 01:10



Đây là câu trả lời chính xác nhất nhưng tốt cho an ninh! Cũng vô hiệu hóa đăng nhập root là một trong những tốt nhất - FreeSoftwareServers
Làm PasswordAuthentication no ảnh hưởng đến tất cả người dùng? Nếu không, làm thế nào để tắt nó cho người dùng bình thường nhưng để nó không thay đổi cho root trong khi tôi đang thử nghiệm nó? Tôi không thực sự muốn foobar nó và khóa bản thân mình ra hoàn toàn. - Adam
Giữ một phiên ssh mở để bạn có thể thay đổi nó trở lại. Bạn muốn vô hiệu hóa mật khẩu VÀ root. Có, bạn có thể fubar nó. Đừng;) - Thufir
Trong ssh, tôi có lỗi Permission denied (publickey). với PasswordAuthentication no. Tôi nên làm gì đây? Tôi có thay đổi không PasswordAuthentication no trên một máy chủ khác? - ParisaN


Nếu bạn tạo cặp khóa công khai / pricate và đăng nhập bằng khóa công cộng mới được tạo của chúng tôi, bạn sẽ không cần nhập mật khẩu của mình. Tùy thuộc vào cấu hình của khóa-ring và / hoặc đại lý ssh của bạn, bạn có thể cần phải bảo vệ khóa của mình bằng cụm mật khẩu.

Đây là một trong nhiều ngắn howtos cho bạn. Nó rất quan trọng đối với sự an toàn của phương pháp này, rằng khóa riêng được tạo ra vẫn là riêng tư! Bạn không bao giờ nên chia sẻ nó với bất kỳ ai hoặc cho phép truy cập vào bất kỳ khả năng nào.

Lệnh này tạo ra một khóa hợp lý mạnh mẽ trong ~/.ssh/:

ssh-keygen -b 4096

Trong ~/.ssh/ bạn sẽ tìm thấy khóa công khai của bạn id_rsa.pub. Nội dung của nó nên được nối vào máy chủ của bạn authorized_keys tệp bằng cách di chuyển qua phương tiện có thể truyền tải (ổ đĩa bút) hoặc bằng cách cho phép xác thực mật khẩu nhanh trên máy chủ, sau đó sử dụng ssh-copy-id ~/.ssh/id_rsa.pub username@server và sau đó vô hiệu hóa nó một lần nữa.

Nếu bạn chọn bảo mật khóa bằng cụm mật khẩu (trong bước đầu tiên), bạn có thể sử dụng ssh-agent hoặc keyring Ubuntu để đảm bảo tính năng này cục bộ, do đó bạn không phải gõ nó mọi lúc.


4
2018-06-04 17:32





Đăng nhập / sao chép từ xa mà không đưa mật khẩu

Các ứng dụng ssh và scp cho đăng nhập từ xa và bản sao từ xa, tương ứng, cho phép bạn giao tiếp với một máy chủ từ xa mà không cần đưa mật khẩu. Điều này yêu cầu bạn làm theo một quy trình xác thực như quy trình được mô tả bên dưới. Bởi khách hàng chúng tôi có nghĩa là máy của bạn đang ngồi trên và bởi máy chủ, chúng tôi có nghĩa là máy bạn muốn đăng nhập mà không đưa ra một mật khẩu. Các bước của quy trình xác thực là:

  1. Chạy ssh-keygen để tạo khóa riêng và khóa công cộng, trừ khi điều này đã được thực hiện trên máy của bạn. Các tệp này được lưu trữ trong các tệp trong $HOME/.ssh.
  2. Nối thêm nội dung của tệp khóa công khai vào tệp $HOME/.ssh/authorized_keys hoặc là $HOME/.ssh/authorized_keys2 trên máy chủ.

Có ba loại giao thức xác thực khác nhau. Bạn chỉ định kiểu khi chạy ssh-keygen:

  1. SSH giao thức phiên bản 1, RSA1: đây là lựa chọn mặc định và kết quả nhận dạng tệp (khóa cá nhân, nên dùng chmod 0700 để đảm bảo rằng tệp này không thể đọc được đối với những người khác) và identity.pub (khóa công khai).
  2. SSH giao thức phiên bản 1, RSA: điều này thu được bằng cách chạy ssh-keygen -t rsa và kết quả trong tệp id_rsa (khóa riêng) và id_rsa.pub (khóa công khai)
  3. SSH giao thức phiên bản 1, DSA: điều này thu được bằng cách chạy ssh-keygen -t dsa và kết quả trong tệp id_dsa (khóa riêng) và id_dsa.pub (khóa công khai)

Khi chạy ssh-keygen bạn có thể dựa vào các câu trả lời mặc định (ngụ ý rằng bạn không đưa ra một mật khẩu). Điều này làm cho toàn bộ thiết lập đơn giản, nhưng cũng không an toàn.

Bạn có thể chỉ định loại khóa sẽ được sử dụng bởi một tùy chọn để ssh; ssh -1 lực lượng sử dụng RSA1 phím (giao thức phiên bản 1), trong khi ssh -2 lực lượng ssh thử RSA hoặc là DSA chỉ các phím (giao thức phiên bản 2). Trong các ví dụ bên dưới, chúng tôi tạo và cài đặt RSA1 và DSA trên máy chủ từ xa để bạn linh hoạt hơn. Bạn có thể tạo một tệp cấu hình trong .ssh thư mục với dòng

Protocol 1,2

Điều này làm cho ssh hãy thử một RSA1 (giao thức phiên bản 1) kết nối trước RSA / DSA (giao thức phiên bản 2).

Sử dụng khóa 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"

Sử dụng khóa 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"

Đây là tất cả những gì bạn phải làm nếu bạn không sử dụng cụm từ mật khẩu khi tạo khóa. Bạn có thể kiểm tra kết nối bằng cách chạy từ xa ssh $ và xem liệu bạn có thể đăng nhập mà không đưa mật khẩu (bạn có thể cần phải sử dụng -1 hoặc là -2 như tùy chọn để ssh). Tất nhiên, thủ tục có thể được lặp lại cho bất kỳ máy nào bạn muốn đăng nhập.

Nếu bạn đã sử dụng cụm mật khẩu, bạn sẽ phải chạy chương trình ssh-agent để bắt đầu một vỏ đặc biệt, tiếp theo là ssh-add để đăng ký của bạn khóa / cụm mật khẩu kết hợp với sshd. Xem các trang hướng dẫn sử dụng cho các chương trình này để biết thêm thông tin.

Một kịch bản để tự động kết nối không có mật khẩu: 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"

được sao chép từ: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27