Có cách nào để tránh trì hoãn gõ SSH không?


43

Tôi có thể yêu cầu SSH gửi dữ liệu chỉ sau khi nhấn enter hoặc tab chứ không phải sau mỗi lần nhấn phím riêng lẻ không?


Tôi rất quan tâm đến việc bạn có một độ trễ gõ như vậy mà bạn không thể làm việc với nó. Tôi đã sử dụng ssh trong thời đại modem và không bao giờ phải đối mặt với những vấn đề này.
mailq

4
Tôi đang truy cập VPS Slicehost (Hoa Kỳ) từ Bỉ. Sự chậm trễ là đáng chú ý đủ để làm cho tôi bối rối. Tuy nhiên, tôi nhận thấy rằng những người khác dường như ít bận tâm về điều này hơn tôi ..
StackedCrooking


@mailq bạn không sử dụng 3G vào năm 2019? Sshing từ ngôi nhà nông thôn hoặc dưới lòng đất giống như làm điều đó với quay số
POMATu

Câu trả lời:


32

Không, bởi vì SSH không có cách nào để biết liệu những gì bạn đang gõ sẽ yêu cầu nhập hoặc tab để hành động - ví dụ: nếu bạn đang cố gắng đi qua lịch sử lệnh của mình, thì ^Rmũi tên lên hoặc lên sẽ không được gửi bởi chính họ, và điều đó sẽ ... khó chịu.

Mặc dù vậy, bạn không phải đợi giữa mỗi nhân vật để nó xuất hiện trên màn hình; nếu bạn biết bạn phải gõ gì, hãy nhanh chóng sử dụng nó nhanh chóng và thiết bị đầu cuối sẽ bắt kịp trong khoảng một chuyến đi khứ hồi kể từ khi bạn ngừng gõ, điều đó cũng tốt như bạn sẽ thoát khỏi thiết lập bộ đệm dòng dù sao (mất gói là khác nhau, nhưng nó giới thiệu các quirks thú vị của riêng nó).


Tôi sẽ thực sự quan tâm đến việc tìm cách đánh giá tốc độ gõ ssh trên một số máy. Tôi quan sát thấy rằng tốc độ có thể thay đổi RẤT NHIỀU giữa các máy được đặt ở cùng một nơi và không có bất kỳ tải nặng nào trên chúng. Lý thuyết của tôi là điều này xảy ra đặc biệt với các trường hợp nhỏ từ AWS (như vi mô hoặc mini).
sorin

1
Nhìn vào tờ giấy Mosh. Tác giả đã thực hiện một số điểm chuẩn mosh.org/#techinfo
user7610

25

PuTTY cung cấp hai tính năng có thể được sử dụng: "tiếng vang cục bộ" và "chỉnh sửa dòng cục bộ". Chỉnh sửa dòng cục bộ đệm mọi thứ và chỉ gửi nó đến máy chủ sau khi trả về dòng. Điều đó có thể làm cho dòng lệnh dễ xử lý hơn nhiều, nhưng nó cũng có thể khiến việc sử dụng một trình soạn thảo văn bản trở thành địa ngục.

PuTTY cũng có một số tùy chọn khác để bật / tắt một số thứ (thuật toán của Nagle) có thể ảnh hưởng đến độ trễ kết nối nhận thức. Như tôi thấy, ứng dụng khách OpenSSH không cung cấp tất cả các tính năng mà PuTTY làm trong vấn đề này và tôi không biết về một sự thay thế Linux so sánh.

Nếu không, womble có nó đúng.


Đây phải là câu trả lời được chấp nhận
Freddie Fabregas

Tôi không thể cài đặt PuTTY trên macOS, có thay thế không?
Aero Windwalker

Putty trên linux là một chút đau. Nó không thể kết nối lại tự động, hiển thị một số hộp thông báo khi ngắt kết nối và tôi cần mở lại cửa sổ. Tôi ước tôi có thể sử dụng một cái gì đó như kitty hoặc plink.exe trên linux hoặc tốt hơn là chỉ chỉnh sửa autossh bằng cách nào đó. Một số thiết bị không hỗ trợ mosh tho (nếu tôi cố truy cập bộ định tuyến openwrt tại nhà của mình)
POMATu

22

Mosh được thiết kế để giải quyết vấn đề chính xác này. Nó được thiết kế để sử dụng trên các kết nối có độ trễ cao và không đáng tin cậy, đồng thời cung cấp chỉnh sửa dòng và tiếng vang cục bộ.


Bạn có thể cài đặt nó trên một thư mục cục bộ từ nguồn mà không cần sudo. Ngoài ra, hãy nhìn vào mosh.org. Nó nói, "Không có mã đặc quyền. Không có daemon. Bạn không cần phải là siêu người dùng để cài đặt hoặc chạy Mosh. Máy khách và máy chủ là các tệp thực thi được chạy bởi một người dùng thông thường và chỉ tồn tại trong vòng đời của kết nối."
Steven C. Howell

1
Chỉ cần lưu ý. Mosh không phải là SSH. Nó sử dụng giao thức độc quyền của riêng nó. (Tuy nhiên, tôi không có vấn đề gì với điều đó.)
user7610

Điều này làm việc từ đầu cho tôi trên Android và mạng wifi nhà xấu. Nó biết về đường dẫn
tinmarino

9

Mở phiên ssh bằng ssh host.example.org bash(hoặc bất kỳ shell nào bạn muốn sử dụng).

Bạn sẽ nhận được chế độ đệm dòng cho trình điều khiển từ xa, điều đó có nghĩa là bạn sẽ không nhận được lời nhắc và chỉnh sửa dòng nhưng bạn sẽ nhận được tiếng vang cục bộ và chế độ "một dòng tại một thời điểm". Nó đôi khi hữu ích khi làm việc với một kết nối rất xấu. Không phải tất cả các chương trình sẽ chạy đúng bởi vì bạn sẽ không có giả nhưng hầu hết các tiện ích UNIX đều hoạt động tốt.

Cập nhật:

Khi sử dụng các thủ thuật trên, bạn có thể nhận được soạn thảo dòng bình thường ( readline ) tại địa phương cuối bằng cách sử dụng một chương trình wrapper thuận tiện gọi rlfe . Chỉ cần chạy rlfe ssh host.example.org bash.


1
Tôi đã thử và không thấy nó rất khả thi. Nhưng thật tuyệt khi biết, cảm ơn.
StackedCrooking

điều này làm việc tuyệt vời cho tôi
lakeare

6

Sau khi đã có cùng một vấn đề ( độ trễ cao và mất gói do chất lượng dữ liệu di động khủng khiếp tại một số địa điểm), và Mosh không cắt nó cho tôi (nó cần chương trình đặc biệt trên tất cả các máy chủ từ xa, sửa chữa UTF8 tại địa phương và từ xa trên tất cả các máy chủ mà không vi phạm chúng , sửa đổi tất cả các tường lửa - và dù sao nó cũng không thực sự cung cấp chỉnh sửa dòng cục bộ) Tôi đã quyết định viết một trình bao bọc nhỏ để cung cấp chế độ chỉnh sửa dòng cục bộ cho ssh .

Theo mặc định, nó chỉ chuyển mọi thứ sang ssh ở chế độ char-by-char mặc định, nhưng bạn có thể nhấn phím nóng để vào chế độ chỉnh sửa dòng cục bộ được hỗ trợ đọc bất cứ lúc nào. Vì vậy, bạn có thể nhập (với chỉnh sửa, gọi lại lệnh, v.v.) toàn bộ dòng cục bộ, và sau đó khi bạn nhấn enter, nó sẽ được gửi dưới dạng một gói TCP đến phía xa.

Ưu điểm là chỉnh sửa dòng lệnh không bị lag (như "chế độ đệm theo dòng" đã được nấu chín / chính tắc của telnet, nhưng với các lệnh chỉnh sửa ưu việt được cung cấp bởi GNU readline ). Ngoài ra, không có gì cần phải thay đổi trên máy chủ hoặc tường lửa. Và các trình soạn thảo và các chương trình dựa trên lời nguyền khác tiếp tục hoạt động bình thường (mặc dù có độ trễ) trong chế độ char-by-char mặc định như trong kết nối ssh bình thường.

Nhược điểm là bạn cần nhấn phím nóng để vào chế độ chỉnh sửa dòng cục bộ mỗi lần bạn muốn hoặc bạn cần sửa đổi lời nhắc trên máy chủ từ xa để cho phép tự động phát hiện. Ngoài ra, hiện tại hoàn thành tên tệp tab từ xa chỉ hoạt động bằng cách đưa bạn trở lại chế độ char-by-char (hoặc sử dụng hệ thống tệp cục bộ thay vì từ xa, tùy thuộc vào sở thích của bạn). Tuy nhiên, công việc đang được tiến hành, vì vậy, yêu cầu kéo hoặc ý tưởng khả thi để cải thiện đều được chào đón!


Về mặt độc đáo, bạn có thể sử dụng SSHFS để gắn kết hệ thống tệp từ xa cục bộ.

Ưu điểm không chỉ là trình bao của bạn (và chỉnh sửa dòng của nó) cục bộ và không bị lag, mà còn có thể điều hướng hệ thống tệp từ xa và sử dụng hoàn thành tên tệp vỏ ( phím tab ) cho các tệp từ xa. Ngoài ra, (tính năng tốt nhất IMHO) bạn có thể sử dụng trình chỉnh sửa cục bộ của mình để chỉnh sửa các tệp từ xa không bị lag.

Nhược điểm là (đặc biệt là nếu liên kết của bạn cũng có băng thông thấp và không chỉ có độ trễ cao) mà mỗi tệp cần chỉnh sửa, nó cần phải được chuyển hoàn toàn sang localhost, và sau đó chỉnh sửa, chuyển hoàn toàn sang điều khiển từ xa. SSHFS cung cấp một số tùy chọn bộ đệm (xem sshfs (1) cache , cache_timeout , cache_x_timeout ) để giảm bớt phần nào vấn đề đó. Ngoài ra, nếu bạn muốn thực thi một cái gì đó trên remote, bạn cần sử dụng một màn hình khác hoặc tiền tố tất cả các lệnh với " ssh remotehost " (ví dụ ssh remotehost sudo service apache restart). Xem tùy chọn ControlMaster trong ssh_config (5) để thực hiện nhanh hơn (và không cần nhắc mật khẩu).


3

Bạn có thể mô phỏng hành vi đó nếu bạn chỉ chạy các lệnh bằng cách thực hiện,

ssh user @ targetmachine 'các lệnh của tôi trong một chuỗi'

nhưng,

  1. điều này thêm một độ trễ bổ sung trong việc tạo kết nối (có thể được giảm thiểu bằng cách sử dụng kết nối ssh chính / chia sẻ )
  2. nếu bạn không có khóa riêng không có mật khẩu, bạn sẽ phải sử dụng ssh-agenthoặc nhập mật khẩu
  3. rõ ràng nó không hoạt động nếu bạn tương tác với menu hoặc chỉnh sửa tập tin, v.v.

1

Bạn có thể sử dụng tmux để đạt được tiếng vang lưu loát khi gõ. Chạy tmux cục bộ. Nếu bạn có vỏ ssh trong một khung và vỏ cục bộ trong một khung bên dưới nó, thì từ khung cục bộ, bạn có thể gửi các khóa đến khung từ xa.

tmux send-keys -t top 'ls' C-m

Các lệnh tương tác và các lệnh nhỏ tôi gõ trực tiếp vào shell ssh lag. Ngay khi độ trễ bắt đầu cản trở việc gõ của tôi, tôi chuyển sang khung cục bộ và sử dụng các phím gửi. Điều này hoạt động ngay cả khi đang gõ một lệnh.

Để tắt nó, tôi đã thêm nó vào .bashrc của tôi

function ts {
    args=$@
    tmux send-keys -t right "$args" C-m
}

Cảm ơn Christian Pelczarski vì đã giải thích các khóa gửi: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html

Bạn sẽ phải thoát khi sử dụng dấu ngoặc kép, ví dụ

ts git config --global alias.lola \'log --graph --decorate --pretty=oneline --abbrev-commit --all\'

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.