SSH và terminal
Cấp cho tài khoản hosting dòng lệnh sandbox qua SSH và trên trình duyệt, đăng nhập bằng SSH key, chạy git, rsync, Composer hay WP-CLI trong thư mục home.
Tài khoản hosting có thể được cấp dòng lệnh để dùng git, rsync, Composer, WP-CLI và các công cụ tương tự, qua SSH từ máy của bạn hoặc trong mục Terminal của panel. Cả hai mở cùng một sandbox: tài khoản chỉ thấy thư mục home của mình, phần còn lại của hệ thống chỉ đọc, và giới hạn CPU, RAM, số tiến trình của gói vẫn áp dụng. Tài khoản không có quyền dùng shell vẫn truyền file được bằng SFTP (chroot).
Bật quyền dùng shell
Quyền dùng shell là một tuỳ chọn của gói hosting.
- Mở Gói hosting và sửa gói của tài khoản (quản trị viên, hoặc reseller với gói của mình).
- Bật Terminal ("Dòng lệnh trong sandbox trên trình duyệt và qua SSH (git, rsync, composer); chỉ thư mục home").
- Lưu. Mọi tài khoản dùng gói này có shell qua SSH và mục Terminal trên menu.
| Tuỳ chọn của gói | Đăng nhập SSH được |
|---|---|
| Bật SFTP, tắt Terminal | Chỉ SFTP, giới hạn (chroot) trong thư mục home. Lệnh shell bị từ chối. |
| Bật Terminal | Shell sandbox, cùng SFTP, scp, rsync và git qua SSH trong chính sandbox đó. |
| Tắt cả hai | Không truy cập SSH. |
Reseller chỉ bật được Terminal cho gói khi gói của chính reseller có tuỳ chọn này. Xem Gói hosting và giới hạn.
Thông tin kết nối
| Thiết lập | Giá trị |
|---|---|
| Host | Tên miền của panel, hoặc IP của server |
| Cổng | Cổng SSH của server (thường là 22) |
| Tên đăng nhập | Tên tài khoản hosting |
| Mật khẩu | Mật khẩu SFTP của tài khoản, hoặc SSH key (bên dưới) |
ssh alice@server.example.com
Đổi mật khẩu đăng nhập panel không đổi mật khẩu SSH: Tài khoản của tôi → Đổi mật khẩu chỉ đổi mật khẩu panel.
Thêm SSH key
Key an toàn hơn mật khẩu. Hãy thêm key khi đăng nhập panel bằng chính tài khoản hosting:
-
Trên máy của bạn, tạo key nếu chưa có:
ssh-keygen -t ed25519 -C "ban@laptop" cat ~/.ssh/id_ed25519.pub -
Trong panel, mở Tài khoản của tôi và tìm SFTP & SSH key.
-
Dán public key (mỗi key một dòng) và bấm Thêm key.
-
Kết nối thử bằng key. So vân tay mà phần mềm hiển thị với Vân tay máy chủ (kiểm tra ở lần kết nối đầu) trên thẻ.
-
Khi key đã dùng được, bật Chỉ dùng key để tắt đăng nhập bằng mật khẩu cho tài khoản.
Quản trị viên cũng có thể thêm, xoá key của một tài khoản và bật tắt Chỉ dùng key cho nó: mở Tài khoản, sửa tài khoản đó và dùng thẻ SFTP & SSH key trong hộp thoại.
Key được chấp nhận: Ed25519, ECDSA (P-256, P-384, P-521), RSA từ 2048 bit và khoá bảo mật phần cứng (sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com). Mỗi tài khoản có tối đa 50 key.
ZoPanel lưu key bên ngoài thư mục home, nên file ~/.ssh/authorized_keys trong tài khoản không có tác dụng. Nhờ vậy, website bị hack không thể tự thêm key. Key thêm qua panel bị giới hạn: tắt chuyển tiếp cổng, agent và X11. Với tài khoản bật Terminal, đăng nhập bằng key mở shell tương tác giống như khi dùng mật khẩu; key cũng dùng được cho lệnh, SFTP, scp, rsync và git.
Shell làm được gì
Shell khởi động bằng bash trong /home/<tài-khoản>:
| Mục | Giá trị |
|---|---|
| Thư mục làm việc | /home/<tài-khoản> (chứa domains/, backups/, logs/, tmp/) |
$HOME |
/home/<tài-khoản>/.home, thư mục riêng cho .ssh, .gitconfig và cache của công cụ. ~ trỏ tới thư mục này, nên hãy dùng đường dẫn đầy đủ như /home/alice/domains/…. |
PATH |
Node.js mới nhất đã cài, rồi /usr/local/bin, /usr/bin, /bin |
Các công cụ có sẵn:
git,rsync,curl,zip,unzipvàtar;phpvà các bản theo phiên bản nhưphp8.3;wp(WP-CLI) vàcomposer(khi Composer đã được cài ở Runtime);node,npm,pnpmvàyarn(khi Node.js đã được cài ở Runtime);- trình khách
mysqlcho các database MariaDB của tài khoản.
Ví dụ:
# WordPress: liệt kê plugin bằng đúng phiên bản PHP của website
cd /home/alice/domains/example.com/public_html
php8.3 /usr/local/bin/wp plugin list
# Laravel: cài thư viện và chạy migration
cd /home/alice/domains/example.com/public_html
composer install --no-dev --optimize-autoloader
php8.3 artisan migrate --force
# Import bản dump database
mysql -u alice_shop -p alice_shop < /home/alice/backups/db/shop.sql
Để clone repository riêng tư, tạo key ngay trong shell bằng ssh-keygen -t ed25519 (key nằm trong ~/.ssh, tức trong .home) rồi thêm public key làm deploy key trên GitHub hoặc GitLab.
Giới hạn của sandbox
- Dưới
/homechỉ thấy thư mục home của chính tài khoản. Các tài khoản khác không tồn tại với shell. - Mọi thứ ngoài thư mục home đều chỉ đọc.
/tmplà riêng của phiên làm việc. - Không có
sudo, chương trình setuid hay đổi sang user khác. Không cài gói bằngaptđược. - Không chuyển tiếp cổng hay agent: tunnel tới database hoặc dịch vụ nội bộ bị từ chối. Với database, dùng truy cập từ xa.
- Giới hạn CPU, RAM và số tiến trình của gói được áp dụng. Lệnh vượt giới hạn RAM bị dừng ngay trong tài khoản.
- Tiến trình kết thúc khi phiên đóng. Việc định kỳ hãy dùng Cron job; dịch vụ chạy liên tục hãy dùng website ứng dụng (xem Ứng dụng Node.js và Python).
- Tối đa 8 phiên SSH cùng lúc cho mỗi tài khoản.
Truyền file qua SSH
Khi bật Terminal, SFTP, scp và rsync chạy trong cùng sandbox. Đường dẫn là đường dẫn thật (/home/alice/domains/…), không phải đường dẫn chroot (/domains/…) như tài khoản chỉ có SFTP.
# Tải cả thư mục lên, xoá file không còn ở máy bạn
rsync -avz --delete ./site/ alice@server.example.com:/home/alice/domains/example.com/public_html/
# Chép một file
scp backup.sql.gz alice@server.example.com:/home/alice/backups/
Với phần mềm SFTP như FileZilla hay WinSCP, xem FTP và SFTP.
Terminal trên trình duyệt
- Bấm Terminal trên menu. Mục này hiện với khách hàng có gói bật Terminal, với reseller có gói của mình bật tuỳ chọn này, và với quản trị viên toàn quyền.
- Quản trị viên và reseller có nhiều tài khoản: chọn tài khoản trong danh sách.
- Bấm Kết nối. Nhãn Đã kết nối xuất hiện.
- Bấm Ngắt kết nối khi xong.
Trước khi chạy lệnh có vẻ gây hại (ví dụ xoá đệ quy thư mục home, xoá cả database hay kết thúc mọi tiến trình), terminal hỏi xác nhận trong hộp Lệnh có thể gây hại. Chỉ bấm Vẫn chạy khi bạn chắc chắn. Văn bản dán vào có nhiều dòng cũng được kiểm tra như vậy.
Phiên đóng sau 30 phút không thao tác, sau tổng cộng 8 giờ, khi bạn đăng xuất hoặc đổi mật khẩu, và khi tài khoản bị khoá. Việc mở và đóng terminal được ghi vào nhật ký hoạt động kèm thời lượng phiên.
Quản trị viên mở được shell của mọi tài khoản hosting, kể cả khi gói không bật Terminal.
Shell root của server
Panel không bao giờ mở shell root, kể cả với quản trị viên toàn quyền. Shell root mở từ tiến trình web sẽ biến bất kỳ lỗi nào của panel thành quyền kiểm soát toàn bộ server. Quản trị viên đăng nhập bằng SSH:
ssh root@server-cua-ban
Các thao tác với panel từ shell này (đặt lại mật khẩu, tắt 2FA, cho phép IP) xem tại Công cụ dòng lệnh.
Xử lý sự cố
| Thông báo hoặc hiện tượng | Cách xử lý |
|---|---|
| "shell access is not included in this account's package" | Gói không bật Terminal. Bật lên, hoặc dùng SFTP. |
| "terminal access is not included in this package" | Tương tự, với terminal trên trình duyệt. |
| "the server's root shell is not available in the panel; sign in with SSH" | Đúng thiết kế: dùng ssh root@server-cua-ban. |
| "account suspended" | Tài khoản đang bị khoá. Mở lại tài khoản trước. |
| "too many SSH sessions at once" | Tài khoản đã có 8 phiên đang mở. Đóng bớt. |
| "The shell service is not available right now." | Agent của ZoPanel không chạy. Quản trị viên: kiểm tra systemctl status zopanel-agent bằng root. |
| "Permission denied (publickey,password)" | Kiểm tra tên đăng nhập và mật khẩu, hoặc key đã có trong SFTP & SSH key. Khi bật Chỉ dùng key, mật khẩu bị từ chối. Sai 5 lần trong 10 phút, Fail2ban chặn IP 1 giờ. |
| "Read-only file system" | Bạn đang ghi ra ngoài thư mục home. Làm việc trong /home/<tài-khoản>. |
Không thấy ~/domains |
Trong shell, ~ là /home/<tài-khoản>/.home. Dùng /home/<tài-khoản>/domains. |
| "unsupported key type" / "RSA keys must have at least 2048 bits" | Tạo key Ed25519: ssh-keygen -t ed25519. |
| "add a key before turning password login off" | Chỉ dùng key cần ít nhất một key. |
| Không thấy thẻ SFTP & SSH key | Đăng nhập bằng chính tài khoản hosting (quản trị viên: sửa tài khoản đó ở Tài khoản). Thành viên website và tài khoản không có không gian hosting không có key. |
| Tiến trình chạy nền bị dừng sau khi thoát | Phiên đóng sẽ kết thúc các tiến trình của nó. Dùng cron job hoặc website ứng dụng. |