From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrey Tykhonov Subject: Connect to the ssh and execute any command Date: Fri, 13 Sep 2013 00:56:41 +0300 Message-ID: <20130912215641.GA6461@demi> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:39533) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VKEtS-0001lo-FD for emacs-orgmode@gnu.org; Thu, 12 Sep 2013 17:57:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VKEtJ-0006aX-S5 for emacs-orgmode@gnu.org; Thu, 12 Sep 2013 17:57:42 -0400 Received: from mail-ee0-x22e.google.com ([2a00:1450:4013:c00::22e]:52505) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VKEtJ-0006a0-Cc for emacs-orgmode@gnu.org; Thu, 12 Sep 2013 17:57:33 -0400 Received: by mail-ee0-f46.google.com with SMTP id c13so189163eek.19 for ; Thu, 12 Sep 2013 14:57:30 -0700 (PDT) Content-Disposition: inline List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Hi all! During last several days I was trying to implement quite simple script which: 1. Creates new buffer with the shell (M-x shell) 2. Executes there "ssh username@domain.com". As result -- the password prompt appears in the minibuffer. I manually input password. 3. Then script executes any command in the recently created buffer (shell), for example: "ls -la". So I expect to see directory listing on the domain.com. but, for sorry, I cannot to do so that "ls -la" will be executed! I googled, I have tried many different approaches but without any luck :-( Here I should mention quite important thing: I cannot use TRAMP because it does not work with the server to which the script connects and then on which executes "ls -la". (I suppose that TRAMP uses FUSE, but for sorry FUSE does not work with mine server). So TRAMP is not available for me. For example I tried: (progn (make-comint-in-buffer "ssh" "*ssh*" "ssh" nil "username@domain.com") (make-comint-in-buffer "ls" "*ssh*" "ls" nil "-la") ) "ls -la" does not executes. (progn (make-comint-in-buffer "ssh" "*ssh*" "ssh" nil "username@domain.com") ; instead of "ls -la" here is pwd (start-file-process "pwd" "*ssh*" "pwd") ) In *scratch* outputs just "Process pwd finished" (progn (start-process-shell-command "ssh" "*ssh*" "ssh usernamev@domain.com") (process-send-string (get-buffer-process "*ssh*") "pwd\n") ) Seems this one -- is overall wrong approach because start-process-shell-command does not want to show shell after I put the password in the prompt. Also I tried call-process instead of start-process-shell-command: (call-process "ssh" nil "*ssh*" t "username@domain.com") I got "Pseudo-terminal will not be allocated because stdin is not a terminal". Then... (progn (setq buffer (get-buffer-create "*ssh*")) ; switch to buffer (switch-to-buffer-other-window buffer) ; execute there a shell (shell buffer) ; then executes there mine commands (process-send-string (get-buffer-process "*ssh*") "ssh username@domain.com") (comint-send-input) ; and (process-send-string (get-buffer-process "*ssh*") "ls -la") (comint-send-input) ) Last process-send-string does not execute in time because it is not synchronous. Last process-send-string does not wait for previous... Also I tried set-process-filter but filter just eats password prompt so I could not input password.... How my task could be implemented without TRAMP? Please help! Regards, Andrey