connect emacs cider to vagrant host clojure project - emacs

I am trying to use vagrant, Clojure and emacs together. Specifically, I can't connect cider to my vagrant machine.
It works locally, when I run cider-jack-in inside my project.
But I don't know what are the steps to do that inside the same project (synced via vagrant shared folders) on the vagrant machine.
Here is my attempt so far :
ssh vagrant, then cd my-project-dir, then lein repl
in emacs, cider-connect, input vagrant#192.168.50.50, port 22
I get the following message :
SSH port forwarding failed. check the nrepl-tunnel buffer.
Inside that buffer :
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 Privileged ports can only be
forwarded by root.
Process nrepl-tunnel exited abnormally with code 255
Ho do I run that as root ? Is it really the problem ? Should I use another port ? Do I have to put something specific in my Clojure code to enable that ? The directions given here are a bit unclear to me.
Note : it differs from this question because emacs runs on the host machine, not on the vagrant machine
Edit :
Here are the detailed steps I did, thanks to #Shlomi's answer :
Edit .ssh/config by adding the following (edit IP according to you Vagrantfile) :
Host vagrant
HostName 192.168.50.50
Port 22
User vagrant
ForwardAgent yes
in the host, start my project with lein repl. Pay attention to the port in the message : nREPL server started on port 42018 on host 127.0.0.1 - nrepl://127.0.0.1:42018
in emacs, M-x cider-connect, input vagrant, your password and the port noted by the previous lein command.
That's it :)

It seems the port you are using is the ssh port instead of the nrepl port.
The way I usually use emacs for remote access is through tramp:
Add an entry in .ssh/config for your remote host, say vagrant
In emacs, cider-connect, input vagrant
In recent versions of cider, it will automatically find all active nrepl sessions on that host, and show their project name and port, so select the right one, and you should be able to start working.

Related

How to set a remote connection to a Vagrant container using "Visual Studio Code Remote - SSH"?

I'm exploring the new set extensions called VSCode Remote Pack and I want to connect to a Vagrant container using the Remote Container extension. Using a Windows 10 OS, how could I do that?
I tried the extension but it requests me to have Docker installed, what I suppose from that is that it only works for Docker containers. But I wonder if somebody have already managed to connect to a Vagrant box.
This are the docs from the extension: https://code.visualstudio.com/docs/remote/containers
VS Code Remote containers currently only support Docker (its implementation executes docker commands). Please open a feature request if you would like to see other tools supported.
As an alternative, you could try using Remote SSH to connect to vagrant containers. That should work but will require some extra container setup
Sorry for updating this so late.
The solution was pretty simple, as #MnZrk commented, what it needs to be done for setting up the connection is the following:
Run vagrant ssh-config > some-file.txt. This will generate a file with the configuration to run using SSH. Here an example of that file:
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile C:/Users/User/project/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes
ForwardX11 yes
Notice that the host name is default, you could rename it to whatever you want so you could identify it more easily.
Copy the content of some-file.txt inside your SSH configuration file. This file could be edit directly from vscode by pressing F1 and writing Remote-SSH: Open Configuration File..., then you select the file you use for ssh configuration. After that file opens, just copy the content of some-file.txt there.
Finally, just press again F1 and type Remote-SSH: Connect to Host..., choose the connection with the host name default or the want you wrote in the first step, and that's all.

How to Clone a Git repository in Eclipse with non standard port on osx

My context:
My Git repository is on a Ubuntu Server where I changed the ssh port
On my client side (OS X) the syntax ssh host:port doesn't work
Using shell, the solution is simple: ssh host -p port
But, I'm using Eclipse and I need to clone my project from eclipse
When I used the standard port (22), the eclipse wizzard 'clone a git repository' was working fine but since I have changed the port, The wizzard failed:
I fill the following fields:
Host
Repository
Path
Protocol (ssh)
Port
user
password
I see in Eclipse window that URI is created with the syntax:
ssh://user#host:port/repository
so, as this syntax doesn't work in shell, I suppose it is the reason
I try this workaround:
Create a host in /.ssh/config
with an alias and my new port
And use the alias in the host field of Eclipse
It doesn't work and it seems Eclipse does not take in account my config file
After many google researches, I finally try asking a new question here
Many thanks for your help
Having just spent 3 days beating my head on the wall about this, I'm gonna answer you even though I'm a few years too late to help probably.
I noticed on the firewall of my git server that Eclipse was hitting port 22 no matter what port I specified in the dialog. After confirming I could manually connect with
ssh -i ~/.ssh/git-privkey -p 3215 git#git.example.com
And you should get connected and welcomed, then disconnected.
I set up my ~/.ssh/config file like so:
Host git.example.com
Hostname git.example.com
Port 3215
User git
IdentityFile ~/.ssh/git-privkey
It is important to have the Host value match the host that Eclipse will connect to, which will also match the Hostname value. If you don't do this, the host-specific configuration won't take effect.
Now test by connecting with just
ssh git.example.com
And you should get connected and welcomed, then disconnected.
Now, in Eclipse, simply copy/paste the SSH URI and leave the default port 22 set. Username should come in from the URI (default is git).

Tramp mode in emacs using ssh config

I think this is very basic question in using tramp, but it doesn't work for me.
I have my ~/.ssh/config file that points to my amazon ec2 machine
Host amazon
Hostname xxxx.amazonaws.com
Port yyy
User me
IdentityFile ~/.ssh/ubuntu
ForwardAgent yes
I can easily do ssh amazon from my terminal and I go to amazon ec2 (so my config is right), but in emacs
I do:
C-x C-f /ssh1:amazon:
I always get this error
In Aquamacs:
Process *tramp/ssh1 amz* exited abnormally with code 255
In Emacs:
tramp: Opening connection at amz using ssh1...
tramp: Waiting for prompts from remote shell
tramp: Waiting 60s for prompt from remote shell
tramp-process-actions: Login failed
I also have other ssh configurations that they ssh to my virtual boxes on my local machine and they have the same problem.
I really appreciate any help.
One thing that's worth trying is using the sshx connection method. That makes tramp try to avoid any non-standard shell configuration on the remote host.
Like this:
C-x C-f /sshx:amazon:
The tramp method ssh1 forces ssh to be run in ssh v1 protocol mode with the parameter -1. ssh v1 has known weaknesses and is insecure. Hence a lot of sites disable the ssh v1 protocol.
You can verify this from the shell with ssh -1 me#xxxx.amazonaws.com.
Try other tramp connection methods like ssh, sftp or scpx. You can see all pre-configured connection methods with C-h v tramp-methods.
If Moritz Bunkus's answer doesn't solve the issue, then you can configure the verbosity of tramp's output with
M-x customize-variable RET tramp-verbose RET
In particular, level 6 is "sent and received strings" which might help you to determine whether the "Waiting for prompts from remote shell" is because it isn't receiving a prompt pattern that it recognises, or because of some more critical failure.
If it's simply receiving a prompt it doesn't recognise, then you might look at customizing the tramp-login-prompt-regexp or tramp-shell-prompt-pattern variables.
(Of course if your ssh agent is working correctly, then login prompts shouldn't be relevant.)
If you're running Emacs in Windows, then also see these Q&As:
Emacs: Tramp doesn't work
Using tramp with EmacsW32 and cygwin, possible?

How to set nodejs debug mode don't listen 127.0.0.1

I want to remote debug the nodejs program in Eclipse. I start the node script with the debug option.
$node debug script.js
But I can't connect to the node in Eclispe. When I netstat the node's TCP port. I found that node only listen 127.0.0.1 in debug mode. So I can't connect it from different computer.
But I can't find any startup options that can change to listen to any address.
Anyone know to make it listen to any address to remote debug in other computer?
if anyone else stumble upon this: you can set the node debug to any address as you set the port
node --debug=169.168.1.2:5858 app.js
if that would be the ip of your remote machine or even better to every machine
node --debug=0.0.0.0:5858 app.js
but please be aware that the 2nd option should only be used if you are debugging in your own private network as you open it up for everyone
This is what I do in linux Debian:
install balancer
sudo apt-get install balance -y
then create a route in balancer to reroute your 5858 port to 5859
balance 5859 127.0.0.1:5858
start your app
node --debug app.js
now you can access it from everywhere on port 5859
I'm looking into V8 code that goes through deps/v8/src/debug-agent.* down to deps/v8/src/platform-posix.cpp (for linux) to POSIXSocket::Bind method and it can't seem to have any option about this (unless I'm missing something).
I bet you either hack it and recompile node or you'll need to build a small proxy beside your node process.
Here's a great tut on debugging nodejs from eclipse. Note at the bottom there is a script the author uses to forward localhost:5858 to the remote server's 127.0.0.1. You could also just use an SSH tunnel.
So, to summarize:
start your script with node --debug app.js
configure eclipse as if you were debugging locally
use the node_g script or configure an SSH tunnel
go on vacation now that your code is bug-free
to debug nodejs remotely over SSH session do:
1. install balance on Linux: https://balance.inlab.net/overview/
2. run the command: balance -df 8585 127.0.0.1:5858 > /tmp/balance.out 2>&1 &
3. ssh to your remote Linux box (tunnel will be created 8585 > 5858 > nodejs)
4. run your node script on server: node --debug-brk --nolazy ./myNodeApp.js
5. kick off debug session in WebStorm alt-d to port 8585
now you are remote debugging securely over SSH session

Running a GTK+ application on a Linux machine, from Windows

I have Installed GTK on a Linux machine.
I am connecting To Linux Machine from a Telnet Session to compile the GTK programs
From A Windows Machine. I am using Cygwin on Windows Machine. but i am not able to see
GUI output of my GTK program on my Windows Machine.
When i run program from my terminal i get this error:
(helloworld:22576): Gtk-WARNING **: cannot open display:
I tried solutions from every answer posted, but no use now i am getting following error:
$ ./helloworld
Invalid MIT-MAGIC-COOKIE-1 key
(helloworld:22710): Gtk-WARNING **: cannot open display: 172.25.0.161:0
and i am getting following error on my Cygwin console:
client 6 rejected from IP 172.25.0.91 Auth name: MIT-MAGIC-COOKIE-1 ID: -1
You must set the DISPLAY variable in your telnet session to the IP address or DNS name of your Windows machine and append ":0"
export DISPLAY=windows.your.domain:0
And you must start an X server on the Windows machine (comes with Cygwin but you must start it).
You need to run the X window system (install with Cygwin) on your Windows-box and enable remote connections (probably with xhost). Set the DISPLAY-variable on your Linux-box to the address of your Windows-box and :0, as such:
export DISPLAY=192.168.1.123:0
I can recommend using ssh rather than telnet, for security reasons. In this case you do not need to enable remote connections with xhost, and you do not need to set the DISPLAY-variable. You only need to enable X forwarding.
You should install X-server on your windows machine and make sure you have DISPLAY set to yourmachine:0 or something like that. Or better yet use ssh instead of telnet (e.g. putty) and tunnel your X connection. You'll have to do a bit on your own research, though, because the complete answer would be a lengthy one.
Install an small X server on Windows XMing32, then run it, use putty as a console client, and check "X11 Forwarding" in Connection->SSH->X11.
Unfortunately, X11 Forwarding is not available through Telnet, you must run a SSH server on the target Linux and connect through SSH. (See if /etc/ssh/sshd_conf requires enabling X11 Forwarding too).