在没有SSH的情况下连接到远程lisp

时间:2016-06-04 20:49:30

标签: ssh lisp common-lisp slime

我正在尝试连接到我的笔记本电脑上的虚拟机上运行的远程lisp。在slime manual中,我找到了这一行

  

有一种方法可以在没有ssh隧道的情况下进行连接,但是它具有让整个世界都能访问你的lisp图像的副作用,所以我们不打算谈论它

这似乎有点过时了。我认为在虚拟机上运行lisp将不允许任何其他人访问lisp。

我的问题是,如何在没有SSH的情况下连接到远程lisp?

[编辑]

我看到了问题here,但是当我转发端口时,slime无法连接到swank并给我以下错误

Lisp connection closed unexpectedly: connection broken by remote peer

1 个答案:

答案 0 :(得分:2)

您可以在虚拟机中使用quicklisp和swank,然后转发您在this tutorial之后打开lisp的端口或用于虚拟化的环境。

在虚拟机上的lisp中:

Welcome to Clozure Common Lisp Version 1.11-r16635  (DarwinX8664)!

CCL is developed and maintained by Clozure Associates. For more information
about CCL visit http://ccl.clozure.com.  To enquire about Clozure's Common Lisp
consulting services e-mail info@clozure.com or visit http://www.clozure.com.

? (ql:quickload :swank)
To load "swank":
  Load 1 ASDF system:
    swank
; Loading "swank"
.....
(:SWANK)
? (swank:create-server)
;; Swank started at port: 4005.
4005
?

然后使用slime-connect连接到您的虚拟机ip和您为swank-server选择的端口。

在其他情况下,对于ssh也很容易。如果你想使用ssh连接到一个远程机器中的一个端口,那么简单的方法就是使用像这样的-L选项

ssh user@ip -p22 -L local_port:localhost:remote_port

然后你使用slime-connect并连接到localhost和local_port

这是一个使用vagrant的设置,只连接到ssh到机器启动swank,但你可以自动化它。

1)Vagrantfile:使用转发端口和ip,以及roswell设置,你可以直接安装sbcl,这并不重要但是使用roswell很容易在一分钟内启动运行,这里重要的是快跑了。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/trusty64"

  config.vm.network "forwarded_port", guest: 4005, host: 4005

  config.vm.network "private_network", ip: "192.168.33.24"

  config.vm.provider "virtualbox" do |vb|
      vb.name = "lisp_host"
      vb.gui = false
      vb.memory = "1024"
    end

  config.vm.provision "shell",
  inline: "apt-get update
  if which apt-get > /dev/null; then sudo apt-get -y install git build-essential automake libcurl4-openssl-dev;fi
  git clone -b release https://github.com/roswell/roswell.git
  cd roswell
  sh bootstrap
  ./configure
  make
  sudo make install
  sudo ros setup"
  # SHELL 

end

2)流浪汉和流浪汉ssh进入机器内

3)ros run -Q#在安装sbcl之后你可以在REPL中使用quicklisp

4)准备swank

    2016-06-06 12:32:55 ☆ |ruby-2.2.3@laguna| Antonios-MBP in ~/learn/lisp/stackoverflow/vagrant-env
    ○ → vagrant ssh
    Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-79-generic x86_64)

     * Documentation:  https://help.ubuntu.com/

      System information as of Mon Jun  6 10:26:56 UTC 2016

      System load:  0.41              Processes:           84
      Usage of /:   4.7% of 39.34GB   Users logged in:     0
      Memory usage: 12%               IP address for eth0: 10.0.2.15
      Swap usage:   0%                IP address for eth1: 192.168.33.24

      Graph this data and manage this system at:
        https://landscape.canonical.com/

      Get cloud support with Ubuntu Advantage Cloud Guest:
        http://www.ubuntu.com/business/services/cloud


    Last login: Mon Jun  6 10:26:56 2016 from 10.0.2.2
    vagrant@vagrant-ubuntu-trusty-64:~$ ros run -Q
    WARNING: Setting locale failed.
      Check the following variables for correct values:
      LC_CTYPE=UTF-8
      LANG=en_US.UTF-8
    * (ql:quickload :swank)
    To load "swank":
      Load 1 ASDF system:
        swank
    ; Loading "swank"
    .
    (:SWANK)
    * (setf swank::*loopback-interface* "192.168.33.24") ;Important to listen throught the internet IP

    "192.168.33.24"
    * (swank:create-server)
    ;; Swank started at port: 4005.

4005

5)然后转到你的emacs环境:

煤泥连接

主持人192.168.33.24 港口4005

6)也许版本不同,接受它并继续

最后你可以使用它

我相信这个技巧对你有用,最重要的是swank :: loopback-interface