1. SSH 客户端 - 远程访问
1.1. 软件安装
sudo apt install -y openssh-client
安装确认:
~$ ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.2, OpenSSL 1.1.1f 31 Mar 2020
1.2. 连接主机
假设主机名 IP 为 10.0.0.1,用户名是 dummy,则可以使用以下命令进行登录:
1$ ssh dummy@10.0.0.1
2The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
3ECDSA key fingerprint is SHA256:ZqsZKXaz3/cm9IN6F9CaEdJDhgj8fRmwL+l+ERgI4M8.
4Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
5Warning: Permanently added '10.0.0.1' (ECDSA) to the list of known hosts.
6dummy@10.0.0.1's password:
7Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-88-generic x86_64)
8<Truncated output>
9dummy@ubuntu:~$
首次登录会显示安全提示,需要手动确认指纹信息:
第二行为主机密钥指纹信息
第三行需要交互输入 yes
第四行表明将主机信息存入 ~/.ssh/known_hosts
在输入密码后,显示主机 banner 信息,并进入 shell。后续登录不再出现该提示。
如果登录中断,并出现如下提示,则表明了主机指纹发生变更。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:ZqsZKXaz3/cm9IN6F9CaEdJDhgj8fRmwL+l+ERgI4M8.
Please contact your system administrator.
Add correct host key in < private info >.ssh/known_hosts to get rid of this message.
Offending ECDSA key in < private info >.ssh/known_hosts:1
ECDSA host key for 10.0.0.1 has changed and you have requested strict checking.
Host key verification failed.
此时,我们可以使用以下命令删除保存的主机信息,然后重新进行连接。
ssh-keygen -R 10.0.0.1
主机指纹通常不会改变,除非管理员更新了 /etc/ssh/ssh_host_ecdsa_key.pub 密钥或系统进行了重装,当然也可能是主机被入侵了,因此我们需要谨慎对待该问题。话虽如此,但我并不知道如何处理入侵问题,事实上连接时也没有确认指纹信息。 只因我常重装系统,所以记录了该问题。
1.3. 配置概述
SSH 运行时,会解析以下配置信息,优先级依次递减。
命令行参数
ssh dummy@10.0.0.1 -p 2222
-p 选项指定 ssh 访问端口为 2222。
用户配置文件
文件位于 ~/.ssh/config, 可以使用 Port 2222 指定访问端口。
全局配置文件
文件位于 /etc/ssh/ssh_config,可以使用 Port 2222 指定访问端口。
用户配置文件与全局配置文件具有相同的选项,通常从全局配置文件查看选项,然后复制选项到用户配置文件,并做相应的修改。命令行选项与配置文件选项基本有一一对应的关系。
在实践操作中,通常使用用户配置文件进行管理。
1.4. 命令行参数
SSH 配置选项繁多,此处只说明常见的选项,其余的选项做如下安排:
几乎不用,不做介绍
-1,-2 选项用于指定 SSH 协议的版本,但 SSH1 基本被弃用。
特殊功能,用时介绍
-L,-D 等选项用于端口转发,-i 选项用于指定密钥,会在后续说明。
指定端口
ssh dummy@10.0.0.1 -p 2222部分主机出于安全考虑会更改默认访问端口。
静默模式
ssh dummy@10.0.0.1 -q减少不必要的输出,如在脚本中执行 SSH 命令。
调试信息
ssh dummy@10.0.0.1 -v用于在连接出错时查看日志,v 可以叠加使用,v 越多日志越详细,如 -vvv。
1.5. 用户配置文件
首先使用以下命令创建配置文件,目录与文件的权限要求见附录:SSH 附录: ssh 文件权限管理
mkdir -m 700 -p ~/.ssh && (umask 077 && touch ~/.ssh/config)
配置文件的格式大致如下:
# # 起始的内容为注释,解析时会被忽略。
# 选项后的 # 可能存在解析问题,这与实现相关,因此建议注释写在每一个 Host 上方。
Host publish_cc # Host 声明 publish_cc 主机的配置块
HostName 10.0.0.2 # 主机地址
Host compile_cc # Host 声明 compile_cc 主机的配置块
HostName 10.0.0.1
Port 2222 # 单独配置访问端口
# Host 支持通配符,示例选项为 _cc 结尾的主机指定相同的用户名
Host *_cc
User dummy # 用户名
# * 代表全部主机,优先级在配置文件中最低,示例选项为全部主机配置了相同的认证密钥
Host *
IdentityFile ~/.ssh/id_rsa
SSH 配置文件不存在密码选项,因此需要手动输入密码,或使用后续介绍的密钥认证。
在完成配置文件后,可以使用以下命令直接连接:
ssh compile_cc
在输入 ssh 后,可以使用 TAB 键进行显示与补全,与文件名补全相似。
ssh
10.0.0.1 compile_cc publish_cc
详细的配置选项说明见:SSH 附录: ssh 配置文件。