Interesting stuff.  Yeah, the main thing that got me into libssh was being able 
to create a program that would be accessible over SSH, kind of like how people 
used to access games and other software over telnet.  A good modern example is 
"SSH Tron", where someone "hosted" a multi-player Tron game on his/her server.  
S/he used Go, which is not a language I know (or really want to know, lol), so 
I've been looking into alternatives.  Of course for anything other than a game, 
using sshd and a key beats the heck out of username/password, and sshd handles 
that nicely too... and yes I like my admin user to still have access to the 
standard Bash shell (lol)... so I guess that is the way to go for my purposes.  
Thanks for explaining the pros and cons, that was what I was trying to figure 
out.  I don't need to get granular at all with the details of the SSH session, 
just that it exists and that users are not able to get out of my program into a 
shell.  So yeah, usermod command with a chroot "jail" looks like it would work 
perfectly for that.


Sent with Proton Mail secure email.

On Friday, January 19th, 2024 at 3:52 AM, Jakub Jelen <jje...@redhat.com> wrote:


> Hi,
> it mostly depends on the granularity you need in the control of the
> SSH session or a limitation of the target system. If you just want
> some CLI program to execute remotely, wrapping it in some existing ssh
> server (openssh) as a forced command is much less error-prone and much
> less work. Its also useful if you still want to keep the standard SSH
> service running on the same machine on the same port for management.
> 
> On the other hand, if you need more control of the sessions,
> authentication, transfers, users, implementing ssh server using libssh
> might be your best bet. Its also significantly smaller in regards to
> LoC, that the whole OpenSSH, which can limit the attack vector. libssh
> can also run with much smaller cryptographic libraries than OpenSSL,
> which might be useful for smaller systems/ You can tune many things
> using configuration in OpenSSH, but there are limits. In libssh you
> can implement callbacks for most of the stuff handling incoming
> connection, callbacks, authentication, various requests, which is not
> possible with OpenSSH.
> 
> Jakub
> 
> On Fri, Jan 19, 2024 at 3:31 AM The Geek on Skates
> geekonska...@protonmail.com wrote:
> 
> > Good evening and happy Friday! :)
> > 
> > What I mean, process-wise, is something like:
> > 
> > At a terminal, user runs ssh gameorwhatever@myserver
> > The request goes to sshd, with the key or password or whatever, and the 
> > user is in.
> > The "gameorwhatever" user's shell is set to /path/to/some/program, and a 
> > chroot is in place, so the user uses the game or whatever, and when s/he is 
> > done s/he is disconnected from the server.
> > 
> > On the other hand, the other way (and the way I was originally thinking of 
> > going for this project), was:
> > 
> > At a terminal, user runs ssh gameorwhatever@myserver
> > The request goes to /path/to/some/program, which hopefully handles the key 
> > stuff correctly, and hopefully does all the sending/receiving correctly, 
> > and all that.
> > 
> > So I've been thinking, just out of curiosity, why (and when) would I choose 
> > one strategy over the other? If I want to set up something other than a 
> > full-on OS shell, and make it accessible over SSH, what would be the pros 
> > and cons of using libssh to create a server program vs. creating a user 
> > with minimal access to stuff, doing the whole chroot thing I don't fully 
> > understand (YET), and just changing that user's "shell" to the new program? 
> > It seems to me that way would eliminate a lot of the learning curve (and 
> > room for noob error and easy cracking). You wouldn't have to do any of the 
> > networking stuff yourself, it would be like creating any other command-line 
> > app (and assuming you know about things like buffer overflows etc. it's 
> > pretty easy to create terminal apps that don't have gaping security holes 
> > in them, lol). And if users accessed it with the standard ssh client, your 
> > program would be what reads any parameters people might try (like "ssh 
> > user@server /bin/bash" or whatever), so it's not like there's an easy way 
> > for someone to get around your program into a Bash shell. That, compared 
> > with implementing a server "from scratch" (well not really from scratch - 
> > using libssh I mean) just sounds so much more error-prone, if you don't 
> > know all the intricate nuts and bolts of how SSH is supposed to work under 
> > the hood. I'm just kind of curious about your thoughts on the advantages of 
> > doing it one way vs. the other. I know C and C++ really well, but apart 
> > from some minimal tinkering with the sockets APIs idk much about how to 
> > work with SSH (beyond the obvious - I can SSH into servers, create keys and 
> > stuff like that - but even the SSH setup I always have to re-research every 
> > time lol). Or maybe I'm just overthinking things. :D
> > 
> > Don't get me wrong - I still want to learn to use libssh (I've heard of 
> > some cool things people are doing with their own clients... idk why u would 
> > necessarily need/want that, but real-time communications over SSH does 
> > sound awesome). I'm not trying to say one approach or the other to my 
> > specific question is better - I'm just interested in getting your thoughts 
> > on the best way to "host" (for lack of a better term) a command-line app 
> > over SSH.
> > 
> > Anyway, hope you guys have a nice night (or morning), and looking forward 
> > to reading your two cents on the subject. :)
> 
>

Reply via email to