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 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?
Câu trả lời:
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ì ^R
mũ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ó).
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.
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ộ.
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
.
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!
Ư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).
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,
ssh-agent
hoặc nhập mật khẩuBạ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\'
Đây là những gì bạn muốn. Bạn cần phải cài đặt cả máy khách và máy chủ, và thượng nguồn OpenSSH không bao giờ chấp nhận các thay đổi. https://github.com/hyc/OpenSSH-LINEEMODE