Có thể thay đổi giá trị của $ TERM khi gọi ssh không?


21

Trên thiết bị đầu cuối cục bộ của tôi, tôi có TERM = konsole-256color, nhưng không phải tất cả các máy từ xa tôi kết nối để có định nghĩa này.

Có thể thực hiện ssh thay đổi TERM trên máy từ xa không? Không thay đổi tập lệnh .bash * trên máy từ xa, chỉ bằng cách thay đổi cấu hình trên máy tính để bàn cục bộ của tôi?

Câu trả lời:


9

Tôi đã thêm bí danh sau vào tệp .bashrc của mình. Nó sử dụng câu trả lời của OG nhưng kết thúc nó trong một bí danh. Hoạt động như một bùa mê;)

# Force xterm-color on ssh sessions
alias ssh='TERM=xterm-color ssh'

Điều này hoạt động nếu tôi sử dụng ssh từ một thiết bị đầu cuối. Nhưng tôi cũng có một số tập lệnh chạy ssh và bí danh không được mở rộng cho chúng. Có cách nào tôi có thể tránh tạo bí danh riêng cho từng người không?
Thayne

Nếu tập lệnh của bạn cần một giá trị HẠN cụ thể, tôi nghĩ tốt nhất là chỉ nên đặt biến đó trong chính tập lệnh. Hay đó không phải là một lựa chọn?
Johan

Đó không thực sự là một lựa chọn. Ngoài ra, các tập lệnh này chọn một máy chủ dựa trên một số tham số và mở phiên ssh cho máy chủ đó (hoặc có thể là máy chủ trong phiên tmux), bản thân các tập lệnh không phụ thuộc vào giá trị TERM.
Thayne

Trong trường hợp đó, bạn có thể bao gồm hồ sơ bash của mình hoặc tập lệnh bí danh riêng biệt vào tập lệnh với: shopt -s extend_aliases; nguồn ~ / .bash_aliases
Johan

7
TERM=vt100 ssh some.host.name

Trên điều khiển từ xa, thực hiện echo $ HẠN .


Tôi nghĩ về nó, nhưng tôi muốn nó chỉ được đặt cho một tập hợp con các máy chủ mà tôi ssh tới, do đó, việc phát hành TERM = ... ssh mọi lúc sẽ không hoạt động. và ghi nhớ máy chủ nào có thông tin thuật ngữ cũ, và sau đó thay đổi lệnh khi đang di chuyển cũng không hay.

Cấu hình trên mỗi máy chủ chỉ được hỗ trợ trong / etc / ssh / ssh_config, tuy nhiên tôi biết không có giá trị cấu hình để hỗ trợ ánh xạ lược đồ đầu cuối cho mỗi máy chủ.
OG

Nó cũng có thể được thực hiện trong ~ / .ssh / config mà tôi biết, nhưng tôi cũng không thể tìm thấy bất kỳ tùy chọn nào để sửa đổi môi trường được gửi đến máy chủ từ xa. Hy vọng rằng tôi đã bỏ lỡ một cái gì đó.

7

người đàn ông ssh:

     ssh reads ~/.ssh/environment, and adds lines of the format
     “VARNAME=value” to the environment if the file exists and users are
     allowed to change their environment.  For more information, see the
     PermitUserEnvironment option in sshd_config(5).

Chỉnh sửa:

Chuột, tôi hy vọng nó có thể ở phía địa phương, tuy nhiên, nếu có ý chí, sẽ có cách. người đàn ông ssh_conf:

SendEnv
             Specifies what variables from the local environ(7) should be sent
             to the server.  Note that environment passing is only supported
             for protocol 2.  The server must also support it, and the server
             must be configured to accept these environment variables.  Refer
             to AcceptEnv in sshd_config(5) for how to configure the server.
             Variables are specified by name, which may contain wildcard char-
             acters.  Multiple environment variables may be separated by
             whitespace or spread across multiple SendEnv directives.  The
             default is not to send any environment variables.

Tùy thuộc vào cấu hình của sshd ở đầu nhận, điều này có thể hoặc không thể đáp ứng yêu cầu "không sửa đổi tệp từ xa".


1
Có, nhưng đây là cấu hình ở phía xa và tôi cần / muốn một cái gì đó chỉ thay đổi ở đầu cục bộ.

4
SendEnv không liên quan. Nó có thể có thể gửi các biến env bổ sung, nhưng: 1. nó không thể sửa đổi chúng và 2. TATE vẫn được gửi, ngay cả khi nó không được liệt kê trong SendEnv.

5

Đây là giải pháp nhanh chóng và bẩn thỉu của tôi, tôi vừa ném vào nhau. Tôi muốn một cái gì đó tốt hơn. Tôi đoán tôi có thể sử dụng một kịch bản shell thay thế. Điều chỉnh TERMcác giá trị được để lại như một bài tập cho người đọc.

# To move into a separate plugin...
function ssh {
   if [[ "${TERM}" = screen* || konsole* ]]; then
     env TERM=screen ssh "$@"
   else
     ssh "$@"
   fi
}

Lý tưởng nhất, nó sẽ làm một cái gì đó như kiểm tra các HẠN ở phía bên kia, sử dụng ControlPersistcông cụ để ngăn chặn sự chậm trễ lâu cho nhiều kết nối.


Cảm ơn! Tôi đã làm một cái gì đó như thế này, nhưng thay vì kiểm tra các giá trị cụ thể $TERMbằng if/ elsexây dựng, tôi đang sử dụng $(echo -n "$TERM" | sed -e s/tmux/screen/)để thay thế vô điều kiện "tmux" có vấn đề trong thuật ngữ địa phương của tôi bằng loại "màn hình" được chấp nhận phổ biến hơn ( nguồn ở đây ).
wincent
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.