Enter 키 또는 Tab 키를 누른 후에 만 개별 키를 누른 후에 만 데이터를 보내도록 SSH에 지시 할 수 있습니까?
Enter 키 또는 Tab 키를 누른 후에 만 개별 키를 누른 후에 만 데이터를 보내도록 SSH에 지시 할 수 있습니까?
답변:
아니요, SSH는 입력하는 내용에 enter 또는 tab to action이 필요한지 알 수 없기 때문에 명령 기록을 진행하려는 경우 예를 들어 ^R
위 또는 아래 화살표는 그들 자신은 ... 불쾌 할 것입니다.
그러나 화면에 나타나기 위해 각 문자 사이를 기다릴 필요는 없습니다. 입력해야하는 내용을 알고 있으면 원하는대로 빨리 입력하고 터미널은 입력을 중단 한 시점부터 약 1 회의 왕복 시간을 잡습니다. 어쨌든 라인 버퍼 설정 (패킷 손실은 다르지만 흥미로운 자체 단점이 있음).
PuTTY는 "로컬 에코"및 "로컬 라인 편집"이라는 두 가지 기능을 사용할 수 있습니다. 로컬 라인 편집은 모든 것을 버퍼링하고 라인 리턴 후에 만 서버로 보냅니다. 이렇게하면 명령 행을 훨씬 쉽게 처리 할 수 있지만 텍스트 편집기를 사용하지 못할 수도 있습니다.
PuTTY에는 인식 된 연결 대기 시간에 영향을 줄 수있는 특정 항목 (Nagle 알고리즘)을 활성화 / 비활성화하는 다른 옵션도 있습니다. 보시다시피 OpenSSH 클라이언트는 PuTTY가 이와 관련하여 제공하는 모든 기능을 제공하지는 않으며 비교할 Linux 대안을 모릅니다.
그렇지 않으면, womble이 옳습니다.
Mosh 는이 정확한 문제를 해결하도록 설계되었습니다. 대기 시간이 길고 신뢰할 수없는 연결에서 사용하도록 설계되었으며 로컬 에코 및 라인 편집 기능을 제공합니다.
ssh host.example.org bash
(또는 사용하려는 쉘)으로 ssh 세션을 엽니 다 .
원격 셸에 라인 버퍼링 모드가 표시됩니다. 즉, 프롬프트와 라인 편집은받지 않지만 로컬 에코 및 "한 번에 한 라인"모드가됩니다. 매우 나쁜 연결로 작업 할 때 유용합니다. pseudo-tty는 없지만 대부분의 UNIX 유틸리티는 제대로 작동하기 때문에 모든 프로그램이 제대로 실행되는 것은 아닙니다.
최신 정보:
위의 트릭을 사용하는 경우는 법선 편집 (얻을 수 readline에 상기) 지역 이라는 편리한 래퍼 프로그램을 사용하여 끝을 rlfe을 . 그냥 실행하십시오 rlfe ssh host.example.org bash
.
동일한 문제 ( 일부 지역에서 끔찍한 모바일 데이터 품질로 인한 높은 대기 시간 및 패킷 손실 )를 가지고 있으며 나를 위해 그것을 자제 하지 않아야합니다 (모든 원격 호스트에 특별한 프로그램이 필요하며 모든 서버에서 UTF8을 로컬 및 원격으로 수정하여 모든 서버에서 중단시키지 않습니다) , 모든 방화벽 수정-실제로 로컬 라인 편집을 제공하지는 않습니다 .) ssh에 로컬 라인 편집 모드 를 제공하기 위해 작은 래퍼를 작성하기로 결정했습니다 .
기본적으로 기본 char-by-char 모드에서는 모든 것을 ssh로 전달하지만 핫키를 누르면 언제든지 읽기 라인 기반 로컬 라인 편집 모드로 들어갈 수 있습니다. 로컬로 전체 라인, 당신은 누르면 다음 (명령 등 리콜을 편집으로) 입력 할 수 있도록 입력 은 원격 측면에 하나 개의 TCP 패킷으로 전송됩니다.
지연없는 명령 행 편집 (오래된 텔넷 쿠킹 / 정식 "라인 별 버퍼링 모드"와 유사하지만 GNU readline에서 제공하는 뛰어난 편집 명령 사용)이 장점입니다 . 또한 서버 나 방화벽에서 변경할 필요가 없습니다. 그리고 편집기 및 기타 curses 기반 프로그램은 기본 ssh 연결에서와 같이 기본 char-by-char 모드에서 계속 정상적으로 작동합니다 (지연 상태 임).
단점은 원할 때마다 핫라인을 눌러 로컬 회선 편집 모드로 들어가거나 자동 감지를 허용하도록 원격 호스트에서 프롬프트를 수정해야한다는 것입니다. 또한 원격 탭 파일 이름 완성은 현재 char-by-char 모드로 되돌려야만 작동합니다 (또는 환경 설정에 따라 원격 파일 시스템 대신 로컬 파일 시스템을 사용함). 그러나 진행중인 작업이므로 개선을위한 풀 요청 또는 실행 가능한 아이디어를 환영합니다!
쉘 (및 라인 편집)이 로컬이고 지연이 없을뿐만 아니라 원격 파일 시스템을 탐색하고 원격 파일에 쉘 파일 이름 완성 ( tab key )을 사용할 수 있다는 장점이 있습니다. 또한 (가장 뛰어난 기능 IMHO) 원격 파일의 지연없는 편집을 위해 선택한 로컬 편집기를 사용할 수 있습니다.
단점은 (특히 링크가 대역폭이 낮고 대기 시간이 긴 경우) 각 파일을 편집 할 때마다 로컬 호스트로 완전히 전송 한 다음 편집 후 원격으로 다시 전송해야한다는 단점이 있습니다. SSHFS는 일부 캐싱 (sshfs (1) 옵션 cache , cache_timeout , cache_x_timeout 참조 )을 제공하여 문제를 다소 완화합니다. 또한 원격에서 무언가를 실행하려면 다른 화면을 사용하거나 모든 명령 앞에 " ssh remotehost "를 붙여야합니다 (예 :)ssh remotehost sudo service apache restart
. 옵션 참조 ControlMaster 에서 ssh_config를 (5) 그 빠른 (그리고 암호를 묻지 않고)을 수행 할 수 있도록.
명령을 실행하는 경우 해당 동작을 에뮬레이션 할 수 있습니다.
ssh user @ targetmachine '문자열의 내 명령'
그러나,
ssh-agent
하거나 입력해야합니다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\'
이것은 당신이 원하는 것을합니다. 그러나 클라이언트와 서버를 모두 설치해야하며 OpenSSH 업스트림은 변경 사항을 채택하지 않았습니다. https://github.com/hyc/OpenSSH-LINEMODE