Không thể ssh ngay cả với khóa công khai được thêm vào ủy quyền


14

Tôi có một giọt Digital Ocean tôi đang cố gắng cấp cho mình quyền truy cập ssh. Tôi không chắc những gì đã được thực hiện trước đó. Tôi đã thử thêm khóa công khai của mình thông qua Giao diện người dùng kỹ thuật số. Điều đó đã không làm việc, tôi tiếp tục nhận được permission denied (publickey).

Tôi đã truy cập máy chủ thông qua bảng điều khiển Đại dương kỹ thuật số và tự thêm khóa công khai của mình vào /root/.ssh/authorized_keys. Sau đó tôi đã cố gắng để ssh sử dụng ssh root@x.x.x.x. Điều đó đã không làm việc (sự cho phép bị từ chối).

Vì vậy, tôi đã thử thêm một người dùng mới, tạo /home/me/.sshthư mục với các quyền 700trên .sshchính thư mục và 600trên authorized_keystệp. Sau đó tôi đã thử ssh me@x.x.x.x. Điều đó cũng không hiệu quả.

Khởi động lại daemon ssh cũng không thay đổi gì cả.

Tôi đang thiếu gì?

Biên tập:

Đây là đầu ra ssh verbose.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

Chỉnh sửa 2:

LogLevel DEBUG3 đầu ra:

nhập mô tả hình ảnh ở đây


Đăng nhật ký dài dòng từ kết nối, nội dung của bạn về sshd_config và các lỗi có thể liên quan đến ssh trong nhật ký máy chủ.
Jakuje

@Jakuje Tôi đã thêm đầu ra ... Tôi không nhận thấy bình luận của bạn trước đây.
Jeff

Chìa khóa bị từ chối. Kiểm tra nhật ký máy chủ để biết các sự cố có thể xảy ra (có thể có LogLevel DEBUG3trong sshd_config). Tôi nghi ngờ đây là những vấn đề cho phép, nhưng có thể có một số lý do cho việc này.
Jakuje

Nó nói[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff

Các quyền của tệp ủy quyền là gì? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Đối với nhật ký chi tiết từ máy chủ sửa đổi tệp được đề cập ở trên, khởi động lại dịch vụ ssh, kết nối lại và đăng nhật ký (cũng nên có auth.log.
Jakuje

Câu trả lời:


19

Cấu hình máy khách

Thiết lập ~/.ssh/config

Thiết lập các mục lưu trữ cho sshthực sự dễ dàng và sẽ giúp bạn tiết kiệm rất nhiều rắc rối. Đây là một ví dụ:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

Trong ví dụ này, thiết lập chúng ta digitaloceanboxgithubgithub.comđể chúng tôi có thể thực hiện lệnh sau:

  1. ssh github
  2. ssh digitaloceanbox

Nếu chúng tôi muốn đăng nhập như một người dùng khác với người dùng được chỉ định trong tệp cấu hình, chúng tôi chỉ cần đặt user@ở đầu:

  • ssh user@digitaloceanbox

Tạo sshkhóa

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

Lưu ý rằng tôi đã chỉ định đường dẫn đầy đủ của khóa riêng tôi muốn tạo khi được nhắc bởi ssh-keygen. Tôi cũng đã xác định nhận xét ( -C) cho phép tôi dễ dàng xác định các khóa trên các máy từ xa.

Điều này sẽ tạo ra hai tệp:

  1. .ssh/digitalocean-rsa
    • Phím RIÊNG TƯ . Không bao giờ chia sẻ điều này .
  2. .ssh/digitalocean-rsa.pub
    • Khóa công khai. Đây là những gì bạn lưu trữ trên máy chủ để xác thực.

Khi bạn cung cấp sshchìa khóa của mình , hãy chắc chắn đó là .pubphiên bản !! Khi bạn thêm vào ~/.ssh/config, hãy đảm bảo thêm khóa riêng phù hợp với khóa chung bạn đã thêm vào hệ thống.


Cấu hình máy chủ

Hầu hết các cài đặt sẽ đi kèm với Xác thực khóa công khai được bật. Tuy nhiên, nếu bạn bắt đầu làm mọi thứ một cách vô nghĩa, bạn có thể gặp phải một vài vấn đề. Tại nơi OP gặp vấn đề, tôi khuyên OP nên xóa /root/.ssh/thư mục để bắt đầu lại.

Bạn không nên sử dụng sshđể truy cập người dùng root trên hệ thống từ xa. Bạn nên sshvào một người dùng khác và sau đó chuyển sang root bằng mật khẩu của bạn ( sudo su -).

Thêm khóa vào máy chủ bằng cách sử dụng ssh-copy-id

Bất kể bạn quyết định tạo người dùng khác và sử dụng sshnhư người dùng đó hay người dùng root, sau đây là cách đặt sshkhóa được đề xuất trên máy chủ:

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

Điều này cho phép sshdtạo thư mục và tập tin cần thiết với các quyền cần thiết. Điều này có nghĩa là không có cơ hội để bạn làm rối các quyền hoặc cần phải nhớ các chi tiết. Chỉ cần sử dụng công cụ để tải lên các phím.

Vô hiệu hóa xác thực mật khẩu

Điều đó đang được nói, một khi bạn đã tự khóa và xác minh rằng bạn có thể kết nối bằng các khóa, bạn nên tắt Xác thực Mật khẩu trong sshdvà khởi động lại dịch vụ:

  1. Biên tập /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

Còn người dùng mới thì sao?

Nếu bạn tắt Xác thực Mật khẩu, làm thế nào bạn có thể khóa người dùng mới? Một cách là thêm các tệp mẫu vào /etc/skelthư mục. Khi bạn đã có một người dùng, hãy làm như sau:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Chỉnh sửa bất kỳ tệp nào được tìm thấy /etc/skel/.ssh/để chúng trống, trừ khi bạn muốn tự động khóa chính mình cho mọi người dùng mới được tạo.

Khi bạn tạo người dùng mới sudo useradd -m newuser, người dùng đó sẽ có .ssh/authorized_keys, bạn có thể chỉnh sửa và sẽ có quyền thích hợp.

Gỡ lỗi

Bạn có thể xem sshdtệp nhật ký để xem tại sao kết nối không thành công hoặc bị từ chối:

  1. sudo tail -f /var/log/auth.log

Trong khi bạn đang chạy lệnh này, hãy sử dụng một thiết bị đầu cuối khác để thử đăng nhập. Nhiều lần các thông điệp được cung cấp đủ tốt để giúp xác định vấn đề hoặc tìm giải pháp trực tuyến.


1
Bước gỡ lỗi làm việc cho tôi. Thư mục gốc có quyền sai (cần phải là 700)
naisanza

12

Ssh khá kén chọn về quyền sở hữu, quyền truy cập tệp và thư mục với các phím ssh.

~ / .ssh / nên được sở hữu bởi chủ sở hữu và có 700 quyền. ~ / .ssh / ủy quyền_key nên được sở hữu bởi chủ sở hữu và có 600 quyền.

Vì vậy, đối với root:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

Đối với người dùng tôi:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

Và sau đó thử lại.

Tất nhiên, bạn cũng nên kiểm tra / etc / ssh / sshd_config xem root có được phép đăng nhập hay không, chỉ bằng các phím ssh.

Nếu bạn có :

PasswordAuthentication no

sau đó bạn có thể thiết lập:

PermitRootLogin yes

Và sau đó khởi động lại sshd:

/etc/init.d/sshd restart

và thử lại.

Lưu ý rằng với ssh, daemon sshd có thể được khởi động lại ngay cả khi sử dụng phiên ssh cho this.Openssh được thiết kế để đối phó với điều đó.

Nhìn vào đoạn trích tệp nhật ký đã tải lên của bạn, có vẻ như bạn đang sử dụng MacOSX? Bạn có thể tạo một khóa ssh mới ở đó không?

Hơn nữa, trước đây tôi phát hiện ra rằng khi tôi có nhiều hơn một khóa ssh riêng trên máy tính cục bộ cho người dùng của mình, thì điều này đôi khi khiến bạn không thể đăng nhập từ xa bằng ssh. Nó đã giúp rất nhiều để tạo các mục trên máy tính cục bộ trong tệp ~ / .ssh / config, để giải quyết vấn đề này. Ví dụ :

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

Sau đó thử dòng lệnh trên máy tính cục bộ của bạn:

ssh -v my-vps

Khi sử dụng các khóa ssh, cũng như không có khóa ssh cho một số thông tin đăng nhập khác, bạn có thể, ngoài các mục có khóa ssh, cũng xác định thông tin đăng nhập ssh mà không sử dụng khóa ssh trong tệp ~ / ssh / config, ví dụ:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

Cái này làm việc tốt cho tôi. Cũng có thể xác định khóa nào sẽ được sử dụng trên dòng lệnh:

ssh -v root@10.111.111.254 -i .ssh/id_rsa

Điều này có thể làm cho việc gỡ lỗi dễ dàng hơn và trên dòng lệnh này sẽ luôn hoạt động trên máy tính cục bộ.


Ngoài giải pháp này, tôi cũng phải thay đổi quyền cho thư mục nhà của mình, để SSH hoạt động:sudo chmod 700 /home/me/
Rg90

Bạn là phao cứu sinh, @ albert-j! Các IdentityFiledòng đã cho tôi ra khỏi một kéo dài một giờ rut.
zev

4

Kiểm tra kỹ cấu hình ssh daemon (nên ở trong /etc/ssh/sshd_config) và kiểm tra:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Đồng thời kiểm tra tệp cấu hình để xem liệu AllowUsers hoặc Allowgroup đã được đặt chưa, vì chúng đóng vai trò là danh sách trắng cho người dùng và nhóm tương ứng.

Ngoài ra, tôi nhận thấy bạn đang cố gắng thêm khóa cho người dùng root. Theo mặc định, đăng nhập root nên bị vô hiệu hóa, nhưng bạn cũng có thể thay đổi điều này thông qua trường PermitRootLogin .


Không ai trong số này đang hoạt động: / Tôi vẫn nhận đượcPermission denied (publickey)
Jeff

3

Theo nhật ký bạn đã liên kết, tôi nghĩ rằng bạn có vấn đề ở phía máy khách không tìm thấy tệp khóa riêng .

  • Trước tiên hãy kiểm tra tệp ~/.ssh/id_rsatồn tại trên máy cục bộ của bạn và là tệp chính xác _ (nếu bạn có nhiều hơn).

  • Kiểm tra .sshquyền thư mục (nên drwx------, nếu không chạy sudo chmod 700 ~/.ssh) và nội dung của nó (nên -rw-------, nếu không chạy sudo chmod 600 ~/.ssh/*) . Áp dụng các quyền tương tự cho máy từ xa quá.

Ngoài ra, bạn có thể thử sử dụng khóa riêng mong muốn của mình , cung cấp trực tiếp sshvới -itham số.

  • Bạn có thể chạy một cái gì đó như sau:

    ssh -i /path/to/your/private-key root@X.X.X.X

    hoặc là

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

Bạn có thể nhận thêm thông tin về ssh manpage (chạy man sshtrên thiết bị đầu cuối của bạn) .

Ngoài ra, hãy nhớ nếu bạn muốn đăng nhập với tư cách rootngười dùng, tài khoản root của bạn phải được kích hoạt trước khi đăng nhập, tạo một mật khẩu cho nó bằng sudo passwd roothoặc công cụ quản trị máy chủ của bạn (Ubutntu có tài khoản root bị tắt theo mặc định) . Bạn có thể nhận thêm thông tin tại Ubuntu Wiki .

Hy vọng nó giúp.


3

Tôi đã kết thúc việc cài đặt lại openssh-servermà đã khắc phục vấn đề. Các giải pháp được đưa ra đều tuyệt vời, nhưng chúng không hiệu quả với tôi. Tôi không biết điều gì đã gây ra sự cố nhưng tôi nghĩ rằng nhà phát triển trước đó có thể đã nhầm lẫn với cấu hình và làm mọi thứ rối tung lên khá tệ.

Tôi nghi ngờ sẽ có bất cứ ai có vấn đề cụ thể như tôi. Tuy nhiên, nếu bạn có một giọt Digital Ocean, bạn không thể có quyền truy cập SSH và không có giải pháp nào được đưa ra, hãy cài đặt lại máy chủ SSH bằng cách chạy các lệnh này thông qua bảng điều khiển Digital Ocean. Coi chừng đây là một quá trình phá hủy và sẽ xóa các tệp cấu hình cũ trong/etc/ssh/ (không phải .sshthư mục của bạn ).

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

Giả sử máy khách / khóa ssh của bạn theo thứ tự, bạn sẽ có thể SSH vào máy chủ của mình.


1

Vấn đề này xuất hiện đối với tôi khi sử dụng hình ảnh Debian trên Digital Ocean. Bằng cách nào đó trong quá trình thiết lập ngắn gọn, có thể khi tôi đặt mật khẩu gốc, chủ sở hữu /rootđã được đổi thành người dùng debian. Tôi thấy như sau /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

Đơn giản chỉ cần thực hiện đã chown root:root -R /rootgiải quyết vấn đề.

HTH


0

Chỉ có một vấn đề rất giống nhau. Điều này làm việc cho tôi - Thêm dòng này vào / etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

Sau đó khởi động lại ssh theo cách thông thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.