SSH đặt lại cổng mặc định khi khởi động lại


12

Tôi đã thay đổi cổng SSH mặc định của mình trên máy chủ gia đình (trong /etc/ssh/sshd_configtệp) thành cổng 54747, sau đó khởi động lại sshsshddịch vụ (không bao giờ chắc chắn cái nào vì vậy tôi đã làm cả hai để an toàn). Để kiểm tra cấu hình của mình, tôi đã đăng xuất và sau đó quay lại mà không gặp vấn đề gì.

Vài ngày sau, tôi đã cài đặt các bản cập nhật apt và sau đó khởi động lại máy chủ của mình. Khi tôi cố gắng SSH trở lại (trên cổng 54747), tôi đã gặp lỗi từ chối kết nối.

Vì một số lý do, tôi đã thử SSH trên cổng mặc định và nó đã hoạt động! Tôi đã quay lại để kiểm tra sshd_config, nhưng nó vẫn có cổng tùy chỉnh. Vì vậy, tôi đã khởi động lại sshsshdcác dịch vụ, và nó đã trở lại hành vi "thông thường" (ssh trên cổng 54747). Tôi đã thử khởi động lại một lần nữa và kết nối đã từ chối một lần nữa ...

Có ai biết tôi đã làm gì sai không?

Thêm chi tiết:

  • Ubuntu 16.04.2 LTS
  • Máy chủ cũng được sử dụng HTPC, với phiên mở (cùng người dùng với SSH) trên TV của tôi
  • Tôi SSH sử dụng khóa RSA của máy tính xách tay của mình và đã tắt mật khẩu auth
  • Tôi đã từng khởi động lại sudo reboot -h now, nhưng sau khi tìm kiếm, tôi phát hiện ra nó bị một số người ngăn cản, vì vậy tôi đã thử sudo reboot, nhưng không có sự khác biệt

EDIT Trình tự các sự kiện:

  1. Thay đổi cổng SSH từ 22 thành 54747 trong /etc/ssh/sshd_config
  2. Khởi động lại dịch vụ ssh và sshd
  3. Kết thúc phiên SSH hiện tại
  4. SSH trở lại thành công trên cổng 54747
  5. Khởi động lại
  6. Lỗi kết nối SSH trên cổng 54747, nhưng thành công ở cổng 22
  7. Khởi động lại dịch vụ ssh và sshd
  8. SSH trở lại thành công trên cổng 54747, lỗi kết nối trên cổng 22
  9. Khởi động lại và quay trở lại 6

EDIT 1: netstat đầu ra

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

EDIT 2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

EDIT 3: lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

Để tham khảo, ATLAS là tên máy chủ từ xa, 192.168.1.27 là IP LAN của máy tính xách tay của tôi và lệnh được thực thi giữa các bước 6 và 7

ufw status

Status: inactive

EDIT 4: ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd

Tôi không chê bai bạn bằng mọi cách. Nhưng có vẻ như tôi không nhập các lệnh trên máy chủ ssh theo yêu cầu. Bạn không thể có kết nối ssh trực tiếp khi ssh daemon đã chết ....... trên máy chủ ssh, ps -ef | grep sshd sẽ trả về quá trình / usr / sbin / sshd -D. Có một số người giúp đỡ nhưng gửi cho bạn theo tất cả các hướng khác nhau. Tôi rất vui khi trò chuyện với bạn trên IM nếu điều đó hữu ích với bạn.
jones0610

Có lẽ vì tôi đã có một phiên với cùng một người dùng đã mở và hiển thị trên TV của tôi với Kodi?
3rgo

Xin chào, @ 3rgo, bạn đã giải quyết vấn đề này chưa?
pa4080

Chào ! Không, tôi vẫn gặp phải vấn đề này ... May mắn thay, tôi không phải khởi động lại máy chủ nhà của mình thường xuyên, nhưng nó vẫn là một nỗi đau, vì nó phá vỡ một số quy trình tự động của tôi ...
3rgo

Tôi đã có một số ý tưởng. (1) Bạn có thể thử thay đổi cổng thành giá trị mặc định, sau đó khởi động lại toàn bộ hệ thống. Sau đó cố gắng thay đổi nó một lần nữa với giá trị mong muốn. (2) Thử với giá trị khác nhau, ví dụ Port 10285. Google hiển thị vài kết quả cho 54747 ... (3) Ngoài ra, máy chủ SSH có thể hoạt động cùng lúc với một số cổng. Tạo hai chỉ thị riêng cho mỗi cổng: Port 22Port 54747sau đó chỉ mở thứ hai vào tường lửa. (4) Bạn có thể thử Match LocalPortchỉ thị , được đặt vào đầu sshd_c.
pa4080

Câu trả lời:


2

ssh có thể được "kích hoạt ổ cắm" bởi systemd tùy theo cấu hình, điều đó có nghĩa là ban đầu, systemd sẽ thiết lập cổng nghe và sshd chỉ được khởi động khi máy khách kết nối lần đầu. Điều này là để tăng tốc thời gian khởi động: daemon dịch vụ chỉ được bắt đầu theo yêu cầu.

Tuy nhiên, điều này có nghĩa là bạn cũng phải cấu hình systemd với cổng phù hợp. Bạn sẽ tìm thấy cấu hình hệ thống trong /lib/systemd/system/ssh.socketđó liệt kê ListenStream=22. Để ghi đè lên điều này, hãy tạo một tệp /etc/systemd/system/ssh.socket.d/port.conf(tạo thư mục ssh.socket.dnếu cần) có chứa:

[Socket]
ListenStream=
ListenStream=54747

Thay đổi số thành cổng mong muốn. Mục trống đầu tiên xóa mặc định trước đó và mục tiếp theo thêm mục mới. Điều này ghi đè mặc định được vận chuyển /lib/systemd/system/ssh.socketvà phải được thực hiện ngoài việc thay đổi /etc/ssh/sshd_config.

Sau đó chạy sudo systemctl daemon-reloadđể nói với systemd về những thay đổi của bạn và sudo systemctl reload sshnếu dash ssh của bạn đã chạy trước đó.


Câu trả lời này có vẻ rất hứa hẹn, nhưng /etc/systemd/system/ssh.socket.d/port.confđang bị bỏ qua và khởi động lại vẫn đặt lại cổng thành 22. Tên tệp có liên quan không? Không thể tìm thấy tài liệu tốt về ghi đè systemd trên Ubuntu .
MestreLion

Tên tệp không quan trọng miễn là nó kết thúc .conf. Xem systemd-system.conf (5) để biết chi tiết về các tệp cấu hình ghi đè systemd.
Robie Basak

Ngoài ra, bạn có thể chạy systemctl status ssh.socketđể xem nếu nó được kích hoạt và những gì nó đang nghe.
Robie Basak

2
Những công việc này!!! Cuối cùng thì nhầm lẫn này đã được giải quyết! Nhưng sau đó tôi nhận thấy tôi có thể truy cập bằng cả hai cổng: mặc định 22 và cổng tùy chỉnh. Thêm một ListenStream=dòng trước cổng tùy chỉnh đã ngăn chặn điều này, không biết tại sao. Có lẽ điều này "xóa" ListenStream=22cài đặt trong mặc định /lib/systemd/system/ssh.socket? Cách kỳ lạ để ghi đè cài đặt. Có lẽ đáng để thêm điều này vào câu trả lời?
MestreLion

@MestreLion ah vâng, đúng rồi. Tôi sẽ cập nhật câu trả lời. Cảm ơn!
Robie Basak

0

Xác nhận cài đặt cổng của bạn trong /etc/ssh/sshd_configtệp. Hãy chắc chắn rằng bạn đang chỉnh sửa dưới dạng sudo hoặc người dùng trong nhóm sudo. Tất cả những gì bạn phải làm để đặt cổng là, trên một loại dòng Port 54747.Bây giờ, hãy khởi động lại dịch vụ ssh bằng cách chạy service sshd restart.Sau đó xác minh rằng ssh đang lắng nghe trên cổng đó bằng cách chạy sudo netstat -lntp | grep ssh.Reboot và kiểm tra.

Ngoài ra kiểm tra cài đặt mạng của bạn. Nếu bạn đang ở trong một mạng công ty, hãy chắc chắn rằng bạn đang ở trong vlan chính xác.


Tôi đã thực hiện sao lưu và chỉnh sửa tệp dưới dạng sudo và chỉ thay đổi Port 22dòng mặc định Port 54747. Ngoài ra, netstat bạn đã cho tôi, không có đầu ra. Tôi đã thêm một sửa đổi trong OP của tôi
3rgo

Bạn đang kết nối với một chìa khóa chính xác? Vì vậy, bạn nên kết nối như : ssh -i key.txt user@ipaddress -p 54747. Ngoài ra kiểm tra nếu có bất cứ điều gì khác đang nghe trên cổng đó. Làm sudo lsof -i | grep ssh. Bạn cũng có thể kiểm tra tường lửa của mình để đảm bảo nó không chặn bất cứ thứ gì. Làm : sudo ufw status.
G_Style

Không có cổng nào được sử dụng trên 54747 (xem OP của tôi, tôi đã thêm nó). Tôi cũng đang thêm đầu ra của các lệnh của mình vào đó
3rgo

Sau khi suy nghĩ thêm về vấn đề của bạn, tôi có cảm giác rằng đó không phải là thiết lập của bạn, mà là cách bạn khởi động lại, điều đó gây ra vấn đề này mà bạn đang gặp phải. Khi bạn khởi động lại, bạn nên sử dụng lệnh shutdown -r now. Hãy thử và cho chúng tôi biết kết quả. Xem bài viết này để tham khảo: askubfox.com/questions/483670/ trên
G_Style

Tôi vừa thử, và nhận được kết quả tương tự như sudo reboot -h nowhoặc 'sudo restart``
3rgo

0

Đôi khi mọi thứ chỉ đi sai. Nếu tôi ở vị trí của bạn, tôi sẽ thử với:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server

Nó sẽ yêu cầu tôi truy cập vật lý vào máy chủ chứ? Nếu vậy, tôi chỉ có thể làm điều đó vào tối mai
3rgo

Xin chào @ 3rgo, tôi nghĩ bạn không cần truy cập vật lý. Tôi chỉ thử nó trên VPS của tôi. Cũng vào máy chủ Ubuntu của tôi, trong khi tôi đã đăng nhập qua SSH. Ngay cả kết nối cũng không bị gián đoạn. cplệnh chỉ trong trường hợp, thông thường quá trình cài đặt lại không chạm vào tập tin cấu hình.
pa4080

Chào! Tôi đã thử cài đặt lại, nhưng không có gì thay đổi, tôi vẫn gặp vấn đề tương tự ...
3rgo

0

ssh là quá trình máy khách phân xử và duy trì kết nối phiên người dùng đến máy chủ ssh. sshd là trình nền chạy trên máy chủ ssh để lắng nghe và xác thực các yêu cầu kết nối ssh.

Tệp cấu hình trên máy chủ sshd được đọc khi bắt đầu dịch vụ sshd (yêu cầu quyền sudo để chỉnh sửa) là

/etc/ssh/sshd_config

Dịch vụ nên bắt đầu

/etc/systemd/system/sshd.service

Để khởi động lại sshd, điều này sẽ liên quan đến việc đọc lại tệp sshd_config

sudo service sshd restart

Để xem cổng nào sshd daemon đang nghe, cũng như các thông tin hữu ích khác, trên loại máy chủ ssh

sudo service sshd status

Thực hiện các bước này theo thứ tự được chỉ định:

Khởi động lại máy chủ ssh

Mở phiên cuối trên máy chủ ssh (không phải kết nối ssh vào đó)

Kiểu hostname

Nếu tên máy chủ không trả về tên của máy chủ ssh (Atlas trong trường hợp này) hãy thực hiện lại bước trước đó một cách chính xác.

grep Port /etc/ssh/sshd_config - lưu ý số cổng. Nên là người bạn chỉ định

sudo service sshd status

Nếu trạng thái báo cáo rằng nó đang hoạt động, đang chạy và nghe trên cổng tùy chỉnh mà bạn đã chỉ định, thì bạn sẽ làm tốt điều đó. Nếu không, khởi động dịch vụ có thể không gọi tệp sshd_config mà bạn đã sửa đổi nhưng một tệp cấu hình khác có chứa thông tin mặc định. Nếu dịch vụ không bắt đầu (nói đã chết và không hoạt động và đang chạy, thì đây là một vấn đề khác với những gì bạn đã hỏi về.

Các bước này có thể sẽ xác định nguyên nhân gốc rễ của vấn đề bạn đang hỏi về.

Đối với mục đích thử nghiệm và để đơn giản: Về phía máy khách, từ phiên cuối, bạn sẽ ssh vào máy chủ ssh như sau

ssh -l username -p 54747 hostname

Dựa trên phản hồi của OP, tôi nghi ngờ rằng sshd không khởi động khi khởi động nhưng không khởi động chính xác khi được gọi thủ công. Kết nối ssh thành công qua cổng 22 cũng có thể KHÔNG được kết nối với máy chủ ssh mà đến một thứ khác (ví dụ: localhost). Để chứng minh hoặc gỡ lỗi này, sau khi kết nối qua loại ssh

hostname

Dựa trên những gì OP đang nói, tôi đoán tên máy chủ sẽ không phải là bản đồ máy chủ ssh.

Để tiếp tục cách ly điều này, sau khi khởi động lại máy chủ ssh nhưng trước khi làm gì thêm , từ một phiên cuối trên loại máy chủ ssh (Atlas)

ssh localhost

Nếu điều này không thành công, thì nó nên

ssh -p 54747 localhost

Nếu điều này không hoạt động, nó sẽ xác nhận kết quả thu được khi chạy

sudo service sshd status

Chào ! Tôi đã thêm một chuỗi các sự kiện để bạn có thể hiểu rõ hơn. Tôi SSH bằng cách sử dụng lệnh ssh -p <PORT> <USER>@<IP>, với khóa riêng của tôi được thêm vào tác nhân.
3rgo

Rất tốt. Thực hiện bước 6a: trên máy chủ sshd, trạng thái sshd dịch vụ sudo. Nếu nó báo cáo cổng 22 thì có một tệp sshd_config không có thật đang được gọi.
jones0610

Nói, "không hoạt động (đã chết)" (xem toàn bộ đầu ra trong OP của tôi trong một giây)
3rgo

Vì vậy, nếu nó chết (không hoạt động và đang chạy), bạn không ssh-ing vào máy mà bạn nghĩ là bạn. Trên máy chủ sshd, gõ ps -ef | grep sshd. Nếu daemon sshd trên máy chủ sshd thực sự đã chết, sẽ không có quá trình sshd nào được chạy và do đó bạn sẽ không thể ssh vào nó bất kể cổng được sử dụng.
jones0610

Đã tìm thấy 2 quy trình sshd ... Tôi đã thêm đầu ra chi tiết
3rgo

0

Có lẽ bạn vừa trả lời Y khi apt phát hiện ra sự khác biệt giữa sshd_config và gói của bạn. Nó hỏi bạn có muốn cài đặt phiên bản của người quản lý gói hay giữ phiên bản của bạn không.


1
Tôi không nhớ đã được hỏi một điều như vậy, nhưng giả sử đó là trường hợp, tôi có thể làm gì để khắc phục nó?
3rgo

0

Nguyên nhân có thể mà tôi có thể nghĩ đến

  1. Một nhị phân sshd khác được bắt đầu khi khởi động hoặc sshd được bắt đầu với một cấu hình khác. Có lẽ systemd là thủ phạm ở đây - nó có một cách khác để thay đổi cổng, thông qua tệp /usr/lib/systemd/system/sshd.socketrõ ràng: https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. Đúng / etc / hoặc / etc / ssh chưa được gắn khi sshd khởi động, nó có phải là một âm lượng riêng trên máy của bạn được gắn sau này trong quá trình khởi động không?
  3. sshd đang thiếu quyền đọc tệp cấu hình khi khởi động, mặc dù tôi không biết liệu sshd thậm chí có bắt đầu hay không.

2
Tôi nghĩ bạn đang ở trên đó. Và nếu đó là một máy chủ đã trải qua rất nhiều nâng cấp, có thể có một loạt các kịch bản khởi động được đặt xung quanh (sysv-init, upstart, systemd) Có thể là một tìm kiếm đơn giản và kiểm tra tất cả các tệp trong / etc / find /etc/ -iname "*ssh*"để tìm thêm manh mối.
Bazz
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.