How properly set up remote server through nested tmux sessions - ssh

I'm trying to set up my remote server so that I can ssh in, start a python process, then detach, logout, and shut down my local computer. I've been able to do this before using nested tmux sessions:
local host - tmux - ssh into remote
remote host - tmux - start python process - detach remote tmux
"exit" from the remote host and close down the remote session.
This was working just fine for me. I can detach the remote session, close down ssh, shut down everything locally, then boot up, relogin via ssh, and then reattach the remote tmux session.
My issue is that now my remote server is in a lab setting (I now run a lab with multiple people, whereas before it was just me). I don't want different users to be logging in when there is a process running. I'm trying to limit people not knowing a server is in use, logging in to start a process, and disrupting (or diverting memory from) a process being run by another user.
My way around this was to setup a generic login user and password that everyone in the lab uses. Then, for that generic user, I edited the /etc/security/limits.conf file to have a maxlogins of 1 for that user. While this works in practice (no other user can log in when one is already logged in), it means I can no longer RE login.
Now I get:
local host -> tmux -> ssh into remote
remote host -> tmux -> start python process -> remote detach
remote host -> exit ssh
local host -> tmux -> ssh into remote:
Too many logins for 'lab2'.
It appears that, with the process still running, the login stays active and I am trying to 'relogin' to an ongoing login session. But since I've set the max to 1, I cannot. Does anyone have any advice for how to fix this?
Thanks!

Related

Mobaxterm: how to keep sftp connection alive?

I kept ssh connection alive following this post:
Mobaxterm: how to prevent ssh session from exiting?
I managed to keep ssh connection alive but sftp connection on the left panel keeps disconnecting after a certain time while ssh is still alive and I have to every time reconnect the sftp. Sometimes, reconnect button on the left panel doesn't even work and I have to exit the shell and restart the ssh session again. What I want to achieve here is to keep the sftp connection (graphical browser on the left panel) alive in addition to ssh. Thanks.
I have the same problem, then I asked MobaXterm support and they gave me this answer:
You should update the SSH browser type to "SCP enhanced speed" mode. For this you can go to the settings of your SSH session, go to the advanced SSH settings and in the SSH browser type drop list choose SCP (enhanced speed).

Start ssh in background on OpenWRT via ssh

Good morning,
I recently moved to the universities dormitory and they have a specific way how to enable the internet connection. They require me to connect to the network via Cable, set up a specific static IP and then enable the Internet connectivity by ssh'ing to a special IP with my own account and password. As long as this ssh session is open, the internet connection is active. If closed, then it is lost.
My setup right now is like this: I connected an OpenWRT-based TP-Link router (TP-Link TL-WR841N/ND v9) to the dormitory's network. My devices are connected to the router's wifi.
To get an internet connection, right now I am doing this:
connect to the router via ssh
connect to the internet via ssh on the router
So basically I am having two running ssh sessions. This is quite annoying as my laptop has to be on and running if I want to have an internet connection. My idea would be to keep the ssh session on the router running all the time. For this, however, I would need to keep the ssh session running in the background of the router.
Starting the second SSH with & skips the password entry. So I have to get it back to fg, enter the password and the process is back in the foreground. CTRL+Z appears to be not working on OpenWRT.
The only thing which could skip the password entry would be connecting with a key, but the server I am connecting to is not allowing that.
Anybody having other ideas?
You can do multiple things to solve this
Create a script(which will connect to internet) in router and schedule it in a cron job
If nohup/tmux is available in the router, execute the commands with them so that they keep alive when the ssh session is terminated.
So, looks like I solved the problem.
As nohup/tmux is not available on the router, I had to find an equivalent. Fortunately, screen is available for my router. With screen, you can start the ssh for the internet in a separate screen. When it's running, you can simply detach the screen and close the ssh to the router.
The ssh-connection for the internet will continue running in the background of the router.
The only drawback is that I have to reconnect manually, as soon as the router restarts.

How do I keep my daemon open through ssh tunnel?

I have been working on a http server which accepts connections and then based on the host name, loads up the right project from .so, generates the page the client is asking for, then sends them back.
Now that I have several working projects, I am interested in making them available to others but here is my problem :
I am connecting to my dedicated server through ssh, and starting my daemon from there, but after a while, the pages are no longer accessible because my program is no longer running.
I also get kicked by the server after a while. I wonder :
How do I keep my server running ? Does the fact that I keep getting kicked out by ssh after a little idle time explains why my daemon is being shutdown ?
Thanks in advance to whoever will be able to give me some element of answer.
When your SSH session times out SIGHUP was sent to the sub-processes forked from the current interactive shell. That's why the processes were terminated (server no longer running).
To avoid idle SSH connection being kicked by the server, set the ServerAliveInterval to send a request for response from server (e.g. ~/.ssh/config)
Host *
ServerAliveInterval 30
To avoid shell sub-process termination, refer to
https://askubuntu.com/questions/348836/keep-the-running-processes-alive-when-disconneting-the-remote-connection/348921#348921
https://askubuntu.com/questions/349262/run-a-nohup-command-over-ssh-then-disconnect
In short, there are 3 options:
nohup
disown / setsid
start the servers in CLI in tmux or screen session on the server
NOTE: If the server instances are already properly daemonized, try looking at monit or supervisord to keep them running ;-D

SSH forward all X connections from DISPLAY

Right now at work we have a login machine where our home area is located and all tools are run on the compute farm, to run in GUI mode I believe the job is submitted to the farm and the selected machine will run the command with the DISPLAY variable set to what was in our local environment. This seems to only work with vnc right now, is there anyway I can use SSH and use a valid DISPLAY setting?
If you establish a SSH session with X protocol tunneling, you can query the value of the DISPLAY environment variable at the remote side. For example:
client$ ssh -X server
server$ echo $DISPLAY
localhost:17.0
This value is going to be different for each SSH session.
If I'm understanding your environment correctly, you'd need to pre-establish ssh sessions to all of the node in the compute farm. Then, when the job runs on a particular compute farm node, it'd have to set the particular DISPLAY variable that goes back on the ssh session you pre-established.

Can the GUI of an RDP session remain active after disconnect

I'm running automated testing procedures that emulates keystrokes and mouseclicks 24/7.
Although it runs fine locally, on an RDP session it stops running once minimized or disconnected. Apparently, the GUI doesn't exist if you can't physically see it on the screen.
There is a registry work-around for keeping the GUI active for minimizing the window, but I know of no way to keep it alive after disconnect.
Ideally, I would have this run on the server Windows console session which would not care about being disconnected but in a hosted environment (I tried Amazon and Go Daddy) there is no way to access the console session.
Does anyone know how I can get around this? Basically any solution that allows me to run my application on a VPS. I need the reliability of a host but the flexibility to run it as if I was sitting right in front.
Yes, you can.
There are two types of sessions in Windows: The "console" session which is always active, and there can only be a max of one of, and "terminal" sessions, a la RDP. Using "rdpwrap" on Github, you can have an unlimited number of terminal sessions.
RDP sessions will become "deactivated" when there is not a connection to them. Programs will still run, but anything that depends on GUI interaction will break badly.
Luckily, we may "convert" a terminal session into a console session instead of disconnecting from Remote Desktop normally by running the following command from inside the terminal session:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon.exe %%s /dest:console)
This will disconnect you from the session, but it will still run with full graphical context. This answers your question. You can reconnect to it and it will become a terminal session again, and you can do this infinitely. And, of course, autohotkey works perfectly.
But, what if you need more than one persistent, graphics-enabled session?
To get an unlimited amount of graphics-persistent sessions, you can run Remote Desktop and start terminal sessions from within the "main" session described above. Normally Remote Desktop prevents this "loopback" behavior, but if you specify "127.0.0.2" for the destination, you will be able to start a terminal session with any number of the users on the remote machine.
The graphics-persistentness will only be present on terminal servers if they are not minimized, unless you create and set RemoteDesktop_SuppressWhenMinimized to 2 at the following registry location:
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client
With this you can get an unlimited number of completely independent graphics-persistent remote sessions from a single machine.
This could be a workaround, altough I have not tried it myself and it involves having another machine
Let's assume that at the moment you are creating a session to myserver.com
Local Client ----> myserver.com
Instead of doing that, you could try having a separate server (let's call it myslave.com) and use that to establish a session
Local Client ----> myslave.com ----> myserver.com
Then if you disconnect the Local Client ---> myslave.com session the GUI of the session between myslave.com ----> myserver.com should remain active.
It will work only if you are connected to the console session of myslave.com.
I found a similar way. I had same problem, i downloaded rdp wraper which allows you configure multiple session rpd server and one tool which is included (rdpchecker.exe) allows you connect to localhost so you can connect to your server from your server and you dont need that middle client.
This could be a workaround, altough I have not tried it myself and it involves having >another machine
Let's assume that at the moment you are creating a session to myserver.com
Local Client ----> myserver.com
Instead of doing that, you could try having a separate server (let's call it myslave.com) and use that to establish a session
Local Client ----> myslave.com ----> myserver.com
Then if you disconnect the Local Client ---> myslave.com session the GUI of the session
between myslave.com ----> myserver.com should remain active
If you are using a windows server you don't even need another machine.
1) Connect to the server with the remote desktop connection (#con1).
2) Create a new alias for your server system like "127.0.0.2" in Windows\System32\drivers\etc\hosts .
3) Now establish a new remote desktop connection from your windows server (in #con1) to itself (#con2).
4) Finally start your GUI needing application e.g. UI-Path in #con2 and then close #con1.
I ran into the same problem and noticed that using VNC (TightVNC) to take over the remote machine seems to solve the issue. I guess VNC uses the console screen. Once activated and logged-in it stays logged-in, also after a VNC disconnect. Make sure that the screen never turns off in the power options.
Take note that keeping the console logged-in on a VPS is in general not recommended.