7

これを含むいくつかの質問では、Emacs内からのssh接続に関連する側面について説明しています。しかし、私の質問に対する答えは見つかりませんでした:Emacs内からリモートマシンにSSH接続するにはどうすればよいですか?

Emacs内からリモートマシン上のファイルを編集したくありません。M-x shellどちらがローカルマシンでシェルを開くかを認識しており、TRAMPを使用してリモートマシンでsshを介してファイルを編集することを認識しています。ただし、これらはどちらもこの質問とは関係ありません。

(終了に投票する代わりに、質問を別のサイトに移行することもできます。)

編集:ここで関連する議論。

4

4 に答える 4

11

まず、私はネイティブの elisp ssh クライアントを認識していません (また、ネイティブの elisp ssh クライアントを作成する大きな動機があるとは思いません)。そのため、外部の ssh クライアント プロセスと対話する必要があることは確かです。

ssh をインタラクティブに使用したい場合、ssh プロセスには接続のローカル側に端末が必要です。

したがって、問題は次のようになります: Emacs は ssh プロセスを接続できる端末を実装していますか?

答えは: はい -- term.el は、シェルを必要とせずに ssh を直接実行できる堅牢な端末実装を提供します。

実行M-x term RETすると、プログラムを求めるプロンプトが表示されます。(デフォルトはシェルですが、実行できるプロセスはこれだけではありません。)

理由は不明ですが、インタラクティブterm(およびansi-term) 関数は、指定されたプログラムに引数を渡すことをサポートしていませんssh user@host。代わりに、引数を処理するスクリプトを指定することもできますが、elisp でも同様に管理できます。

このterm関数は実際にはmake-term、プログラムを開始するために呼び出し、適切なモードを設定する単純なラッパーです。プログラムの引数を受け入れるように、目的に合わせての定義をコピーmake-term て変更するのは非常に簡単です。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
于 2012-05-10T15:00:11.253 に答える
4

結局のところ、あなたが望むものがあります:

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

そしてそれM-x rlogin RET <myhost> RETをします。

于 2012-05-11T12:38:50.093 に答える
2

探しているのはssh.elかもしれません。ssh コマンドは、ssh を介して Emacs でリモート シェルを作成するための 1 ステップの方法を提供します。これには、自然な方法でユーザー名を指定し、必要に応じて Tramp ディレクトリ トラッキングを有効にすることが含まれます。

于 2012-08-07T18:16:20.193 に答える
1

私は上手く理解できていない気がします。開いてそこでM-x ansi-term実行ssh user@hostしますか?

于 2012-05-08T08:51:29.787 に答える