I was looking for a way to convert some XML data to JSON a I stumbled about https://codebeautify.org/ which did exactly what I wanted. It seems to have a lot of other toolkit which can be used for different types of conversion which a programmer can need.
Category Archives: Tips and Tricks
ssh_exchange_identification: read: Connection reset by peer
I recently upgraded my Mac Desktop and I noticed a strange problem that I was not able to SSH into my desktop from my laptop. I ultimately found out that the SSH setup that came with MacOS was having some issue as when I did ssh user@localhost on the desktop I got the same error:
ssh_exchange_identification: read: Connection reset by peer
I ended up tailing the system log using the following command:
sudo tail -f /var/log/system.log
I observed the following entries in the log whenever a SSH was attempted.
com.apple.xpc.launchd[1] (com.openssh.sshd.[UUID][NUM]): Service exited with abnormal code: 1
It was clear that there was setup issue with the SSH that came with default MacOS installation. So I decided to spawn a separate SSH instance and watch it’s log:
sudo /usr/sbin/sshd -d -p 2222
This command showed up a lot of issues related to file permissions.
Permissions 0644 for '/etc/ssh/ssh_host_dsa_key' are too open.
Permissions 0644 for '/etc/ssh/ssh_host_ecdsa_key' are too open.
Permissions 0644 for '/etc/ssh/ssh_host_ed25519_key' are too open.
I fixed these permission issues by changing their permission to 400:
sudo chmod 400 /etc/ssh/ssh_host_dsa_key
sudo chmod 400 /etc/ssh/ssh_host_ecdsa_key
sudo chmod 400 /etc/ssh/ssh_host_ed25519_key
After this change the following command succeeded and I was able to do successful SSH connection to port 2222.
sudo /usr/sbin/sshd -d -p 2222
So I killed this process and decided to restart SSH:
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo lsof -i:22
echo $?
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
Once SSHD was restarted I could successfully do logins using ssh user@localhost from Desktop as well as remote login via SSH from my laptop.
Prettify JSON on Terminal
I love using curl command on my Mac terminal to debug my REST endpoints. However the REST call JSON output used to come in a blob of text which required further formatting in an Editor like Visual Studio Code. To allay this problem I ended up installing “jsonpp” using homebrew.
brew install jsonpp
So now I just pipe the output of my curl command to the jsonpp program and I get a fully formatted JSON.
$ curl http://localhost:8080/test | jsonpp
{
"year": 2018,
"month": 2,
"worked": 18,
"leaves": 2
}
Curl Command New Line Post Output
I like to use curl instead of UI tools like Postman for debugging my RESTful web services traffic whenever possible. I however didn’t like my output being messed up by the bash prompt being suffixed to the output. Something like the following:
$ curl -H "$auth_token" http://localhost:8080/xyz/abc-efg ["-","A","B","C","D","E"]$
So basically what I needed was to have a new line forced after the curl output. A quick search on internet yielded this article. So I executed the following command on my terminal.
$ echo '-w "\n"' >> ~/.curlrc
After doing this when I execute the same curl command I get the following output.
$ curl -H "$auth_token" http://localhost:8080/xyz/abc-efg ["-","A","B","C","D","E"] $
So now the bash prompt is actually coming on a new line by default!
Validating Signature in PDF documents in Acrobat Reader
I received a digitally signed document from a trusted source. However when I proceeded to take a print it came out with “Signature Not Verified” in place of the signature field. This was not going to work so I did some googling and found out this link. It basically allowed me to validate the signature and take a printout with “Signature Valid” in place of the digital signature.
Uninstalling and reinstalling brew
I use brew utility for all my terminal based installation needs. However recently I had to deal with a corrupted brew install. To fix this I followed this link. The uninstallation and reinstallation worked fine and I now have a working brew instance.
The commands as mentioned in the above link are:
$ cd `brew –prefix`
$ rm -rf Cellar
$ brew prune
$ rm -rf Library .git .gitignore bin/brew README.md share/man/man1/brew
$ rm -rf ~/Library/Caches/Homebrew
$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
Installing pip on MacOS
I recently started exploring python and immediately ran into the following issue:
$ pip install requests
-bash: pip: command not found
A quick google search yielded this result. So basically on MacOS you have Python preinstalled along with easy_install command. So the following command installs pip:
$ sudo easy_install pip
Searching for pip
Reading https://pypi.python.org/simple/pip/
Best match: pip 9.0.1
....
....
Processing dependencies for pip
Finished processing dependencies for pip
A quick and handy solution indeed!
Install Python Offline
Found a good article which enabled me to install python 2.7.3 inside a folder.
http://www.benhepworth.com/blog/2016/05/18/install-python-to-separate-directory-on-linux-in-5-easy-steps/
How to recover from a hung SSH session on Mac
A simple technique on MacOS which I use every now and then when my SSH connections hang due to network disconnect. You can immediately terminate the hung SSH session by pressing ~. (tilde and dot) keys together.
http://apple.stackexchange.com/questions/35524/what-can-i-do-when-my-ssh-session-is-stuck
List of good Curl commands
I use CURL for debugging my REST endpoints every now and then if I don’t want to use Postman or DHC clients. I usually like to copy paste results / statistics from command line into emails to my colleagues. This gives them a plain jane command which they can use to test themselves as well as compare their results with mine. The following article has some good pointers on how to use CURL and some very practical examples have been provided.
15 Practical Linux cURL Command Examples (cURL Download Examples)