Cách đóng (giết) ssh các kết nối ControlMaster bằng tay


63

Với .ssh/configcấu hình sau :

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 4h

Làm thế nào để đóng kết nối liên tục trước 4 giờ?

Tôi biết bạn có thể tạo kết nối mới, nhưng làm thế nào để đóng chúng (tất cả)?

Có thể có một cách để hiển thị tất cả các kết nối liên tục và xử lý chúng riêng lẻ nhưng tôi không thể tìm thấy nó.


4
Không giết nó, nhưng đơn giản là bạn không thể sử dụng kết nối bền bỉ thông qua ssh -S none(có thể điều này đã giúp bạn rồi).
sr_

Không, tôi đang cố gắng xóa người dùng trên một máy chủ từ xa, nhưng các kết nối treo ngăn tôi thực hiện điều đó.
Paolo

Câu trả lời:


81

Từ hướng dẫn :

-O ctl_cmd
Kiểm soát một quá trình ghép kênh kết nối hoạt động. Khi -Otùy chọn được chỉ định, ctl_cmdđối số được diễn giải và chuyển đến quy trình chính. Các lệnh hợp lệ là: check (kiểm tra xem quy trình chính đang chạy), forward(yêu cầu chuyển tiếp mà không thực hiện lệnh), cancel(hủy chuyển tiếp), exit(yêu cầu chủ thoát ra) và stop (yêu cầu chủ ngừng tiếp nhận các yêu cầu ghép kênh tiếp theo).

Các phiên bản cũ hơn chỉ có checkexit, nhưng điều đó là đủ cho mục đích của bạn.

ssh -O check host.example.com

Nếu bạn muốn xóa tất cả các kết nối (không chỉ kết nối đến một máy chủ cụ thể) trong một cú trượt, thì fuser /tmp/ssh_mux_*hoặc lsof /tmp/ssh_mux_*sẽ liệt kê các máy khách ssh đang điều khiển từng ổ cắm. Sử dụng fuser -HUP -k tmp/ssh_mux_*để tiêu diệt tất cả chúng một cách sạch sẽ (sử dụng SIGHUP làm tín hiệu là tốt nhất vì nó cho phép khách hàng tháo ổ cắm đúng cách).


Đây là một câu trả lời tuyệt vời. Điều này là hoàn hảo cho những gì tôi đã cố gắng để đạt được. checkthậm chí còn hữu ích hơn những gì tôi đang tìm kiếm, exitdù sao đi nữa! : D
ELLIOTTCABLE

5
Trong OS X fuserkhông thể gửi tín hiệu, nhưng điều này cũng hoạt động tốt:lsof -Fp /tmp/ssh_mux_* | cut -c 2- | xargs kill -HUP
Ori

11

Tôi đã viết một tiện ích nguồn mở cmc, để quản lý các phiên ControlMaster: ClockworkNet / cmc :

Usage:  cmc [ -c HOST | -o HOST | -x HOST ]
        cmc [ -L | -l | -O | -X ]
        cmc -h

ControlMaster Controller - Eases management of SSH ControlMaster connections

Options:
    -h      show this help message and exit
    -c HOST check HOST ControlMaster connection status (maybe specified more
            than once)
    -L      list ControlMasters defined in SSH_CONFIG
    -l      list ControlMaster connection sockets in ~/.ssh/ and check their
            connection status
    -O      open all ControlMasters defined in SSH_CONFIG
    -o HOST open a ControlMaster session (maybe specified more than once)
    -x HOST close ControlMaster session (maybe specified more than once)
    -X      exit all ControlMaster connections with sockets in ~/.ssh/

Notes:
    * Any unopened sockets in ~/.ssh/ are removed with -l and -X

3

Bạn có thể chạy fuser /tmp/ssh_mux_blablabla(có thể cần sudo) và tiêu diệt PID mà nó trả về. fusercho thấy các quá trình đang sử dụng một tập tin. (Và hơn thế nữa, hãy kiểm tra man fuser.)

Cập nhật: kiểm tra câu trả lời của Gilles; nó chi tiết hơn nhiều


3

Cái này hoạt động với tôi chỉ bằng cách sử dụng tệp socket cho master master:

$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>

Thí dụ

Đây là một ví dụ nơi tôi đã thiết lập kết nối với máy chủ từ xa:

$ ssh -o ControlPath=~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$

Và với nó bị ngắt kết nối:

$ ssh -o ControlPath=~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$

Nếu nó vẫn được kết nối, điều này sẽ buộc nó phải thoát ngay lập tức:

$ ssh -o ControlPath=~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$

Nó không rõ ràng đối với tôi, nhưng có vẻ như nó có khả năng là một lỗi ở ssh chỗ nó yêu cầu một đối số bổ sung ở cuối, mặc dù blahnó là vô nghĩa trong bối cảnh các công tắc tôi đang sử dụng.

Không có nó cho tôi cái này:

$ ssh -o ControlPath=~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

Thông tin phiên bản

OSX
$ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
CentOS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

Tôi xác nhận rằng trên cả hai phiên bản này, cần phải có thêm đối số không có thật.

Người giới thiệu

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.