Làm thế nào để sshd đọc lại tập tin cấu hình của nó (mà không hủy kết nối ssh)?


8

Làm cách nào để máy chủ ssh đọc lại tệp cấu hình của nó ( /etc/sshd_config) mà không làm mất các kết nối ssh hiện có?

EDIT: Nếu tôi chạy, kill -HUP <SSHD_PID>tôi giết kết nối.


Bạn đã thử gửi tín hiệu gác máy kill -HUP <PID of sshd>chưa? Theo man sshd: sshd rereads its configuration file when it receives a hangup signal, SIGHUP. (Bạn có thể tìm PID của sshdvới ps -ef|grep sshdNếu có nhiều hơn một. sshdQuy trình, gửi HUPđến tất cả chúng.)
Jaume

(xem bản chỉnh sửa mới nhất của tôi)
kjo

6
Có, bạn đã đúng, nếu bạn HUP một sshdquy trình có kết nối mở, sẽ sshdchấm dứt. Tuy nhiên, việc gửi tín hiệu HUP đến chính sshd, nghĩa là cha mẹ tạo sshdra một daemon mới cho mỗi kết nối đến, sẽ có hiệu ứng mong muốn. Trên OS X, tuy nhiên, không có chính sshd: sshdđược bắt đầu bởi launchdthông qua launchproxyvới tùy chọn -i, trong đó nói sshdrằng nó chạy từ inetdvà bắt đầu theo yêu cầu, khi launchdnhận được yêu cầu. Với thiết lập này, mọi kết nối SSH sẽ được sshdcấu hình mới với phiên bản mới nhất của tệp cấu hình của nó.
jaume

Câu trả lời:


5

sshd không "đọc lại" tập tin cấu hình của nó, nó tự khởi động lại (tham khảo man sshd (8)), tuy nhiên, nó không nên giết con / kết nối nếu bạn gửi SIGHUP cho PHỤ HUYNH cho tất cả. Đó là khi bạn đang nói về sshd liên kết với cổng 22, như trong "thông thường" với Linux / FreeBSD / vv. [có các trường hợp ngoại lệ và lý do sysadmin tại sao phải theo lộ trình loại MacOSX]

TUY NHIÊN MacOSX có launchd là thiết bị nghe và xử lý cổng 22 (từ máy 10.10.4 của tôi):

BlackYos:~ hvisage$ sudo lsof -i :22
Password:
COMMAND  PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd    1    root   57u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
launchd    1    root   58u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
launchd    1    root   62u  IPv6 0xdb59a664c78cd671      0t0  TCP *:ssh (LISTEN)
launchd    1    root   66u  IPv4 0xdb59a664c78d2e21      0t0  TCP *:ssh (LISTEN)
launchd    1    root   67u  IPv6 0xdb59a664c78cd671      0t0  TCP *:ssh (LISTEN)
launchd    1    root   68u  IPv4 0xdb59a664c78d2e21      0t0  TCP *:ssh (LISTEN)
ssh     1262 hvisage    3u  IPv4 0xdb59a664e59313b1      0t0  TCP blackyos:51628->hvs:ssh (ESTABLISHED)
sshd    1272    root    4u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
sshd    1272    root    5u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
sshd    1274 hvisage    4u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
sshd    1274 hvisage    5u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)

Đó là launchd có thể cần phải được "khởi động lại" trên macosx, hoặc nói về các cổng khác nhau để nghe cho sshd, vì launchd sẽ sinh ra một sshd mới cho mỗi kết nối 22 cổng đi kèm.

Kiểm tra lượt theo dõi:

BlackYos:~ hvisage$ sudo ps -ef |grep -i ssh
  501  1263     1   0  6:46PM ??         0:00.06 /usr/bin/ssh-agent -l
    0  1272     1   0  6:46PM ??         0:00.40 sshd: hvisage [priv]
  501  1274  1272   0  6:46PM ??         0:00.03 sshd: hvisage@ttys004
  501  1262   570   0  6:46PM ttys001    0:00.05 ssh -v hvs
  501  1303  1275   0  6:50PM ttys004    0:00.00 grep -i ssh
BlackYos:~ hvisage$

Tôi đã đến bộ định tuyến của mình và quay lại để chứng minh vấn đề và bạn sẽ nhận thấy rằng hai quy trình đã được tôi "sở hữu". So sánh điều này với một hệ thống Linux (đồ trang sức của tôi) nơi bạn sẽ nhận thấy sshd "thực" thứ ba được sở hữu bởi root:

hvisage@hvs:~$ ps -ef |grep -i ssh
root      4053     1  0 Jul11 ?        00:04:22 /usr/sbin/sshguard -i /var/run/sshguard.pid -l /var/log/auth.log -w /etc/sshguard/whitelist -a 40 -p 420 -s 1200
root     16244 30219  0 18:46 ?        00:00:00 sshd: hvisage [priv]
hvisage  16249 16244  0 18:46 ?        00:00:00 sshd: hvisage@pts/0
hvisage  16563 16250  0 18:52 pts/0    00:00:00 grep -i ssh
root     30219     1  0 Aug09 ?        00:00:00 /usr/sbin/sshd
hvisage@hvs:~$

1

Dòng sau kiểm tra cấu hình trước và nhận được PID của quy trình chính giữ tất cả các phần khác (được thử nghiệm trong Linux, zsh):

if /usr/sbin/sshd -t; then kill -HUP `ps aux | grep "/usr/sbin/sshd" | grep -v grep | awk '{ print $2 }'`; fi

KHÔNG hoạt động trên macOS ... Không có sshdquy trình.
Per Lundberg

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.