Wednesday, April 24, 2013

Running programs on server using Screens command

In my last blog I have discussed a way of connecting to your server PC at home from anywhere over the internet either on another desktop or on mobile device. I faced a problem of getting disconnected from the server when the phone signals were week on the move. So tasks like compiling of android source code was halted as soon as I get disconnected from the ssh client. Here is a way to overcome this problem which i found on the internet:

Login to the server using the ssh client and start a screen on the server. Now the shell will actually be running on the server rather than the client.
$ screen
Any other ssh client can now get connected to this screen and can view a copy the screen on their local shell. Even if the client gets disconnected due to any reason, the shell will still be running on the server.

To display the screens running on server:

jaiprakash@jaiprakash-Inspiron-1525:~$ screen -ls

There are screens on:

    2941.pts-4.jaiprakash-Inspiron-1525    (Wednesday 24 April 2013 11:15:52  IST)    (Attached)

    2811.pts-0.jaiprakash-Inspiron-1525    (Wednesday 24 April 2013 11:14:33  IST)    (Attached)

2 Sockets in /var/run/screen/S-jaiprakash.

To connect to a particular screen:
$ screen -x 2941.pts-4.jaiprakash-Inspiron-1525        --> to get a copy of the screen i.e. the shell running on the server.

if only one screen is running the simply use the command
$ screen -x

To disconnect from the screen (but process should be running on the server, in other words only to disconnect the client) use ctrl+A and ctrl+D or ctrl+A and type :detach
You would now be disconnected from the screen. but the process would still be running on the server.

I found it very useful for myself while using the ssh over internet. The screen command is very useful when the client gets disconnected abruptly. Hope this helps to remote developers :-P.

Reference: http://www.howtogeek.com/howto/ubuntu/keep-your-ssh-session-running-when-you-disconnect/

Sunday, April 21, 2013

Accessing my computer from anywhere over internet using ssh and port forwarding

1. Creating a free account on noip.com
Create an account on noip.com. You'll receive a confirmation mail from noip.com. Confirm the link.

Login to your account on noip.com and goto
My Account > Hosts/Redirects > Manage Hosts > Add a host
Chose a proper host name (ex: myserver) and a free domain (ex: zapto.org) from the available list and click on "Update host" when completed.

2. Installing the noip client on device to be accessed
Now Download the noip2 tool from the site under Hosts/Redirects > Download Client

Unzip the noip-duc-linux.tar.gz and install it
$ tar -xzvf noip-duc-linux.tar.gz
$ cd noip-2.1.9-1
$ sudo make install
$ sudo noip2 -C
[sudo] password for user: 

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com youremail@gmail.com
Please enter the password for user 'youremail@gmail.com'  ********

2 hosts are registered to this account.
Do you wish to have them all updated?[N] (y/N)  n
Do you wish to have host [myserver.no-ip.biz] updated?[N] (y/N)  n
Do you wish to have host [myserver.zapto.org] updated?[N] (y/N)  y
Please enter an update interval:[30]  
Do you wish to run something at successful update?[N] (y/N)  n

New configuration file '/usr/local/etc/no-ip2.conf' created.

To check the status:
 $ sudo noip2 -S

No noip2 processes active.
 
Configuration data from /usr/local/etc/no-ip2.conf.
Account youremail@gmail.com
configured for:
    host  myserver.zapto.org
Updating every 30 minutes via /dev/wlan0 with NAT enabled.

3. Port Forwarding of local wifi network to be accessible from anywhere over internet
Now we need to give access to wifi router to access ssh port from anywhere in the internet. I followed the tutorial from this site and it worked well for me. For my beetel wifi router on airtel network on the browser, login to wifi http://192.168.1.1
user: admin
password: password
http://portforward.com/english/routers/port_forwarding/Beetel/450TC1/defaultguide.htm

4. Changing default ssh port
So we are almost done now. However its recommended to change the ssh port from default (default port 22) settings while forwarding it to internet for security reasons.

To change the ssh port:
sudo vi /etc/ssh/sshd_config and change the following line to custom port address

 ListenAddress 0.0.0.0:44812 

--> make sure that this port number matches the port address described in the portforward.com tutorial.

Also you can make your device ip static. For Raspberry pi, i have mentioned the modifications in the comments of previous post.

5. Accessing over internet using ssh client
Now, to access the device from anywhere from the internet. I am using the ConnectBot client in Android to access my device remotely.

 ssh username@myserver.zapto.org:44812

--> you should be connected to your device now. Cheers, now I can access my device from anywhere using my android phone :-).