emacs and ssh forwarding
i found the following code from a site but i just could not found a way to use it to forward my ports within emacs does any one got a idea to use this code to automate forwarding from emacs.
;;; sshfwd.el -- emacs lisp for port forwarding via ssh
;; Copyright (C) 1999 Mark Plaksin
;;
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License
;; as published by the Free Software Foundation; either version 2
;; of the License, or (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
;;
;;; Port forwarding requires passive ftp, so this command should
;;; invoke a program that is passive ftp. On Linux, "pftp" is
;;; passive.
(setq ange-ftp-ftp-program-name "pftp")
(defvar map-ssh-program "ssh" "Name of ssh program.")
(defun map-ssh-port-forward (localport host remoteport)
"Sets up ssh port forwarding.
Assumes map-ssh-program points to ssh binary."
(let* ((procname (concat localport ":" host ":" remoteport))
(buffname (concat "*" procname "*"))
(port-string (concat localport ":" host ":" remoteport)))
;; If buffname exists, assume forwarding is already set up.
(if (get-buffer buffname)
(message (concat "Forwarding already set up for " procname "."))
(start-process procname buffname map-ssh-program "-C" "-L"
port-string host "perl -e 'while(getppid > 1){sleep 30}'")
(set-process-filter (get-process procname) 'map-ssh-filter))))
(defun map-ssh-filter (proc string)
"Prompts for password when STRING matches \".* password: $\".
Sends the password to PROC. It has only been tested with ssh and does not
handle killed buffers properly."
;; This part stolen from the Emacs Lisp docs
(with-current-buffer (process-buffer proc)
(let ((moving (= (point) (process-mark proc))))
(save-excursion
;; Insert the text, advancing the process marker.
(goto-char (process-mark proc))
(insert string)
(set-marker (process-mark proc) (point)))
(if moving (goto-char (process-mark proc)))
;; map's part starts here
;; Useful for debugging
;;(message string)
(if (string-match ".* password: $" string)
(process-send-string
proc
(concat
(read-passwd string)
"\n"))))))
|