大多数 Linux 服务器并不包含完善的用户界面,很多时候也并非安装在本地机器上。而是使用 SSH 远程登录的方式来完成对服务器的控制。
SSH(Secure Shell)提供两种级别的验证方式。第一种是基于口令的验证,即使用自己的用户名和密码登录远程机器。
第二种是基于密钥的验证,即先在本地机器上创建一对密钥(公钥和私钥),将公钥上传到远程服务器,登录时通过对比客户端与远程端的密钥来进行验证。
基于密钥的验证是不需要在网络上传输口令的,相对而言更加安全。
Linux 上的 ssh 服务器可以使用 openssh ,使用软件包管理器直接安装即可:$ sudo apt-get install openssh-server
使用密钥进行远程登录还可以实现自动登录(不需要输入密码),以下为详细配置过程。
一、在本地机器上创建密钥
$ ssh-keygen -t rsa -C 'email@domain.com'
-t 选项用来指定密钥类型,默认即为 rsa);-C 选项用来提供说明文字
命令执行成功后会在 ~/.ssh
目录下分别创建公钥(默认为 id_rsa.pub)和私钥(默认为 id_rsa)文件
二、将公钥上传至服务器
这一步需要将本地生成的公钥文件(id_rsa.pub)内容添加到服务器上的 ~/.ssh/authorized_keys
文件中。
可使用 scp 命令完成远程复制:1
2
3
4$ scp ~/.ssh/id_rsa.pub username@hostname:~/ # 将公钥文件上传至服务器用户主目录
$ ssh username@hostname # 使用用户名和密码登录至服务器
$ mkdir .ssh # 在远程服务器上创建 .ssh 目录
$ cat id_rsa.pub >> ~/.ssh/authorized_keys # 将公钥文件内容追加到authorized_keys文件末尾
上面我使用的是 virtualbox 虚拟机安装的 ubuntu 16.04 Server,利用 NAT 的端口转发将宿主机的 8022 端口映射到了虚拟机的 22 端口。-P 8022 用于指定端口号
以上步骤完成后就可以通过 ssh username@hostname
命令直接登录远程主机。
三、配置登录别名
可以通过在本地机器上的 ~/.ssh/config
文件中定义别名,然后使用 ssh <alias>
命令即可直接登录远程服务器。
该文件格式如下:1
2
3
4
5Host alias # 自定义别名
HostName hostname # 服务器地址
Port port # 远程 ssh 服务的端口号,默认为22
User user # 用户名
IdentityFile ~/.ssh/id_rsa # 本地公钥文件位置
登录效果:
针对第二步中上传密钥的操作,还可以使用此命令:
$ cat ~/.ssh/id_rsa.pub | ssh username@hostname "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"