SSH Examples, Tips and Tunnels
hackertarget.com
hackertarget.com
Please, instead of making more 'how to use SSH'-articles popular, read the manpages yourself.
Reading the datasheets and documentation of the stuff you work with is an important characteristic of an capable engineer.
I completely agree with this statement, but that doesn't nullify the value of "how to use x" articles. Man-pages are great because:
- they're (mostly) ubiquitous
- they're plaintext, meaning their format is more robust and accessible (e.g. I can read man over SSH without ever encountering issues)
and these are great pros, but in certain relevant aspects they're grossly inferior to articles like this:
- man-pages must be exhaustive, and thus don't have the luxury of focusing on the most common use-cases up front. These are often relegated to the "Examples" section only, or omitted altogether
- screenshots. Even for terminal apps, screenshots are incredibly helpful, and in this particular article they're also used to demonstrate the use of applications your SSH connection will interact with (e.g. browser proxy/network settings)
- (related to the above) contextual information that would otherwise be off-topic/inappropriate in a man-page. How-to articles can cover multiple apps that interact with eachother as one topic; i.e. a how-to article can focus on a use case rather than a single app.
When learning, however, we often need goal directed material and examples. For multi-purpose tools - and most tools have more than one application, especially for higher level goals - that means there can be many different introductions for the same tool, depending on the learner's goal.
The best tools are compositional. Often it's hard to imagine all the ways a tool can be composed by looking at it in isolation. You need some examples to get the imagination working.
ssh user@example.com
ssh -i ~/.ssh/id_rsa user@example.com
Works as a reference but also for explorative learning.
https://tldr.sh/ and http://bropages.org/ spring to mind, and I know there are others that I'm not immediately remembering ATM, both of which have web interfaces or can be installed as local command-line tools.
ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] ...
If there are several incompatible ways to invoke an operation several cases are given, e.g. netstat [-AaLlnW] [-f address_family | -p protocol]
netstat [-gilns] [-v] [-f address_family] [-I interface]
...
Typically there are examples in the EXAMPLES or USAGE section which you can jump straight to via /^U or /^EIn the case of ssh there are several such sections so just jump to them via /^[^ ]
> ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] ...
That's exactly the kind of "SYNOPSIS" would make me want to stomp on puppies when looking at a man page because I forgot some basic usage.But actually, thanks for the key-combo tip on jumping straight to examples.
I like cheat.sh. You can curl it directly from your terminal and it offers the quick examples I often need to get back to work.
Here is their ssh page: http://cheat.sh/ssh
Also I am a huge fan of Matlab’s Documentation, at least up to the more recent versions that became less usable. They give a clear description of the function, list syntax options, give several examples and provide a see also section with similar or related functions (greatly helping discoverability). They usually include academic references at the end.
https://uk.mathworks.com/help/matlab/ref/atand.html?s_tid=do...
Info format files are intended to be more comprehensive and tutorial but they never really made the jump to Unix.
If you instead meant that e.g. TCP FORWARDING or X11 FORWARDING are such sections that explain use cases, well, in that case I still fail to find a section that would describe simple use case of just connecting to a host.
Try adding ManKier as a custom search provider for Firefox or Chrome, it is online man pages beginning with TL;DR examples at the top of each web page, followed by the traditional man page entry below. Here is a fuller explanation with links to instructions for adding it to your browser: https://www.mankier.com/about
I use it almost exclusively now, and only refer to my distro's man page in a terminal if I need to check on something that isn't standardised (such as sed -i.bak or something like that).
Custom browser search is pretty handy, try adding a dictionary and map provider too, or 'caniuse' if you do front-end work.
Especially for standard/common/trivial tasks.
It can bite your ass of course, but it is rare - and if you do something more exotic - take the time learning to minimize the chance.
If you know you want a SOCKS proxy and just need to know the correct option name, the man pages are great. If you have no idea what a SOCKS proxy is, why you might want it, or even that ssh can solve this problem for you, then there's no chance you'd even think to look at the man pages for ssh and ssh_config, and if you did, you still wouldn't really know what the bits about SOCKS proxy meant for you and your problems.
It's not like this article's existence will prevent people from reading the man pages. On the contrary, this article serves an entirely different purpose. I can read it on my phone, learn about something new, and then when I'm back at my workstation, I can look up the new concept in the man pages to figure out how I can integrate it into my own workflow.
I'm struggling with understanding the motivation behind your post here. Please reconsider the value of this sort of article in combination with the value of man pages.
It wasn't that long ago that it was common for people read the manuals of the things they used to get the best bang for their buck, so to speak. Now, the world is filled with quick-starts and use-specific guides, because people don't have the time to research all the things they use.
It's this aversion to a little studying of the tools of our trade that I think blueflow and myself are against.
There are like a half dozen really good manpages I can think of, some others might as well be written in Mandarin
It would be much more traffic (and execution time) friendly, if you put pipe and grep to "" as well, so grep would be executed on remote server and ssh won't have to send the entire log to your machine.
And I'd like to highlight the overwhelming awesomeness of ~/.ssh/config file. If you haven't heard about it or use shell alias instead please please read about it. It supports autocomplete, dynamic paths to key files and many other cool things which can make your ssh client experience simply great.
In this example the grep is being performed on the local system after the log file has been pushed across the ssh session. If the file is large it would be more efficient to run the grep on the remote side simply by enclosing the pipe and grep in the double quotes.
Either way this is not a great example as you should just login and run it on the remote machine as running through pipe causes the connection to be established every time unless you keep a persistent connection open behind which is explained in the MultiPlex section which is very handy when you need to run many commands over ssh in cases of like taking backups from that machine.
Having some undesired grep version could be one reason but not enough to justify piping everything before grep in the example.
> localhost:~$ ssh remoteserver "grep badstuff.php /var/log/nginx/access.log"
That being said, only using grep is my preferred approach (if I don’t forget it) in script and “compact lines” (I.e ssh, watch, and everything that expects the command as a string).
If you are grepping a file multiple times, I would recommend to connect to the server anyways (because it is much faster). That being said, if this is a single occurrence, and saves you from the pitfalls of using the local grep instead of the remote one, your approach is preferable in that case.
You can also do it like this:
< myfile grep mypattern$ ^term1^term2^
Try it
Do you mean this or something not described there?
https://nerderati.com/2011/03/17/simplify-your-life-with-an-...
scp machine:'"file with spaces"' .
What people don't tend to realize is that this is because scp allows you to specify the remote-side files with remote shell code. For example, to get all pdfs in the remote home directory: scp machine:'*.pdf' .
To get file.xml and file.pdf from the remote: scp machine:'file.{xml,pdf}' .
To get the newest file (asumming that it has no whitespace or glob characters): scp machine:'$(ls -t | head -1)' .
The same, but handling spaces and other characters, but not newlines: scp machine:'"$(ls -t | head -1)"' .
If you use zsh on the remote machine with extended globs, this is the safest way: scp machine:'*(oc[1])' .... Host remoteserver HostName remoteserver.thematrix.io User neo Port 2112 IdentityFile /home/test/.ssh/remoteserver.pub
IdentityFile typically (always?) specifies a file with a private key, right?
It walks you through the basics of SSH tunneling (both local and remote port forwards), SOCKS proxies, port redirection, and how to utilize them with other tools like proxychains, nmap, Metasploit, and web browsers.
Advanced topics included SSHing through 4 jump boxes, throwing exploits through SSH tunnels, scanning assets using proxychains and Metasploit's Meterpreter, browsing the Internet through a SOCKS proxy, utilizing proxychains and nmap to scan targets, and leveraging Metasploit's Meterpreter portfwd command.
- -J to jump through multiple hosts (available since 7.3)
- -R creating a reverse SOCKS proxy (available since 7.6)
New (from a Debian user's perspective) features[1] hide among all the classics.
[1] - https://tinyvpn.org/sftp/#lftp
This specific example can be used to set up public semi-anonymous file sharing without providing shell access. there is a working live demo of the sftp server that you can play around with using lftp to replicate rsync like behavior.
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_ever...
https://superuser.com/questions/224631/is-it-a-good-idea-to-...
You can't reattach the program, but there's other ways to auto-launch screen if you're often doing that.
Also consider using ssh config to make your default command create or attach a tmux session.