Вопрос по ssh – Удаленное ssh-соединение из Emacs

7

Несколько вопросов, в том числеэтот Во-первых, обсудите аспекты, относящиеся к ssh-соединениям из Emacs. Я не нашел ответа на свой вопрос:How can I ssh into a remote machine from within Emacs?

Я не хочу редактировать файл на удаленной машине из Emacs. Я в курсеM-x shell который открывает оболочку на моем локальном компьютере, и я знаю об использовании TRAMP для редактирования файла через ssh на удаленном компьютере. Однако ни один из них не относится к этому вопросу.

(Вместо того, чтобы голосовать, чтобы закрыть, возможно, перенести вопрос на другой сайт.)

Изменить: Связанное обсуждениеВот.

Я хочу напечататьM-x ssh или что-то подобное, чтобы создать соединение SSH, как я могу набратьM-x sql-postgresql создать соединение напрямую с базой данных.M-x shell просто открывается оболочка, из которой яcan SSH или что-то еще. Я спрашивал есть ли способ sshdirectly изнутри Emacs. SabreWolfy
Что вы на самом деле хотите сделать через ssh, который не редактирует удаленные файлы или не открывает удаленный терминал? Tyler
Означает ли это, что весь ssh-фокус вопроса - красная сельдь, а все, что вам нужно, это встроенная оболочка в Emacs (eshell как уже было сказано)? Похоже, тот факт, что вы запускаете ssh в этой оболочке для подключения к удаленной машине, в значительной степени не имеет значения? phils
И то и другоеM-x shell и бродягаdo относитесь к вашему вопросу, как указано. Поэтому, пожалуйста, объясните конкретно, что они не делают. Я понимаю, что вы хотите сделать больше, чем позволяет вам Бродяга, но что вы хотите сделать этоM-x shell не позволяет вам сделать? Stefan
Я хочу открыть удаленный терминал - я хочу подключиться по ssh к удаленной машине прямо из Emacs, без использования внешней оболочки. Если это невозможно, это нормально - тогда это ответ на вопрос. SabreWolfy

Ваш Ответ

4   ответа
3

(setq rlogin-program "ssh")
(setq rlogin-process-connection-type t)

а потомM-x rlogin RET <myhost> RET сделаю это.

Error: User Rate Limit Exceededrlogin-mode-mapError: User Rate Limit Exceededbzr.savannah.gnu.org/lh/emacs/emacs-24/revision/107988/lisp/net/…
Error: User Rate Limit ExceededtermError: User Rate Limit Exceededterm-char-modeError: User Rate Limit ExceededcomintError: User Rate Limit ExceededtermError: User Rate Limit Exceeded
Error: User Rate Limit ExceededsshError: User Rate Limit Exceeded SabreWolfy
Error: User Rate Limit ExceededM-x rlogin RET <host> <username> RETError: User Rate Limit ExceededM-x rlogin RET <[email protected]:port> RETError: User Rate Limit Exceededemacswiki.org/emacs/RloginModeError: User Rate Limit Exceeded SabreWolfy
Error: User Rate Limit Exceededssh host usernameError: User Rate Limit Exceededssh [email protected]:portError: User Rate Limit Exceeded[email protected] -p portError: User Rate Limit Exceededhost -l username -p portError: User Rate Limit Exceeded(setq rlogin-explicit-args '("-l" "username" "-p" "port"))Error: User Rate Limit ExceededC-h f rloginError: User Rate Limit ExceededrloginError: User Rate Limit Exceededcomint-modeError: User Rate Limit Exceededansi-color-for-comint-mode-onError: User Rate Limit Exceeded
2

ssh.el это то, что вы ищете. Команда ssh предоставляет одношаговый способ создания удаленных оболочек в Emacs через ssh, включая естественное указание имени пользователя и, при желании, включение отслеживания каталогов tramp.

1

M-x ansi-term и бегиssh [email protected] там?

Error: User Rate Limit Exceeded SabreWolfy
Error: User Rate Limit ExceededC-x C-fError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded SabreWolfy
10

я не знаю о нативном SSH-клиенте elisp (и не думаю, что для его написания есть большая мотивация), поэтому вам, безусловно, нужно будет взаимодействовать с процессом внешнего ssh-клиента.

Как вы хотите использовать sshinteractivelyДля процесса ssh требуется терминал на локальной стороне соединения.

Поэтому возникает вопрос: реализует ли Emacs терминал, к которому можно подключить процесс ssh?

Ответ таков: yes - term.el предоставляет надежную реализацию терминала, через которую можно напрямую запустить ssh без необходимости в оболочке.

Если вы бежитеM-x term RET вам будет предложено для программы. (По умолчанию используется оболочка, но это, безусловно, не единственный тип процесса, который вы можете запустить.)

По неизвестным причинам интерактивныйterm (а такжеansi-term) функции не поддерживают передачу аргументов в указанную программу, что делает их менее полезными, если вы хотите запустить что-то вродеssh [email protected], Вместо этого вы можете указать скрипт, который обрабатывает аргументы, но мы можем управлять этим и в elisp:

term функция на самом деле простая оболочка, которая вызываетmake-term чтобы запустить программу, а затем устанавливает соответствующие режимы. Какmake-term does принять аргументы программы, довольно просто скопировать и изменить определениеterm в ваших собственных целях.

Вот очень простая реализация:

(defun my-ssh (user host port)
  "Connect to a remote host by SSH."
  (interactive "sUser: \nsHost: \nsPort (default 22): ")
  (let* ((port (if (equal port "") "22" port))
         (switches (list host "-l" user "-p" port)))
    (set-buffer (apply 'make-term "ssh" "ssh" nil switches))
    (term-mode)
    (term-char-mode)
    (switch-to-buffer "*ssh*")))

или, возможно, это предпочтительнее:

(defun my-ssh (args)
  "Connect to a remote host by SSH."
  (interactive "sssh ")
  (let ((switches (split-string-and-unquote args)))
    (set-buffer (apply 'make-term "ssh" "ssh" nil switches))
    (term-mode)
    (term-char-mode)
    (switch-to-buffer "*ssh*")))

Очевидно, что есть возможности для улучшений, но я думаю, что это довольно полезно как есть.

Вы должны убедиться, что вы знакомы с причудамиterm-mode, Увидеть:

M-: (info "(emacs) Terminal emulator") RET M-: (info "(emacs) Terminal Mode") RET C-hf term-mode RET
Error: User Rate Limit Exceededemacs23-common-non-dfsg. SabreWolfy
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded SabreWolfy
Error: User Rate Limit Exceededstackoverflow.com/a/19837365/324105
Error: User Rate Limit Exceeded SabreWolfy

Похожие вопросы