14 ms·
Show HN: I made Devzat – It's like Discord but in the terminal, over SSH
Run `ssh devzat.hackclub.com` to try it out! The repo is here: https://github.com/quackduck/devzat (golang).
It has markdown and emoji support, DMs, channels, and it can show images too. You can send code, and it gets syntax highlighted (you can change the theme). You can ping people like so: @user and it sends them a \a, which should play an audible sound if the terminal allows it. There's inbuilt games and rainbow names and a lot of other small things I don't remember right now.
You might find the auth system interesting: it's based on a hash of ssh pubkey (bans use that and a hash of IP, so it isn't so easy to get around a ban)
Also an interesting issue: bots that go around trying to brute force ssh into random IPs with common usernames. My current solution is banning if rapid successive joins are detected.
- nog0x7cd 5y agoLooks cool, joined and made friends with a french dude. Totally forgot how cool irc-like minimalism can be sometimes.
- quackduck 5y agoThanks lol, that makes me smile
- makeworld 5y agoI just get "Permission denied (publickey)". The README says to just run ssh-keygen, but I already have an RSA key. Does this server only support ed25519 or something?
- colbyhub 5y agoUsing the following helped me join: ssh devzat.hackclub.com -p 443 ... to get around my firewall!
- kerblang 5y agoI think you are correct. Was able to get in by first doing `ssh-keygen -t ed25519` to create new private/public keys (be careful not to overwrite ssh keys that you are already using for other things!). RSA support is being phased out in various places.
- ThePinion 5y agoJust confirming that I had to do this first and it started working. It was originally giving me the Permission Denied (publickey) error.
- hinkley 5y agoThis is your week to learn about .ssh/config files.
- quackduck 5y agothis is mostly a certain crypto lib's fault (maybe stdlib, let me check)
- thefreeman 5y agoit's a known gossh issue I believe
- quackduck 5y agoThat's the one
- hinkley 5y agoUgh. That’s not specific to one language either. Changing CA certs or enabling OCSP is often a case of configuring the same thing in several places or multiple libraries. Identity certs doubly so. If memory serves I spent more time on that than the rest combined.
- geoah 5y agoLove the fact that there are currently more people on the server than likes on this post :D You might wanna take a look at https://github.com/charmbracelet/bubbletea https://github.com/charmbracelet/bubbletea ad specifically https://github.com/charmbracelet/soft-serve https://github.com/charmbracelet/soft-serve for v2. IRC style commands that are only sent to the sender would also be nice as current version is a bit spammy with help and user commands.
- quackduck 5y agoidk if i wanna make this a TUI tbh, i've seen those libs before. I don't think they support output to an io.Writer / term.Terminal though
- netizen-936824 5y ago+1 for charm bracelet, those libs are great. Plus the website is amazing
- mixmastamyk 5y agoWhat is discord? Yes, I’ve heard of the company, but haven’t used it. You might do better with “chat” as more folks know what that is.
- bovermyer 5y agoI imagine the selection of people who would use Devzat's feature set are at least passingly familiar with Discord. People who aren't familiar with Discord but that would still use text chat over SSH are probably more likely to use IRC.
- drdaeman 5y agoI still remember when Discord was primarily a voice chat (later, with screen sharing features too), essentially a replacement for TeamSpeak/Mumble/Ventrilo, not IRC or XMPP MUC. Looks like those days it's more of a Slack/Gitter/IRC alternative.
- charcircuit 5y agoDiscord is one of the most popular chat platforms. Imagine IRC, but more modern and the developers actually care about UX.
- fouc 5y agoI struggle to use Discord precisely because of the UX. and I say that with years of IRCing in a terminal with a black background. I vastly prefer Slack's theme. Discord's dark & light themes are too hard on my eyes. They feel like the designers have never worked on a 13" MBP and only large monitors w/ non-retina displays.
- pmarreck 5y agoLOL @ the developers caring about UX. I can't count how many times I tried to find some functionality only to have to google how to do it.
- charcircuit 5y ago
- alucardo 5y agoPost a video of a demo of it. Might drain attention :)
- bovermyer 5y agoI like it. A few observations: * Hangman doesn't give you credit for all instances of a letter when you guess it * Starting a new game of hangman (maybe also TTT?) interrupts/erases the previous one, if there's one in progress * Images can be anything and aren't filtered - troll users could present some nasty stuff * User settings don't persist (e.g., nickname)
- rhacker 5y agosixel appears to be too large... it would be better if it made small outputs
- quackduck 5y agoI'm not good at handling user data so I haven't added persistence, could in the future IDK how to filter images oof Wdym by that first point? (Hangman is case sensitive)
- bovermyer 5y agoFor Hangman, I started a game with the word as "panda." There are two "a" characters. The person who guessed "a" only revealed one of them. The rules of Hangman are that every letter guessed reveals all instances of that letter in the word.
- quackduck 5y agothat's super strange, that usually works
- odonnellryan 5y agoLots of fun, but the issue with the images (is this the problem?) needs to be fixed. And the command issue where everyone sees the output - I wonder how hard that would be to address. Neat app!
- quackduck 5y agoEveryone seeing output is an intentional choice. What's the problem with images?
- hdb2 5y agoI really dig this, but if I issue a command like cd, the output should only be showed to the person who issued the command. but this is really fun! nice job!
- quackduck 5y agoThat was an intentional choice
- buzzert 5y agoWhat if you want to just say one of the commands? IMO, there should be some sort of prefix (like '/') before commands to disambiguate.
- quackduck 5y agoany prefix would make a command not a command, kinda like how people on twitter add a random character before a tweet starting with a user mention
- humanwhosits 5y agoI really like it, it seems like a great alternative to slack for a team that just wants non-notification chat
- quackduck 5y agoHeck yeah, feel free to email me updates (you can find my email on my github) if you decide to try it out
- rav 5y agoAfter living through Google Chat going down while handling a server incident at work, I created an internal, encrypted chat system in order to have an alternative in case our regular communications channel is down. However the actual chat part of it is very barebones with a simplistic JSON-based protocol and a simplistic IRC-like interface - quite unlike devzat. I wonder how hard it would be to untangle the authentication and transport bits from devzat and plug in our own proprietary auth/transport.
- quackduck 5y agoI don't think it wouldn't be hard, since there isn't really much auth (just some key and IP stuff), so you'd mainly have to add your own. Feel free to email me (my email's on my github) with updates / questions if you do decide to try it out!
- adhesive_wombat 5y agoWould an internal Matrix homeserver meet that need?
- dsr_ 5y agoOr an internal IRC server. Or a Zulip server. Matrix is overkill if you're never going to federate it.
- exabrial 5y agomake sure one's ssh-agent forwarding is off when connecting to strange hosts :)
- arsome 5y agoAlso make sure you're not exposing an identifying public key to a service you intended to use anonymously.
- jart 5y agoAre you telling me that everyone who clones a repo from GitHub via SSH is in fact authorizing GitHub to use their private key? Why hasn't anyone made a slick web page with a catchy name like AuthBleed or SecretAgent to describe that one yet?
- exabrial 5y agoThe default OpenSSH settings are safe. You have to explicitly whitelist servers or domains in `.ssh/config`, but if you were to blatantly blast: Host * ForwardAgent yes The scenario you talk about is certainly possible, especially since OpenSSH does not require a "tap" for each authorization once the agent is unlocked. (Side note: this is one thing hardware u2f keys absolutely got correct).
- heyitsguay 5y agoIs this working now? I logged on and can't do anything and nothing seems to be happening, i just get a snippet of text starting "38m earlier"
- 0xbadcafebee 5y ago> It's like discord but in the terminal, over SSH so it's IRC?
- quackduck 5y agoidk, i didn't exist when IRC was the hip thing
- 0xbadcafebee 5y agoYou might wanna check it out. Things like code quotes and expand/collapse would be cool to add to an IRC client. I think some clients already support emoji as it's just UTF8? It's common for IRC users to use IRC from a terminal client on their desktop. If they have a remote server they'll ssh into a box and use their terminal client there. They'd also use a screen session to keep their IRC client running 24/7 so they can keep receiving messages. Or they'll keep an eggdrop bot on a server somewhere, which is basically a sorta IRC proxy that they connect to from any IRC client and can keep their user online in the background. Here's some stuff on IRC: https://github.com/ircdocs/modern-irc https://github.com/ircdocs/modern-irc | https://ircv3.net/ https://ircv3.net/ | https://wiki.wireshark.org/IRC https://wiki.wireshark.org/IRC Looks like there's some discord<->IRC gateways: https://github.com/sjwhitak/discord-irc-matrix https://github.com/sjwhitak/discord-irc-matrix https://github.com/qaisjp/go-discord-irc https://github.com/qaisjp/go-discord-irc https://discordrc.com/ https://discordrc.com/ Here's some IRC stuff in Go: https://github.com/khlieng/dispatch https://github.com/khlieng/dispatch https://github.com/ergochat/ergo https://github.com/ergochat/ergo https://github.com/go-irc/irc https://github.com/go-irc/irc https://github.com/search?q=go+irc https://github.com/search?q=go+irc
- quackduck 5y agoInteresting. Btw, by support emoji I mean things like ":rocket:", ":fire:", etc do what they should: using emojis by copy pasting or using a system emoji picker gets tiring
- deleted 5y ago
- boxingrock 5y agoi knew the name looked familiar... there's already a hackthebox out for it: https://www.youtube.com/watch?v=QEgtbzS1Pyc https://www.youtube.com/watch?v=QEgtbzS1Pyc
- quackduck 5y agoI know! An longtime user of Devzat made it
- boxingrock 5y agothat's awesome. i recently built an ssh management interface using some of the same libraries, i'll be sure to check it out.
- quackduck 5y agocool
- wferrell 5y agoThis is fun. Well done!
- quackduck 5y agoThanks, I see you had the same username on Devzat
- jawngee 5y agoBack in the mid 90's, I used to hang out on what was called vrave, a telnet based chat hosted at hyperreal.org (Apache's' Brian Behlendorf's rave archive/culture site). This is definitely making me nostalgic for it.
- RyJones 5y agoStrange. I reported to Brian for years. He’s moved on, for now, I guess?
- jawngee 5y agoI think most ravers from that time period have moved on. :)
- quackduck 5y agoI'm glad it reminds you of something you liked :)
- crucialfelix 5y agoMy first Unix account was on hyperreal.org, given to me by Brian Beulendorf so I could put up the Dance Music Business Resource. The same machine also hosted apache source code repositories. Oh, hi Jon! It's Chris, from the 90s
- jawngee 5y agoI used to live in your basement!
- paskozdilar 5y ago> Also an interesting issue: bots that go around trying to brute force ssh into random IPs with common usernames. My current solution is banning if rapid successive joins are detected. I should've read this before trying to connect 100 usernames in parallel.
- deleted 5y ago[deleted]
- quackduck 5y agoLMAO, send me your ID and I'll unban you (if you got banned)
- anfogoat 5y agoReally like this, great work! For those who aren't aware, there are more of these: ssh-chat[0][1] and sshtalk[2]. [0]: https://news.ycombinator.com/item?id=8828543 https://news.ycombinator.com/item?id=8828543 [1]: https://news.ycombinator.com/item?id=8743374 https://news.ycombinator.com/item?id=8743374 [2]: https://news.ycombinator.com/item?id=15829206 https://news.ycombinator.com/item?id=15829206
- GOATS- 5y agoI've just spent an hour on here when I should really be sleeping. Reminded me a lot of public IRC channels back in the day, surprised how fun it was to hang out with everyone. :)
- hprotagonist 5y agothose never left.
- eezurr 5y agoIm not a command liner but was curious to check this out. I tried running ssh-keygen and the "Enter file in which to save the key (C:\Users\.../.ssh/id_rsa):" prompt appears and I lose ALL keyboard input to the command line. No CTRL C, no text, no enter. Cant do anything. Anyone aware of what the problem is? Windows 10 PowerShell
- alasdair_ 5y ago> Anyone aware of what the problem is? Windows 10 PowerShell That seems like the most likely problem, yes.
- deleted 5y ago[deleted]
- Retr0id 5y ago> bans use that and a hash of IP Why hash it? There are <2^32 IP(v4) addresses, so it would be trivial to crack the hash.
- quackduck 5y agothe hash is only visible to me, but I'd rather have to spend 10 minutes cracking an IP than just be able to see them plaintext
- LinuxBender 5y agoThere are examples to test with [1] Seems like if someone runs this server they are making those people admins unless they edit that file. [1] - https://github.com/quackduck/devzat/blob/main/admins.json https://github.com/quackduck/devzat/blob/main/admins.json
- gzer0 5y agoI'm in the terminal / chat right now. This is giving me major 90's nostalgia! Incredible.
- thenberlin 5y agoYeah, same here -- serious 90's nostalgia in the best way. This is awesome.
- quackduck 5y agothanks, i'm glad you guys like it :)
- johnisgood 5y agoMe too, using irssi.
- josephd79 5y agoyep, same. Just something about terminal chat clients. I wish Discord would allow you to create a terminal client where you didn't have to do all kinds of workarounds.
- johnisgood 5y agoIf I remember correctly there is such a thing on GitHub, although it is against Discord's ToS. I have a Discord bot that I have written in two different languages as well. It would not be difficult to turn either of them into a pretty TUI. I probably would give Tk a chance, too. It is very lightweight, and can be made really pretty with ease.
- nope96 5y agoNuclear Greenhouse BBS vibes! http://www.bbsdocumentary.com/software/IBM/DOS/GTALK/bbs_gtalk_history.html http://www.bbsdocumentary.com/software/IBM/DOS/GTALK/bbs_gta...
- quackduck 5y agoHoly crap, moderation is hard.
- jart 5y agoOne thing you might consider doing is using https://github.com/USER.keys https://github.com/USER.keys to verify the identity of the person connecting. Then use the GitHub API to verify they have at least N followers and has existed for N days. It would be wonderful to have a social network for open source developers on the command line.
- Jamie9912 5y agoJoined but got banned pretty quickly after not saying a word :(
- quackduck 5y agoCould you send your ID (the hash in the message it gives you)? There's been too much spam for me to be an accurate filter, I'm really sorry
- quackduck 5y agoDevzat will be temporarily down while I figure out some good auto-moderation
- deutschew 5y agoyeah it was a matter of time before people starting spamming
- kevinnotspacey 5y ago
- quackduck 5y agoI'm 16, and I think you should grow up.
- kevinnotspacey 5y agoMy age is very similar to yours :P
- Aeolun 5y agoProving his point?
- AlecSchueler 5y agoTheir point, surely, as quackduck may not be male.
- amin 5y agolmfao.
- quackduck 5y agoI would have expected some self selection: these are people from HN who know how to use SSH. Not exactly a high bar but implies some proficiency with software.
- zomglings 5y agoI typed "hello" and hit Enter, and the whole thing froze. Had to close my shell because I couldn't get out of the chat session any other way. Not great.
- RVRX 5y agopretty sure they are running maintenance rn. OP posted <40mins ago that they were taking it down temporarily for some spam proteciton. I personally can't even connect
- quackduck 5y agoShould be good now, HN stresses out my server haha
- jjnoakes 5y agoFYI if you use an openssh client and you can't disconnect via closing the remote shell normally, type RET+tilde+period in sequence to close it forcefully without losing your local shell. There are more RET+tilde shortcuts as well.
- zomglings 5y agoThank you. This is extremely useful information.
- bragr 5y agoOne thing that could help with the bots is leveraging some of the community generate blocklists for the ssh bots such as blocklist.de though there are other providers. It may not stop all of them, but will cut down a lot on the noise. These are generally useful for any ssh instance exposed to the internet.
- quackduck 5y agothat is a good idea! a more pressing problem that has recently become so is human-generated profane spam
- AnnikaL 5y agoVery cool project! I think having more channels would help cut down on the fast pace of chat, as well as the suggestions from others about making broadcasting commands to everyone opt-in.
- quackduck 5y agoOh you can always make your own channel, just cd into a new one
- gompertz 5y agoReminds me of irssi... A terminal IRC client from way back! Great job!
- johnisgood 5y agoStill maintained, and I am still using it. I guess I am from way back, too. :)
- quackduck 5y agoOkay auto-moderation seems to be working surprisingly well! Related commit: https://github.com/quackduck/devzat/commit/866c33a7d24b43f269fa5c1049d335e802b5bfe2 https://github.com/quackduck/devzat/commit/866c33a7d24b43f26...
- wingerlang 5y agoIsn't the only thing this has in common with Discord.. text chat? That's the LEAST interesting part about Discord, and it's basically just table stakes for a chat service.
- quackduck 5y agowell, channels, emoji names, syntax highlighting...
- leowoo91 5y agoDid you know you are exposing your identity for each "permission denied" error? SSH repeatedly tries all of your public keys to authenticate. Someone was able to harvest that and figure multiple github profiles of the client in past.
- quackduck 5y ago(assuming I am malicious (which isn't really a bad thing to assume))
- OrderlyTiamat 5y agohuh that's... really bad. Is there some way of turning that off? grepping through the man file didn't tell me about any options.
- LinuxBender 5y agoYou are right. My personal method for testing such things is to ensure I do not have any of the default keys. mkdir --mode=00500 -p ~/.ssh_config_backup rsync -avH ~/.ssh/. ~/.ssh_config_backup/. rm ~/.ssh/id_* Then I generate custom keys per-site and list them in ~/.ssh/config/ ssh-keygen -q -t rsa -b 2048 -N "" -C "test" -f ~/.ssh/.id_devzat Then in ~/.ssh/config IdentitiesOnly yes SendEnv LANG LC_ALL ForwardAgent no ForwardX11 no ForwardX11Trusted no # [snip] # Host devzat chat Hostname devzat.hackclub.com Port 22 User test IdentityFile ~/.ssh/.id_devzat LogLevel VERBOSE Verbose to see debug if you are having issues. If one needed to temporarily use the old key for a site until it is changed to a site-unique key, then rsync -av ~/.ssh_config_backup/id_rsa ~/.ssh/.id_somesite Then make a note to change the key on that site and generate a site unique key.
- a1445c8b 5y agoTIP: If you want to be truly anonymous, don’t use the same identity file that you use to ID yourself with Github since the latter publishes your pubkey in https://github.com/<username>.keys https://github.com/<username>.keys
- ilaksh 5y agoSeems frozen
- jbirer 5y agoLooks like the n-word filter is working.
- NylaTheWolf 5y agoDamn this is sick! I'll bookmark this so I can mess around with this later!