Làm thế nào tôi có thể xem một cửa sổ thiết bị đầu cuối từ xa?


8

Tôi rời văn phòng trước đó với một cửa sổ thiết bị đầu cuối hoạt động chạy tập lệnh trên máy chủ Centos 7. Bây giờ tôi đã SSH ở nhà và tôi muốn xem nó đã đến đâu. Điều này có thể không? Tôi có thể tham gia lại cùng một cửa sổ thiết bị đầu cuối từ đây không?



Tôi cũng muốn thêm tmate.io vào tất cả các câu trả lời bên dưới
webKnjaZ

Một lựa chọn là: strace -e write -p 12345(thay thế pid của quá trình bạn quan tâm). Một tùy chọn khác là: strace -e read -p 12345(thay thế pid của trình giả lập thiết bị đầu cuối). Về nguyên tắc, có thể viết một chương trình sử dụng lệnh ptracegọi hệ thống để thu thập thông tin theo cách tương tự stracevà viết trực tiếp vào thiết bị đầu cuối của chính nó. Tôi không biết nếu một chương trình như vậy tồn tại, nhưng nó sẽ bao gồm các yêu cầu được chỉ định trong câu hỏi của bạn.
kasperd

một cách có thể, kích hoạt RPC (gọi thủ tục từ xa) trên máy tính đích sau đó bạn có thể (từ xa) kết nối và điều khiển màn hình, bao gồm các cửa sổ riêng lẻ. Lưu ý: điều này mở ra một lỗ hổng để đảm bảo vô hiệu hóa RPC khi hoàn tất.
dùng3629249

Câu trả lời:


14

Như @Sven đã đề cập, tùy chọn tốt nhất là sử dụng screenhoặc tmux. Đây là những công cụ được gọi là "bộ ghép kênh đầu cuối". Chúng cho phép bạn tạo các phiên shell có thể được đính kèm và không liên kết với thông tin đăng nhập thực tế. Các công cụ này không chỉ hữu ích để kiểm tra công việc của bạn từ một thiết bị đầu cuối khác, nhưng có các tính năng khác, bao gồm chia sẻ phiên của bạn với người dùng khác và đảm bảo rằng lệnh của bạn sẽ không dừng nếu bạn mất kết nối internet. Nếu bạn đang tìm kiếm screen, bạn có thể thử tìm kiếm "Màn hình GNU". Cả hai công cụ này đều có sẵn trên hầu hết các hệ thống Linux.

Thông thường, bạn sẽ bắt đầu phiên, và sau đó thực hiện lệnh của bạn bên trong phiên đó. Tuy nhiên, nếu bạn đã bắt đầu lệnh, bạn có thể muốn tìm một bài viết về việc di chuyển một lệnh đang chạy vào một phiên màn hình. Tuy nhiên, tôi không khuyên bạn nên thử điều này lần đầu tiên trên một cái gì đó quan trọng. Câu hỏi này có thể được sử dụng:

Chuyển một quy trình đã chạy sang Màn hình

Nếu bạn chỉ muốn kiểm tra xem liệu quy trình có đang chạy hay không, công cụ yêu thích của tôi sẽ được tiến hành. Công cụ này cho phép bạn xem từng cuộc gọi kernel được thực hiện bởi một quy trình. Có thể cần một số kỹ năng để hiểu đầu ra, nhưng ít nhất nó sẽ cho bạn ý tưởng nếu quá trình đang chạy và nếu bạn xem đủ gần, có thể bắt được tên tập tin đang mở. Để làm điều đó, trước tiên, hãy tìm PID, có thể bằng cách tìm kiếm qua ps aux|grep yourcommand, và sau đó:

strace -fp YOUR_PID

Bạn có thể ^ C để thoát khỏi điều đó. Nó có thể không cho phép bạn đính kèm lại, nhưng nếu bạn chỉ muốn biết những gì nó đang làm, điều đó là đủ.


Tại sao nó không cho phép bạn đính kèm lại?
HSchmale

@HSchmale Tôi không chắc là tôi hiểu câu hỏi của bạn. Nếu bạn đang đề cập đến strace, chương trình đó hoàn toàn không cung cấp cho bạn một thiết bị đầu cuối. Nó chỉ cho bạn thấy các cuộc gọi kernel đang được thực hiện. Nhiều lần, khi tôi nghi ngờ một quy trình bị treo, strace đã cho tôi xem các tệp chính xác mà nó đang hoạt động vào lúc này, vì vậy tôi biết về nơi nó đang ở và nó không bị treo.
Đón

Đó là một sai lầm của tôi Tôi nghĩ rằng bạn sẽ không thể gắn lại bước tiến đến nó, nhưng bạn có nghĩa là gắn lại một thiết bị đầu cuối với nó.
HSchmale

9

Một cách để làm điều đó: TMUX

Như hầu hết các câu trả lời đã chỉ ra - nếu trong phiên SSH hiện có - bạn sử dụng tmux(hoặc screen) với lệnh

tmux

Bây giờ bạn đang ở trong một phiên bash mới, trong đó bạn có thể bắt đầu chương trình / lệnh của mình. Bạn có thể đóng nó bất cứ lúc nào (nhưng không phải với CTRL + D, thay vì đóng cửa sổ) và quay lại sau bằng cách xây dựng kết nối SSH cho cùng một người dùng trong cùng một máy và viết lệnh

tmux attach

Bạn cũng có thể có nhiều tmux phiên bằng cách đặt tên cho chúng bằng

tmux new -s myname

Bạn có thể xem danh sách tất cả các tmuxphiên mở cho người dùng của bạn với

tmux ls

và đính kèm vào một tmuxphiên có tên với

tmux a -t myname

Tìm một cách toàn diện tmux cheat sheet ở đây .

Đối với một chương trình đang chạy

Các câu trả lời cho đến nay dường như không nhận thức được thực tế rằng bạn có thể di chuyển một quy trình đã chạy sang một quy trình khác tmux/ screennhư câu trả lời này chỉ ra. Chương trình thực hiện công việc được gọi reptyrvà trong Ubuntu / Debian, bạn có thể cài đặt nó một cách đơn giản

sudo apt-get install reptyr

Sau đó, tìm ra ID tiến trình của chương trình đang chạy của bạn (ví dụ với tophoặc htop), bắt đầu một tmuxphiên và đơn giản

reptyr PID

sẽ gắn lại quá trình đang chạy vào tmuxphiên bash của bạn .


5

Trong tương lai, bạn có thể sử dụng screenhoặc tmuxsau đó có thể gắn lại một phiên đang chạy.


3

Tôi đã sử dụng byobu và tôi thấy vô cùng mạnh mẽ. Byobu là trình quản lý cửa sổ dựa trên văn bản nguồn mở GPLv3 và bộ ghép kênh đầu cuối.

Vì vậy, bạn có thể mở một phiên byobu bằng cách nhập "byobu". Và sau đó, bạn có thể tạo tab mới bằng Ctrl + F2 và di chuyển giữa các tab bằng Ctrl + F3 để quay lại, Ctrl + F4 để chuyển tiếp. Bạn có thể đóng một tab bằng Ctrl + F6 hoặc tách ra khỏi phiên bằng Shift + F6. Sau đó, bạn đính kèm lại phiên bằng cách nhập lại "byobu".

Byobu hỗ trợ chia dọc và ngang, Toàn màn hình trong số các tính năng ưa thích khác. Nó có sẵn trên Ubuntu / Debian, CentOS / Fedora / RedHat và FreeBSD.


Có vẻ hơi sai lầm khi gọi byobu một bộ ghép kênh đầu cuối. Nó thực sự chỉ là một mặt trước tmuxscreennhiều người tìm thấy cung cấp trải nghiệm người dùng tốt hơn so với những gì họ làm được.
Lớp B

2

Như đã được chỉ ra, tôi khuyên bạn nên sử dụng tmuxhoặc screentrong tương lai, nhưng điều đó chỉ hiệu quả nếu bạn nghĩ về nó trước.

Tôi đã ở trong hoàn cảnh của bạn một vài lần. Nếu thiết bị đầu cuối bạn còn chạy là trong máy tính để bàn văn phòng của bạn, bạn có thể SSH vào PC của mình và khởi động máy chủ VNC. Bằng cách đó, ít nhất bạn có thể kiểm tra thiết bị đầu cuối mở.


0

Như mọi người đã đề cập, tmux có thể được sử dụng. màn hình không hữu ích khi bạn muốn chia sẻ màn hình với nhiều người.

Trên hết, tôi khuyên mọi người nên dùng thử https://tmate.io/ để cấp quyền truy cập tạm thời, ngay cả với localmachine. tmate hỗ trợ tất cả những điều trên :)

https://tmate.io/

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.