Câu trả lời:
Có, chỉ cần sử dụng /bin/false
như shell và hướng dẫn người dùng bắt đầu quá trình SSH đường hầm mà không thực hiện bất kỳ lệnh từ xa nào (tức là -N
cờ cho OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
shell, bạn sẽ không có quyền truy cập shell, vì mọi phiên đăng nhập sẽ chấm dứt ngay lập tức.
Trong tệp .ssh / ủy quyền của người dùng, hãy đặt một cái gì đó như sau:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Vì vậy, về cơ bản, các điều khiển của bạn sẽ ở phía trước khóa công khai ssh của người dùng được phân tách bằng khoảng trắng. Trong ví dụ này, các kết nối sử dụng khóa chung cụ thể sẽ chỉ được phép thực hiện chuyển tiếp cổng SSH tới máy chủ MySQL của 192.168.1.10 và máy chủ web 10.0.0.16 và sẽ không được gán shell (không có pty). Bạn đang hỏi cụ thể về tùy chọn "không có pty", nhưng những cái khác cũng có thể hữu ích nếu người dùng chỉ có nghĩa vụ đào hầm đến các máy chủ cụ thể.
Nhìn vào trang man cho sshd để biết thêm tùy chọn cho tệp ủy quyền .
Lưu ý rằng trải nghiệm của người dùng có thể trông hơi kỳ lạ: khi họ ssh in, nó sẽ trông giống như phiên đang bị treo (vì họ không nhận được một pty). Vậy là được rồi. Nếu người dùng đã chỉ định chuyển tiếp cổng với, ví dụ: "-L3306: 192.168.1.10: 3306", việc chuyển tiếp cổng sẽ vẫn có hiệu lực.
Trong mọi trường hợp, hãy thử xem.
no-pty
không ngăn chặn truy cập shell, nó chỉ không cho shell một pty. Nó không hiển thị lời nhắc (nghĩa là "dường như bị treo"), nhưng bạn vẫn có thể đưa ra các lệnh tốt. Bạn cần command="..."
tùy chọn trong .ssh/authorized_keys
nếu bạn muốn hạn chế quyền truy cập shell từ đó.
Cung cấp cho người dùng một vỏ chỉ cho phép họ đăng xuất như /bin/press_to_exit.sh
#! / bin / bash đọc -n 1 -p "Nhấn phím bất kỳ để thoát"
Bằng cách này, anh ta có thể đăng nhập miễn là anh ta muốn, với các đường hầm hoạt động, nhưng không chạy bất kỳ lệnh nào. Ctrl-c
đóng kết nối.
Chỉ định một vỏ không cho phép người dùng đăng nhập.
ví dụ
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
sẽ ngăn họ nhận được dấu nhắc shell và cho họ thời gian chờ là 60 giây - nếu không có kết nối nào hoạt động trong 60 giây thì nó sẽ thoát và do đó ngắt kết nối chúng hoàn toàn (tăng số lượng theo yêu cầu).
Họ cũng không thể thực thi một lệnh từ xa, bởi vì lớp vỏ đó sẽ không cho phép họ.
logout
" trên tập lệnh thông thường.
/sbin/nologin
, bạn có thể tùy chỉnh với một tin nhắn thân thiện với người dùng /etc/nologin.txt
.
Giải pháp của tôi là cung cấp cho người dùng chỉ có thể tạo đường hầm, không có vỏ tương tác , để đặt lớp vỏ đó trong / etc / passwd thành / usr / bin / tun_shell .
Chỉ cần tạo tệp thực thi / usr / bin / tun_shell với một vòng lặp vô hạn .
Ngoài ra, sử dụng các tùy chọn AllowGroups
và Match Group
.
Giải thích đầy đủ tại đây: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
, họ có quyền truy cập shell. Điều này thực sự không giải quyết được vấn đề và nguy hiểm.