tự động bắt đầu màn hình khi đăng nhập ssh


18

Tôi đã đọc về cách tự động khởi động màn hình khi tôi sshđến một máy chủ từ xa. Tôi muốn một lớp lót đơn giản để thêm vào .bash_profileđể bắt đầu screenkhi tôi sshvào và KHÔNG thoát khỏi kết nối từ xa khi tôi tháo màn hình.

Tôi đã được nhìn vào exec screenvà khá nhiều mỗi sự kết hợp của -d, -r, -D-Rvà không thể tìm ra những gì cờ tôi cần.

Lý tưởng nhất là tôi sẽ gõ ssh whatevervà đăng nhập vào máy chủ mới screenhoặc nó có thể gắn lại màn hình cũ, tôi muốn biết cách làm cả hai để xem cái nào tôi thích hơn. Sau đó, tôi có thể nhập Ctrl adhoặc Ctrl dđưa nó trở lại sshđăng nhập bình thường cho máy chủ đó (nơi bạn sẽ thấy motd). Từ đó tôi có thể screen -rquay lại bất cứ màn hình nào tôi muốn hoặc nhấn Ctrl dlại để đăng xuất.

Câu trả lời:


18

Một đơn giản screen -Rnên làm các thủ thuật.

Để xác minh điều này, tôi đã thêm vào screen -R.bash_profile của mình trên một máy chủ từ xa, đăng nhập, tách ra khỏi màn hình và được đưa trở lại dấu nhắc shell bình thường trên máy chủ từ xa. Xác minh với .bashrc là tốt. Đăng nhập sau đó mang lại kết quả mong đợi (gắn lại vào phiên màn hình).


Cảm ơn! Tôi đã đọc xung quanh và tôi có ấn tượng rằng tôi sẽ cần màn hình exec -R. Vui mừng vì điều này đã làm việc
Ronald Dregan

Có phải là một ý tưởng tồi để đặt logouthoặc exitngay sau khi dòng đó một phiên ssh bị chấm dứt ngay lập tức khi màn hình được đóng bởi ctrl + D?
Griddo

Điều này đã không làm việc cho tôi. Tôi đã bắt đầu vài chục màn hình kể từ khi dòng được thực thi mỗi khi một phiên bắt đầu. Làm thế nào bạn làm điều đó để điều này không xảy ra?
Thomas

10

Tôi gặp vấn đề với 40 phiên màn hình xếp tầng được tạo với một số giải pháp khi bắt đầu một cửa sổ hoặc phiên màn hình mới. Tôi đã có thể loại bỏ màn hình xếp tầng và tạo một phiên mới nếu không tồn tại với điều này:

if [ -z "$STY" ]; then screen -R; fi

Nó kiểm tra xem bạn có trong một phiên màn hình và chạy screen -Rnếu bạn không. Nếu không có bài kiểm tra, bạn sẽ nhận được "Đính kèm từ bên trong màn hình?" cảnh báo từ màn hình mỗi khi bạn tạo một cửa sổ màn hình mới.


+1 - như thế này tốt hơn screen -lsbài kiểm tra mà Tony đã đề cập
cwd

9

screen -RR sẽ gắn lại vào phiên có sẵn đầu tiên hoặc tạo một phiên nếu cần thiết.


Điều đó thực sự hữu ích khi sử dụng màn hình -R đã gây rắc rối cho tôi với nhiều phiên.
David V.

Điều này thật tuyệt vời, cảm ơn! Nó kết nối với phiên "Tách rời" đầu tiên được tìm thấy (nếu có) và bỏ qua các phiên đính kèm. Vì vậy, nó cho phép bạn đăng nhập và mở nhiều cửa sổ, nhưng vẫn đảm bảo rằng mỗi phiên có bảo vệ chạy trong màn hình. Người OPS của chúng tôi cảm ơn bạn!
Ian McGowan

8

Nếu tôi hiểu nhu cầu của bạn, bạn nên thử:

if $(screen -ls | grep -q pts); then screen -x; else screen -R; fi

Nó sẽ chỉ tạo một phiên màn hình, nếu không, nó sẽ kết nối lại với phiên hiện có theo kiểu nhiều cửa sổ (ngay cả khi bạn có nhiều phiên ssh, bạn sẽ kết thúc cùng một phiên màn hình)


Tôi thích ý tưởng này vì nhận ra rằng chúng tôi có các máy khách SSH đa cửa sổ (hoặc đôi khi đi và đăng nhập trực tiếp trên máy). Nó khá linh hoạt nếu bạn sử dụng một cái gì đó như Bitvise và mở nhiều cửa sổ đầu cuối - bạn có thể biến các cửa sổ màn hình riêng lẻ thành các cửa sổ vật lý riêng biệt.
Piku

1
Tất cả điều này có thể được thay thế bằng screen -xR, dường như được phân tích cú pháp là "đính kèm nếu có thứ gì đó để đính kèm, nếu không thì tạo màn hình mới".
Piskvor rời khỏi tòa nhà

0

Ở đây một phần mở rộng,

tập lệnh cho bashrc kiểm tra nếu có nhiều hơn một phiên màn hình tách rời. Nếu có nhiều hơn, thì bạn phải chọn hướng dẫn sử dụng phiên. Khi có một phiên tách ra, bạn quay lại phiên này. Nếu bạn thoát phiên thì phiên ssh cũng sẽ đóng.

 #Start Screen
 if [ -z "$STY" ]; then

 value=$( screen -ls |grep '\<pts.*Detached\>' |wc -l )

 if [ $value -gt 1 ]; then

  screen -ls

 else

  screen -R

  echo 5 Sek. bis die SSH Session beendet wird.

  echo Strg + C - um ohne screen weiter zu arbeiten.

  sleep 6

  exit

 fi

fi

0

Nếu bạn muốn kết nối tự động với phiên màn hình khi bạn kết nối qua SSH, hãy thêm mã bên dưới vào máy của bạn .bash_profilehoặc .bashrctrên máy từ xa, nó sẽ:

  • Bắt đầu một phiên màn hình mới mỗi khi bạn kết nối thông qua SSH.
  • Sử dụng lại phiên màn hình đã tách rời , luôn bắt đầu với phiên mới nhất. Nếu không có phiên tách rời, nó sẽ bắt đầu một phiên mới.
  • Khi bạn mở nhiều kết nối SSH vào máy của mình, bạn sẽ có một phiên màn hình khác vì chúng tôi chỉ sử dụng lại các kết nối tách rời.
  • Tránh các vòng lặp trong trường hợp bạn đang thêm tập lệnh vào .bashrc

Đây là kịch bản:

#!/bin/bash
#
#  Attaches to the first Detached Screen. Otherwise starts a new Screen.

# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
  detached_screens=($(screen -ls | grep pts | grep -v Attached))

  for screen in "${detached_screens[@]}"; do
    if [[ "${screen}" == *".pts"* ]]; then
      IFS='.pts' read -ra split <<< "${screen}"
      for id in "${split[@]}"; do
        first_id="${id}"
        break
      done 
      break
    fi
  done

  screen -R $first_id
fi

PS: Nếu bạn muốn kích hoạt tính năng này cho thiết bị đầu cuối cục bộ, hãy xóa && ! -z "${SSH_CLIENT}trên dòng đầu tiên.

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.