如何使用SSH?

SSH是用于远程登陆Linux的常用协议。其最常用的开源实现是OpenSSH。在Debian/Ubuntu中,一般ssh的客户端和服务器端都是默认安装的。如果没有,可以通过apt install sshd安装服务器端,通过apt install sshd安装客户端。

在老版本的Windows中,可以使用Putty做客户端。而在Windows 10中已经集成了SSH客户端,所以可以直接在命令行发起远程连接。

很多应用都使用SSH作为底层协议。例如,GitVSCode RemoteHadoop。这里简单介绍SSH的使用和配置方法。

使用

SSH的使用非常简单只需要按如下格式指定要登陆的服务器:

ssh [用户名]@[服务器]:[端口]

其中,服务器可以是域名或IP地址;端口如果是默认的20端口则可以省略。

简单配置

记住用服务器通常很困难,特别是当我们使用IP地址登录的时候。如果我们有多个服务器要管理,记住那么多用户名也不那么容易。这时可以利用SSH配置文件给服务器起一个别名。不论是Linux还是Windows,配置文件都位于~/.ssh/config。通过添加如下内容,可以设置别名(nickname):

Host nickname
    HostName server.ip
    User username

注意,SSH配置文件生效必须阻止其它账户获得文件的查看或修改权限。可以通过如下命令保证相关文件拥有正确权限:

chmod og-rw .ssh .ssh/*

配置正确后,就可以通过别名登陆服务器了:

ssh nickname

免密码登陆

免密码登陆利用RSA等非对称密钥登陆服务器,可以给操作带来非常多的方便。为了做到这,我们需要通过ssh-keygen生成一个密钥对。ssh-keygen命令会询问相关信息,这里建议可以一路无脑回车。如果对具体ssh-keygen有哪些额外的参数感兴趣可以进一步查询相关文档。一路无脑回车后,我们会得到两个文件:

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

.pub后缀名的是我们的公钥,可以放心给人看。id_rsa是我们的密钥,一定要保护好。为了免密码登陆,我们需要将公钥放到要登陆的服务器上。

scp ~/.ssh/id_rsa.pub nickname:~/.ssh/authorized_keys

注意,该命令会直接替换authorized_keys。如果,想授权给多个公钥,我们要将多个公钥存放到authorized_keys,每一行存一个。

scp ~/.ssh/id_rsa.pub nickname:~
ssh nickname
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

注意,如果服务器或本地任何SSH相关文件的权限不合适,都可能导致无法正常登陆。

利用SSH创建本地SOCKS5代理

ssh -CqTnN -D localhost:8080 nickname

创建命令别名

在文件~/.profile或者~/.bashrc中添加

alias socks="ssh -CqTnN -D localhost:8080 nickname"