SSH 服务器 

Last Update: 2023-05-27

目录

启停

SSH 是 C/S 架构的软件。OpenSSH 的客户端软件是 ssh,服务器软件是 sshd。本文介绍 sshd。

如果没有安装 sshd,可以 sudo apt install openssh-server 直接安装。

一般来说,sshd 安装后会跟着系统一起启动。如果没启动 可以直接 sudo systemctl start sshd 启动, sudo systemctl enable sshd 使之可以自启动。

sshd 的配置文件

sshd 的配置文件为 /etc/sshsshd_config,同目录下也有一些安装时自动生成的密钥。

注意,如果重装 sshd 时 /etc/ssh 目录下的密钥都会重新生成,导致客户端重新 ssh 连接服务器时,会跳出警告,拒绝连接。可以在重装 sshd 前备份 /etc/ssh 目录,重装后用旧备份覆盖新配置。

配置文件 sshd_config 中:

  1. 每个命令占据一行。
  2. 每行都是配置项和对应的值。
  3. 配置项的大小写不敏感。
  4. 与值之间使用空格分隔。

比如:

# 指定 ssh-server 的监听端口为 2034
# 即 ssh 客户端可以通过服务器的 2034 端口连接到 sshd 进程
Port 2034

# 另一种格式,配置项与值之间有一个等号,等号前后的空格可选
Port = 2034

配置文件中 # 开头的行表示注释。空行等同于注释。 注释只能放在一行的开头,不能放在一行的结尾。

sshd 启动时自动读取 /etc/ssh/sshd_config 配置文件 (默认)。如果希望使用其他的配置文件,可以用 -f 参数 sshd -f </path/to/my_config> 指定。

修改配置文件以后,可以用 sshd -t 检查有没有语法错误。

配置文件修改以后,并不会自动生效,必须重新启动 sshd。

sshd 密钥

sshd 有自己的一对或多对密钥。它使用密钥向客户端证明自己的身份。

所有密钥都是公钥和私钥成对出现,公钥的文件名一般是私钥文件名加上后缀 .pub

如果需要支持 SSH 1 协议,则必须有密钥 /etc/ssh/ssh_host_key。

如果密钥不是默认文件,那么可以通过配置文件 sshd_config 的 HostKey 配置项指定。默认密钥的设置如下:

# HostKey for protocol version 1
# HostKey /etc/ssh/ssh_host_key

# HostKeys for protocol version 2
# HostKey /etc/ssh/ssh_host_rsa_key
# HostKey /etc/ssh/ssh_host_dsa_ke

上面命令前面的 # 表示这些行都是注释,因为这是默认值,有没有这几行都一样。

如果要修改密钥,就要去掉行首的 #,指定其他密钥。

HostKey /usr/local/ssh/my_dsa_key
HostKey /usr/local/ssh/my_rsa_key
HostKey /usr/local/ssh/my_old_ssh1_key

sshd 配置项

以下是 /etc/ssh/sshd_config 文件里面的常用配置项:

修改配置文件以后,用 sshd -t 验证配置文件是否有语法错误。新配置在重启 sshd 后生效。

sshd 的命令行配置项

sshd 命令有一些配置项。这些配置项在调用时指定,可以覆盖配置文件的设置。

  1. -d 显示 debug 信息。
  2. -D sshd 不作为后台守护进程运行。
  3. -e 将 sshd 写入系统日志 syslog 的内容导向标准错误 standard error
  4. -f 指定配置文件的位置。
  5. -h 指定私钥 sshd -h </path/to/private_key>
  6. -o 指定配置文件的一个配置项和对应值: sshd -o "<key> <value>", sshd -o "<key> = <value>"sshd -o key=value-o 参数可以一次使用多个来指定多个配置。
  7. -p 指定 sshd 的服务端口。可以指定多个端口: sshd -p <port-a> [-p <port-b> ...]
  8. -t 检查配置文件的语法是否正确。