5.4 KiB
SSH
OpenSSH (ssh) is a secure protocol for connecting to computers/servers remotely. Its uses are infinite, from connecting to clouds to making your laptop a desktop
Basics
$ ssh -p 10022 emiliko@192.168.0.12
$ ssh -p 10022 emiliko@localhost
Connects to user emiliko
on host address localhost
via port 10022
. Port
22
is the default for ssh
$ ssh emiliko@68.185.68.169
To connect over WAN, there're some additional setup on the server-side:
-
Set your IPv4 address manually. This usually requires setting manual DNS servers.
1.1.1.1
and1.0.0.1
are a good choice -
Set up port forwarding for port 22 on the router to your manual local IPv4
-
Find your router's public IP address and use that as the host address
$ dig +short myip.opendns.com @resolver1.opendns.com $ host myip.opendns.com resolver1.opendns.com $ curl --silent https://ifconfig.me/ip Finds your network's public IP address. This'll the server's be the host address
Setting up ssh and ssh keys
# pacman -S openssh
Update or install ssh. It's often packaged as openssh
and installs ssh
# systemctl enable sshd
Starts up the ssh daemon. The system should now be able to accept ssh connections. On macOS, use Preferences -> Sharing -> Remote Login
$ ssh-keygen -t ed25519
$ ssh-keygen -t ed25519 -f ~/.ssh/arch_qemu_ed25519 -C "For arch qemu"
Generate a ed25519
key pair. Interactively or through flags, this will add a
comment at the end of the public key and save it in the designated file
$ ssh-copy-id -i ~/.ssh/key_file.pub emiliko@localhost
$ cat ~/.ssh/key_file.pub | ssh emiliko@localhost "mkdir -p ~/.ssh && cat >>
~/.ssh/authorized_keys"
Copy an ssh key to the host. Either one will give you the power of ssh keys
$ ssh-keygen -pf ~/.ssh/key_file
Change the passphrase on the key
Using ssh keys
$ ssh -i ~/.ssh/identify_file emiliko@localhost
Login to user using the identity file. This points to your private key. If the file is secured by a passphrase, you'll need to retype it every time
$ eval $(ssh-agent) && ssh-add ~/.ssh/key_file.pub
Start the ssh agent and add a key file to it. This uses the path of the public key file. The agent prevents the need to retype the passphrase on this terminal
$ ssh -A emiliko@localhost
Forwards the ssh agent to the destination system. Only useful if you plan to ssh from that system
$ scp -P 10022 ~/file emiliko@localhost:~/dir/
Copies file between systems. cp
except across systems. This uses the same
login methods, key or password, as ssh
. Port option must be capitalized
$ scp ~/file alias:~/dir/
Copies file between systems, using alias
from ~/.ssh/config
as the
destination system. This will automatically specify a user, identity key, etc...
$ ssh -L 2222:localhost:3333 emiliko@192.168.0.12
Creates an ssh tunnel connecting localhost:3333 on the host server to port 2222 on the client. Useful for webpages and IDE notebooks
SSH keys with git
After setting up ssh keys in both GitHub and your computer, you'll need to change repositories to use ssh instead of the http protocol
$ git remote -v
Echos a list of remote sources for the current repository. If the URLs start
with http
, ssh protocol is not being used to connect to the remote sources
$ git remote add origin git@github.com:Aizuko/configs.git
$ git remote set-url origin ssh://git@github.com:22/Aizuko/configs.git
Use ssh protocol when connecting to remote origin. add
is for new projects
which don't have an origin yet. set-url
is for existing projects using http
Mounting remote filesystems with SSHFS
SSH can mount a remote file system as if it's a laggy disk connected to your system. This can be a nice way to locally view and edit remote files
Disclaimer: These commands have only been tested on MacOS using macFUSE
$ mount
Lists all the current mount points
$ mkdir ~/mnt
$ sshfs emiliko@192.168.0.12:/Users/emiliko ~/mnt
$ sshfs emi:/Users/emiliko ~/mnt
Mounts the Emiliko's home directory to ~/mnt
. Do not try emi:~/
as bash
tilde will expand relative to the host. Specify the remote path from the root
$ umount emiliko@192.168.0.12:/Users/emiliko
$ umount !sshfs:1
Unmount the remote filesystem. Remember to type out the full remote path
$ sshfs -o cache=no emi:/home/emiliko ~/mnt
$ umount !sshfs:3
Disable caching to reconnect on every command. Prevents false directory listings
$ pgrep -lf sshfs
$ ps aux | grep -i sshfs
$ kill -9 10364
# umount -f ~/mnt
Forcefully unmount the filesystem
SSH Forwarding
$ ssh -p10011 -NL 7000:localhost:8080 emiliko@localhost &
$ ssh -NL 7000:localhost:8080 emi &
Opens an ssh tunnel between 7000
on the client and localhost:8080
on the
server. Best used with &
, as in line 2, to avoid obstructing the current pane
SSH config
~/.ssh/config
Host paraarch
User emiliko
Hostname 192.168.0.12
Port 22
IdentityFile ~/.ssh/parallels_arch_ed25519
IdentitiesOnly=yes
Adds a new host paraarch
to the ssh config. paraarch
can be used instead of
the host name and it will automatically specify these flags. IdentitiesOnly
resolves some issues relating to multiple failed connection attempts
~/.ssh/config
Host github.com
Hostname github.com
IdentityFile ~/.ssh/github_key_ed25519
When pulling from remote origin git@github.com
, this key will be used
[//]: # ex: set ft=markdown:tw=80: