Làm thế nào để sử dụng hiệu quả màn hình và SSH?


12

Tôi muốn định cấu hình SSH và sàng lọc sao cho thông tin đăng nhập sẽ luôn được gắn lại vào phiên màn hình. Lý tưởng nhất là phiên đó sẽ không thoát mà tách ra khi tôi nhấn Cd. Làm thế nào điều này có thể đạt được? Và còn những cài đặt hữu ích nào khác để giúp cuộc sống SSH của tôi dễ dàng hơn?

Câu trả lời:


9

Tôi vừa thực hiện các thao tác sau cho tất cả các máy chủ của mình để khi tôi kết nối qua SSH, tôi sẽ tự động được đưa vào phiên Màn hình.

Thêm phần sau vào ~ / .bashrc cho tài khoản người dùng của bạn:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

Điều này sẽ bắt đầu một phiên màn hình có tên chính nếu nó không tồn tại hoặc kết nối lại với nó nếu có. Điều này đã được thực hiện bởi vì tôi có một số phiên màn hình khác đang chạy tách rời cho các dịch vụ khác nhau và không muốn kết nối với chúng.


Tôi chỉ muốn thêm rằng tổ hợp phím CTRL-d là tiêu chuẩn trong màn hình để tách khỏi phiên màn hình đang chạy.
Daemon of Chaos

8

Tôi có phần sau trong .bash_profile trên các máy chủ từ xa của mình:

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

Điều này thực hiện hai điều: thứ nhất, thiết lập chức năng shell để thay thế shell và chuyển tiếp kết nối ssh-agent, thứ hai nó gọi chức năng này sau khi tạm dừng vài giây (trong trường hợp bạn không muốn màn hình bắt đầu).

ifMệnh đề đầu tiên sẽ đúng nếu chưa chạy màn hình ( -z "${STY}") được gắn vào terminal ( -t 0) và tôi không chạy sudo (đôi khi không thay đổi $USER).

Trước reattachtiên, hàm sẽ kiểm tra xem ssh có được gọi với cổng ssh-agent active ( -n "${SSH_AUTH_SOCK}") không. Sau đó, nó sẽ thay thế bất cứ thứ gì ~/.ssh/agent-scriptcó trong tệp socket hiện đang hoạt động và thay thế biến môi trường ( $SSH_AUTH_SOCK) bằng giá trị mới. Sau đó, tập lệnh sẽ thay thế trình bao hiện tại bằng một screenphiên duy nhất (đảm bảo rằng chỉ có một phiên bản tồn tại). Bất kỳ đối số cho reattachhàm được truyền cho lệnh (${1:+"$@"} ).

Phần cuối cùng trước tiên sẽ loại bỏ mọi phiên chết ( screen -wipe), cho phép người dùng (tôi) biết rằng màn hình sẽ bắt đầu trong thời gian ngắn và thay vào đó có thể quay lại trình bao bằng cách nhấn Ctrl- C. Sau đó, nó chờ trong 5 giây và gọi reattachhàm.


4

Đầu tiên, nếu bạn sử dụng byobu, bạn có thể định cấu hình phiên shell mới để luôn tự động khởi động byobu (về cơ bản là cấu hình màn hình đẹp, mặc dù các phiên bản mới hơn có thể sử dụng tmux làm phụ trợ). Nếu bạn thực sự không muốn byobu thì có lẽ bạn có thể đặt màn hình để kết nối thủ công bằng cách chỉnh sửa tập .profilelệnh cấu hình shell của bạn thành exec screenif TERM != "screen".

Nếu bạn không thích điều đó, bạn có thể sử dụng authorized_keystệp để chạy một lệnh cụ thể cho các kết nối với một khóa cụ thể (và bạn có thể có bao nhiêu khóa tùy thích). Xem man sshdđể biết chi tiết. Tôi khuyên bạn nên tạo lệnh chạy một kịch bản để kiểm tra xem màn hình có đang chạy và kết nối hay không, nếu không thì bắt đầu một phiên mới.

Đối với ngắt kết nối trên Ctrl-D, màn hình cho phép bạn thiết lập ánh xạ chính trong .screenrc. Xem man screenđể biết chi tiết. Bạn đang tìm kiếm "bindkey".


2

Có thể hoàn toàn không liên quan đến câu hỏi của bạn, nhưng bạn đã bao giờ cân nhắc sử dụng TMUX thay thế. Nó thực hiện rất nhiều chức năng mà bạn đang tìm kiếm ngoài hộp.

Ví dụ. nếu bạn ngắt kết nối với phiên SSH khi bạn ở dưới TMUX, tất cả những gì bạn cần làm là quay lại và chạy "tmux a" để đính kèm vào phiên của bạn. Kể từ khi tôi bắt đầu sử dụng TMUX, tôi đã quên các lệnh nohup / disown là gì ... nếu bạn cần chạy một cái gì đó và đăng xuất - chạy nó bên trong tmux và tách ra. Đầu ra lệnh sẽ được đệm, vì vậy bạn có thể xem lại sau.

để đính kèm tự động, bạn có thể thêm một cái gì đó như bên dưới vào .bashrc:

[ -z $TMUX ] && tmux list-sessions 2>/dev/null && tmux a

hoặc thậm chí dễ dàng hơn

tmux a 2>/dev/null

Nó có dung lượng bộ nhớ thấp hơn và tùy chọn IMHO tổng thể tốt hơn / dễ sử dụng hơn nhiều.

Phím tắt meta-d là ánh xạ mặc định để tách ra trong TMUX.


0

screen -dAr default || screen -AS defaultlàm việc cho tôi Tôi thêm nó vào ~ / .bashrc của tôi .

Giải thích ngắn gọn về các công tắc:

  • d - Tháo màn hình nếu nó vẫn được gắn vào, từ một phiên khác.
  • A - Điều chỉnh các cửa sổ trong màn hình theo kích thước thiết bị đầu cuối mới.
  • r default - Đính kèm vào một màn hình gọi là mặc định.

Nếu lệnh màn hình đầu tiên (lệnh trước ||) không thành công, lệnh thứ hai được chạy:

  • A - Như đã giải thích ở trên...
  • S default- Tạo phiên màn hình mới với tên mặc định .

0

Tôi đề nghị sử dụng byobu . Công cụ này sử dụng tmux và cung cấp một thanh công cụ đẹp & các phương tiện chuyển đổi cửa sổ tiện lợi khác, các phím nóng, v.v.

echo "new-session" >> ~/.byobu/.tmux.conf
echo "if [ -n '\$TMUX' ]; then :; else byobu attach; fi" >> ~/.bashrc

Với các lệnh trên sau khi đăng nhập SSH thành công, hệ thống sẽ thử và đính kèm vào phiên byobu-tmux hiện có, nếu không, nó sẽ tạo một phiên mới.

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.