SSH 입력 지연을 피할 수있는 방법이 있습니까?


43

Enter 키 또는 Tab 키를 누른 후에 만 ​​개별 키를 누른 후에 만 ​​데이터를 보내도록 SSH에 지시 할 수 있습니까?


나는 당신이 그것을 사용할 수없는 타이핑 지연이있는 곳에 매우 관심이 있습니다. 나는 모뎀 시대에 ssh를 사용했으며 이러한 문제에 결코 직면하지 않았습니다.
mailq

4
벨기에에서 SliceHost VPS (미국)에 액세스하고 있습니다. 지연은 나를 혼란스럽게 만들 정도로 눈에 띄게 나타납니다. 그러나, 나는 다른 사람들이 나보다 이것에 덜 방해받는 것처럼 보였다.
StackedCrooked


@mailq 2019 년에 3G를 사용하지 않습니까? 마을 별장이나 지하에서 s는 것은 전화 접속으로하는 것과 비슷합니다.
POMATu

답변:


32

아니요, SSH는 입력하는 내용에 enter 또는 tab to action이 필요한지 알 수 없기 때문에 명령 기록을 진행하려는 경우 예를 들어 ^R위 또는 아래 화살표는 그들 자신은 ... 불쾌 할 것입니다.

그러나 화면에 나타나기 위해 각 문자 사이를 기다릴 필요는 없습니다. 입력해야하는 내용을 알고 있으면 원하는대로 빨리 입력하고 터미널은 입력을 중단 한 시점부터 약 1 회의 왕복 시간을 잡습니다. 어쨌든 라인 버퍼 설정 (패킷 손실은 다르지만 흥미로운 자체 단점이 있음).


여러 컴퓨터에서 ssh- 타이핑 속도를 벤치마킹하는 방법을 찾는 데 정말로 관심이 있습니다. 나는 같은 장소에있는 기계들 사이에 속도가 많이 변할 수 있고 기계에 큰 부하가없는 것을 관찰했다. 저의 이론은 특히 마이크로 또는 미니 인스턴스와 같은 AWS의 작은 인스턴스에서 발생합니다.
sorin

1
Mosh 종이를보십시오. 저자는 일부 벤치마킹 mosh.org/#techinfo
user7610

25

PuTTY는 "로컬 에코"및 "로컬 라인 편집"이라는 두 가지 기능을 사용할 수 있습니다. 로컬 라인 편집은 모든 것을 버퍼링하고 라인 리턴 후에 만 ​​서버로 보냅니다. 이렇게하면 명령 행을 훨씬 쉽게 처리 할 수 ​​있지만 텍스트 편집기를 사용하지 못할 수도 있습니다.

PuTTY에는 인식 된 연결 대기 시간에 영향을 줄 수있는 특정 항목 (Nagle 알고리즘)을 활성화 / 비활성화하는 다른 옵션도 있습니다. 보시다시피 OpenSSH 클라이언트는 PuTTY가 이와 관련하여 제공하는 모든 기능을 제공하지는 않으며 비교할 Linux 대안을 모릅니다.

그렇지 않으면, womble이 옳습니다.


이것은 정답
Freddie Fabregas

macOS에서 PuTTY를 설치하지 못했습니다. 교체가 있습니까?
Aero Windwalker

리눅스 퍼티는 약간의 고통입니다. 자동으로 다시 연결할 수 없으며 연결 해제시 일부 메시지 상자가 표시되며 창을 다시 열어야합니다. 리눅스에서 kitty 또는 plink.exe와 같은 것을 사용하거나 어떻게 든 autossh를 조정하는 것이 좋습니다. 일부 장치는 mosh tho를 지원하지 않습니다 (홈 openwrt 라우터에 액세스하려고하면)
POMATu

21

Mosh 는이 정확한 문제를 해결하도록 설계되었습니다. 대기 시간이 길고 신뢰할 수없는 연결에서 사용하도록 설계되었으며 로컬 에코 및 라인 편집 기능을 제공합니다.


sudo없이 소스의 로컬 디렉토리에 설치할 수 있습니다. 또한 mosh.org를보십시오. "권한이있는 코드가 없습니다. 데몬이 없습니다. Mosh를 설치하거나 실행하기 위해 수퍼 유저 일 필요는 없습니다. 클라이언트와 서버는 일반 사용자가 실행할 수있는 실행 파일이며 연결 수명 동안 만 지속됩니다."
Steven C. Howell

1
참고로 Mosh는 SSH가 아닙니다. 자체 독점 프로토콜을 사용합니다. (나는 그것에 문제가 없다.)
user7610

이것은 안드로이드와 홈 나쁜 와이파이 네트워크에서 처음부터 작동했습니다. 그것은 readline에 대해 알고
tinmarino

9

ssh host.example.org bash(또는 사용하려는 쉘)으로 ssh 세션을 엽니 다 .

원격 셸에 라인 버퍼링 모드가 표시됩니다. 즉, 프롬프트와 라인 편집은받지 않지만 로컬 에코 및 "한 번에 한 라인"모드가됩니다. 매우 나쁜 연결로 작업 할 때 유용합니다. pseudo-tty는 없지만 대부분의 UNIX 유틸리티는 제대로 작동하기 때문에 모든 프로그램이 제대로 실행되는 것은 아닙니다.

최신 정보:

위의 트릭을 사용하는 경우는 법선 편집 (얻을 수 readline에 상기) 지역 이라는 편리한 래퍼 프로그램을 사용하여 끝을 rlfe을 . 그냥 실행하십시오 rlfe ssh host.example.org bash.


1
나는 그것을 시도해 보았고 그것이 매우 실행 가능한 것을 찾지 못했습니다. 하지만 감사합니다.
StackedCrooked

이것은 나를 위해 훌륭하게 작동합니다.
lakesare는

6

동일한 문제 ( 일부 지역에서 끔찍한 모바일 데이터 품질로 인한 높은 대기 시간 및 패킷 손실 )를 가지고 있으며 나를 위해 그것을 자제 하지 않아야합니다 (모든 원격 호스트에 특별한 프로그램이 필요하며 모든 서버에서 UTF8을 로컬 및 원격으로 수정하여 모든 서버에서 중단시키지 않습니다) , 모든 방화벽 수정-실제로 로컬 라인 편집을 제공하지는 않습니다 .) ssh에 로컬 라인 편집 모드 를 제공하기 위해 작은 래퍼를 작성하기로 결정했습니다 .

기본적으로 기본 char-by-char 모드에서는 모든 것을 ssh로 전달하지만 핫키를 누르면 언제든지 읽기 라인 기반 로컬 라인 편집 모드로 들어갈 수 있습니다. 로컬로 전체 라인, 당신은 누르면 다음 (명령 등 리콜을 편집으로) 입력 할 수 있도록 입력 은 원격 측면에 하나 개의 TCP 패킷으로 전송됩니다.

지연없는 명령 행 편집 (오래된 텔넷 쿠킹 / 정식 "라인 별 버퍼링 모드"와 유사하지만 GNU readline에서 제공하는 뛰어난 편집 명령 사용)이 장점입니다 . 또한 서버 나 방화벽에서 변경할 필요가 없습니다. 그리고 편집기 및 기타 curses 기반 프로그램은 기본 ssh 연결에서와 같이 기본 char-by-char 모드에서 계속 정상적으로 작동합니다 (지연 상태 임).

단점은 원할 때마다 핫라인을 눌러 로컬 회선 편집 모드로 들어가거나 자동 감지를 허용하도록 원격 호스트에서 프롬프트를 수정해야한다는 것입니다. 또한 원격 파일 이름 완성은 현재 char-by-char 모드로 되돌려야만 작동합니다 (또는 환경 설정에 따라 원격 파일 시스템 대신 로컬 파일 시스템을 사용함). 그러나 진행중인 작업이므로 개선을위한 풀 요청 또는 실행 가능한 아이디어를 환영합니다!


비 전통적인 측면에서 SSHFS 를 사용 하여 원격 파일 시스템을 로컬로 마운트 할 수도 있습니다.

쉘 (및 라인 편집)이 로컬이고 지연이 없을뿐만 아니라 원격 파일 시스템을 탐색하고 원격 파일에 쉘 파일 이름 완성 ( tab key )을 사용할 수 있다는 장점이 있습니다. 또한 (가장 뛰어난 기능 IMHO) 원격 파일의 지연없는 편집을 위해 선택한 로컬 편집기를 사용할 수 있습니다.

단점은 (특히 링크가 대역폭이 낮고 대기 시간이 긴 경우) 각 파일을 편집 할 때마다 로컬 호스트로 완전히 전송 한 다음 편집 후 원격으로 다시 전송해야한다는 단점이 있습니다. SSHFS는 일부 캐싱 (sshfs (1) 옵션 cache , cache_timeout , cache_x_timeout 참조 )을 제공하여 문제를 다소 완화합니다. 또한 원격에서 무언가를 실행하려면 다른 화면을 사용하거나 모든 명령 앞에 " ssh remotehost "를 붙여야합니다 (예 :)ssh remotehost sudo service apache restart . 옵션 참조 ControlMaster 에서 ssh_config를 (5) 그 빠른 (그리고 암호를 묻지 않고)을 수행 할 수 있도록.


3

명령을 실행하는 경우 해당 동작을 에뮬레이션 할 수 있습니다.

ssh user @ targetmachine '문자열의 내 명령'

그러나,

  1. 이것은 연결을 만들 때 추가 지연을 추가합니다 ( 마스터 / 공유 ssh 연결을 사용하여 완화 할 수 있음 )
  2. 암호가없는 개인 키가없는 경우 암호를 사용 ssh-agent하거나 입력해야합니다
  3. 메뉴와 상호 작용하거나 파일을 편집하는 등의 경우 분명히 작동하지 않습니다.

1

tmux를 사용하여 타이핑의 유창한 에코를 얻을 수 있습니다. tmux를 로컬로 실행하십시오. 하나의 분할 창에 ssh 쉘이 있고 그 아래 분할 창에 로컬 쉘이있는 경우 로컬 분할 창에서 원격 분할 창으로 키를 보낼 수 있습니다.

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

대화 형 명령과 작은 명령은 지연 ssh 셸에 직접 입력합니다. 시차가 입력을 방해하기 시작하자마자 로컬 창으로 전환하고 보내기 키를 사용합니다. 이것은 명령을 입력하는 도중에도 작동합니다.

바로 가기 위해 이것을 .bashrc에 추가했습니다.

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

send-keys를 설명해 주신 Christian Pelczarski에게 감사드립니다 : https://minimul.com/increased-developer-productivity-with-tmux-part-5.html

예를 들어 따옴표를 사용할 때는 탈출해야합니다

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.