Могу ли я сказать SSH отправлять данные только после нажатия клавиши ввода или вкладки, а не после каждого отдельного нажатия клавиши?
Могу ли я сказать SSH отправлять данные только после нажатия клавиши ввода или вкладки, а не после каждого отдельного нажатия клавиши?
Ответы:
Нет, потому что у SSH нет возможности узнать, потребует ли то, что вы печатаете, ввод или табуляция к действию - например, если вы пытаетесь просмотреть историю команд, ^Rстрелки или вверх не будут отправлены сами по себе, и это было бы ... неприятно.
Вам не нужно ждать между каждым символом, чтобы он появился на экране; если вы знаете, что вам нужно набирать, отмахивайтесь от него так быстро, как вам нравится, и терминал нагонит примерно за один раз туда-обратно с момента, когда вы перестали печатать, что примерно так же хорошо, как вы выйдете из в любом случае установка с линейной буферизацией (потеря пакетов отличается, но она привносит свои интересные особенности).
PuTTY предлагает две функции, которые могут быть полезны: «локальное эхо» и «редактирование локальной линии». Редактирование локальной строки буферизует все и отправляет его на сервер только после возврата строки. Это может значительно облегчить работу с командной строкой, но это также может сделать использование текстового редактора адом.
PuTTY также имеет некоторые другие опции для включения / выключения определенных вещей (алгоритм Nagle), которые могут повлиять на воспринимаемую задержку соединения. На мой взгляд, клиент OpenSSH не предлагает всех возможностей, которые PuTTY имеет в этом отношении, и я не знаю альтернативы Linux, которая бы сравнивалась.
В противном случае, Womble имеет право.
Мош был разработан для решения именно этой проблемы. Он предназначен для использования через соединения с высокой задержкой и ненадежными соединениями и обеспечивает локальное эхо и редактирование линии.
Откройте сессию ssh ssh host.example.org bash(или любую другую оболочку, которую вы хотите использовать).
Вы получите режим буферизации строки для удаленной оболочки, что означает, что вы не получите приглашение и редактирование строки, но вы получите локальное эхо и режим «одна строка за раз». Это иногда полезно при работе с очень плохим соединением. Не все программы будут работать правильно, потому что у вас не будет псевдотермы, но большинство утилит UNIX работают просто отлично.
Обновить:
При использовании описанного выше трюка вы можете получить обычное редактирование строки ( readline ) на локальном конце с помощью удобной программы-оболочки rlfe . Просто беги rlfe ssh host.example.org bash.
Имея ту же проблему ( высокая задержка и потеря пакетов из-за ужасного качества мобильных данных в некоторых местах), и mosh не обрезал его для меня (для этого нужны специальные программы на всех удаленных хостах, исправление UTF8 локально и удаленно на всех серверах, не нарушая их , изменяя все брандмауэры - и это все равно не обеспечивает редактирование локальной строки) Я решил написать небольшую оболочку для обеспечения режима редактирования локальной строки для ssh .
По умолчанию он просто передает все в ssh в режиме char-by-char по умолчанию, но вы можете нажать горячую клавишу, чтобы в любой момент войти в режим редактирования локальной линии с поддержкой readline. Таким образом, вы можете ввести (с редактированием, вызовом команды и т. Д.) Всю строку локально, а затем, когда вы нажмете Enter, она будет отправлена как один TCP-пакет на удаленную сторону.
Преимущество заключается в редактировании командной строки без задержек (как в старом, подготовленном telnet / каноническом «построчном буферизованном режиме», но с превосходными командами редактирования, предоставляемыми GNU readline ). Кроме того, ничего не нужно менять на серверах или брандмауэрах. А редакторы и другие программы, основанные на curses, продолжают работать в обычном режиме (хотя и с задержкой) в режиме char-by-char по умолчанию, как при обычном ssh-соединении.
Недостатком является то, что вам нужно либо нажимать горячую клавишу, чтобы каждый раз входить в режим редактирования локальной линии, либо вам нужно изменить подсказку на удаленном хосте, чтобы разрешить автоопределение. Кроме того, завершение имени файла на удаленной вкладке в настоящее время работает только путем возврата вас в режим char-by-char (или использует локальную файловую систему вместо удаленной, в зависимости от ваших предпочтений). Тем не менее, эта работа еще не завершена, так что просьбы о выдвижении или реальные идеи по улучшению приветствуются!
Преимущество состоит не только в том, что ваша оболочка (и ее редактирование строк) является локальной и без задержек, но также в том, что вы можете перемещаться по удаленной файловой системе и использовать завершение имени файла оболочки ( клавиша табуляции ) для удаленных файлов. Кроме того, (лучшая функция IMHO) вы можете использовать свой локальный редактор по выбору для без задержек редактирования удаленных файлов.
Недостатки (особенно если вы связываете также с низкой пропускной способностью, а не только с высокой задержкой), что для каждого файла, который нужно отредактировать, он должен быть полностью перенесен на локальный хост, а затем после редактирования полностью перенесен на удаленный. SSHFS обеспечивает некоторое кеширование (см. Sshfs (1) кэш опций , 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. Как только лага начинает мешать набирать текст, я переключаюсь на локальную панель и использую send-keys. Это работает даже в середине ввода команды.
Чтобы сократить это, я добавил это к моему .bashrc
function ts {
args=$@
tmux send-keys -t right "$args" C-m
}
Спасибо Кристиану Пельчарски за объяснение ключей отправки: 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 upstream никогда не принимал эти изменения. https://github.com/hyc/OpenSSH-LINEMODE