Мне очень интересно, где у вас такая задержка печати, что вы не можете с ней работать. Я использовал ssh в эпоху модемов и никогда не сталкивался с этими проблемами.
mailq
4
Я получаю доступ к SliceHost VPS (США) из Бельгии. Задержка достаточно заметна, чтобы сбить меня с толку. Тем не менее, я заметил, что другие люди, кажется, менее обеспокоены этим, чем я ..
@ mailq ты не используешь 3G в 2019 году? sshing из деревенского загородного дома или метро - это больше похоже на
дозвон
Ответы:
32
Нет, потому что у SSH нет возможности узнать, потребует ли то, что вы печатаете, ввод или табуляция к действию - например, если вы пытаетесь просмотреть историю команд, ^Rстрелки или вверх не будут отправлены сами по себе, и это было бы ... неприятно.
Вам не нужно ждать между каждым символом, чтобы он появился на экране; если вы знаете, что вам нужно набирать, отмахивайтесь от него так быстро, как вам нравится, и терминал нагонит примерно за один раз туда-обратно с момента, когда вы перестали печатать, что примерно так же хорошо, как вы выйдете из в любом случае установка с линейной буферизацией (потеря пакетов отличается, но она привносит свои интересные особенности).
Я был бы очень заинтересован в том, чтобы найти способ сравнить скорость ssh-typing на нескольких машинах. Я заметил, что скорость может сильно варьироваться между машинами, расположенными в одном и том же месте, и которые не имеют большой нагрузки на них. Моя теория состоит в том, что это происходит особенно с небольшими экземплярами из AWS (например, микро или мини).
сорин
1
Посмотрите на бумагу Моша. Автор сделал несколько сравнительных тестов mosh.org/#techinfo
user7610
Мне пришлось использовать «ssh -t .... bash -i» -t означает «принудительное распределение pty» (иначе SSH не считает, что это необходимо, и bash жалуется), а -i запускает bash в интерактивном режиме ( иначе он пропускает некоторую инициализацию). Передача ssh -C тоже (сжатие трафика) может помочь в дальнейшем. Отличный совет, спасибо.
Закмк
25
PuTTY предлагает две функции, которые могут быть полезны: «локальное эхо» и «редактирование локальной линии». Редактирование локальной строки буферизует все и отправляет его на сервер только после возврата строки. Это может значительно облегчить работу с командной строкой, но это также может сделать использование текстового редактора адом.
PuTTY также имеет некоторые другие опции для включения / выключения определенных вещей (алгоритм Nagle), которые могут повлиять на воспринимаемую задержку соединения. На мой взгляд, клиент OpenSSH не предлагает всех возможностей, которые PuTTY имеет в этом отношении, и я не знаю альтернативы Linux, которая бы сравнивалась.
Я не смог установить PuTTY на macOS, есть ли замена?
Aero Windwalker
Замазка на Linux - это немного больно. Он не может переподключиться автоматически, показывает какое-то окно сообщения при отключении, и мне нужно снова открыть окно. Я хотел бы использовать что-то вроде kitty или plink.exe в Linux или лучше просто настроить autossh. Некоторые устройства не поддерживают mosh tho (если я пытаюсь получить доступ к своему домашнему маршрутизатору openwrt)
POMATu
22
Мош был разработан для решения именно этой проблемы. Он предназначен для использования через соединения с высокой задержкой и ненадежными соединениями и обеспечивает локальное эхо и редактирование линии.
Вы можете установить его в локальный каталог из источника без sudo. Кроме того, посмотрите на mosh.org. В нем говорится: «Нет привилегированного кода. Нет демона. Вам не нужно быть суперпользователем для установки или запуска Mosh. Клиент и сервер - это исполняемые файлы, запускаемые обычным пользователем и действующие только в течение всего срока жизни соединения».
Стивен Хоуэлл
1
Просто отметить. Мош это не СШ. Он использует собственный проприетарный протокол. (У меня нет проблем с этим, хотя.)
user7610
Это работало с нуля для меня на Android и домашней плохой сети Wi-Fi. Он знает о readline
tinmarino
9
Откройте сессию ssh ssh host.example.org bash(или любую другую оболочку, которую вы хотите использовать).
Вы получите режим буферизации строки для удаленной оболочки, что означает, что вы не получите приглашение и редактирование строки, но вы получите локальное эхо и режим «одна строка за раз». Это иногда полезно при работе с очень плохим соединением. Не все программы будут работать правильно, потому что у вас не будет псевдотермы, но большинство утилит UNIX работают просто отлично.
Обновить:
При использовании описанного выше трюка вы можете получить обычное редактирование строки ( readline ) на локальном конце с помощью удобной программы-оболочки rlfe . Просто беги rlfe ssh host.example.org bash.
По умолчанию он просто передает все в ssh в режиме char-by-char по умолчанию, но вы можете нажать горячую клавишу, чтобы в любой момент войти в режим редактирования локальной линии с поддержкой readline. Таким образом, вы можете ввести (с редактированием, вызовом команды и т. Д.) Всю строку локально, а затем, когда вы нажмете Enter, она будет отправлена как один TCP-пакет на удаленную сторону.
Преимущество заключается в редактировании командной строки без задержек (как в старом, подготовленном telnet / каноническом «построчном буферизованном режиме», но с превосходными командами редактирования, предоставляемыми GNU readline ). Кроме того, ничего не нужно менять на серверах или брандмауэрах. А редакторы и другие программы, основанные на curses, продолжают работать в обычном режиме (хотя и с задержкой) в режиме char-by-char по умолчанию, как при обычном ssh-соединении.
Недостатком является то, что вам нужно либо нажимать горячую клавишу, чтобы каждый раз входить в режим редактирования локальной линии, либо вам нужно изменить подсказку на удаленном хосте, чтобы разрешить автоопределение. Кроме того, завершение имени файла на удаленной вкладке в настоящее время работает только путем возврата вас в режим char-by-char (или использует локальную файловую систему вместо удаленной, в зависимости от ваших предпочтений). Тем не менее, эта работа еще не завершена, так что просьбы о выдвижении или реальные идеи по улучшению приветствуются!
С другой стороны, вы можете использовать SSHFS для локального монтирования удаленной файловой системы.
Преимущество состоит не только в том, что ваша оболочка (и ее редактирование строк) является локальной и без задержек, но также в том, что вы можете перемещаться по удаленной файловой системе и использовать завершение имени файла оболочки ( клавиша табуляции ) для удаленных файлов. Кроме того, (лучшая функция IMHO) вы можете использовать свой локальный редактор по выбору для без задержек редактирования удаленных файлов.
Недостатки (особенно если вы связываете также с низкой пропускной способностью, а не только с высокой задержкой), что для каждого файла, который нужно отредактировать, он должен быть полностью перенесен на локальный хост, а затем после редактирования полностью перенесен на удаленный. SSHFS обеспечивает некоторое кеширование (см. Sshfs (1) кэш опций , cache_timeout , cache_x_timeout ), чтобы несколько устранить эти проблемы. Кроме того, если вы хотите выполнить что-то на удаленном компьютере, вам нужно использовать другой экран или поставить перед всеми командами префикс « ssh remotehost » (например ssh remotehost sudo service apache restart). Смотрите опцию ControlMaster в ssh_config (5), чтобы сделать это быстрее для выполнения (и без запроса пароля).
Вы можете использовать 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
}
Это делает то, что вы хотите. Однако вам необходимо установить и клиент, и сервер, и OpenSSH upstream никогда не принимал эти изменения.
https://github.com/hyc/OpenSSH-LINEMODE
Ответы:
Нет, потому что у 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 (или использует локальную файловую систему вместо удаленной, в зависимости от ваших предпочтений). Тем не менее, эта работа еще не завершена, так что просьбы о выдвижении или реальные идеи по улучшению приветствуются!
С другой стороны, вы можете использовать SSHFS для локального монтирования удаленной файловой системы.
Преимущество состоит не только в том, что ваша оболочка (и ее редактирование строк) является локальной и без задержек, но также в том, что вы можете перемещаться по удаленной файловой системе и использовать завершение имени файла оболочки ( клавиша табуляции ) для удаленных файлов. Кроме того, (лучшая функция 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 на одной панели и локальная оболочка на панели под ней, то из локальной панели вы можете отправлять ключи на удаленную панель.
Интерактивные команды и небольшие команды я набираю прямо в отстающие оболочки SSH. Как только лага начинает мешать набирать текст, я переключаюсь на локальную панель и использую send-keys. Это работает даже в середине ввода команды.
Чтобы сократить это, я добавил это к моему .bashrc
Спасибо Кристиану Пельчарски за объяснение ключей отправки: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html
Например, вам придется убегать при использовании кавычек.
источник
Это делает то, что вы хотите. Однако вам необходимо установить и клиент, и сервер, и OpenSSH upstream никогда не принимал эти изменения. https://github.com/hyc/OpenSSH-LINEMODE
источник