现在远程管理 Linux 系统基本上都要使用到 SSH,原因很简单:telnet、FTP 等传输方式是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题,透过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。
ssh_config 和 sshd_config 都是 ssh 服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。下面列出来的是两个配置文件中最重要的一些关键词,每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的。
1、编辑 /etc/ssh/ssh_config 文件
# 标识以下选项均为系统初始默认的选项,配置文件中很多选项前面加有 # 注释
# 其实是说明此为系统默认的初始化设置
# Site-wide defaults for various options
# 只对匹配后面字串的计算机有效,* 表示所有的计算机,这是一个类似于全局的选项
# 表示下面缩进的选项都适用于该设置,可以指定某计算机替换*号使下面选项只针对该算机器生效
Host *
# 设置连接是否经过验证代理(如果存在)转发给远程计算机
ForwardAgent no
# 设置 X11 连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
ForwardX11 no
# 设置是否使用基于 rhosts 的安全验证
RhostsAuthentication no
# 设置是否使用用 RSA 算法的基于 rhosts 的安全验证
RhostsRSAAuthentication no
# 设置是否使用 RSA 算法进行安全验证
RSAAuthentication yes
# 设置是否使用口令验证
PasswordAuthentication yes
# 设置如果用 ssh 连接出现错误是否自动使用 rsh,由于 rsh 并不安全,所以此选项应当设置为 no
FallBackToRsh no
# 设置是否在这台计算机上使用 rlogin/rsh,原因同上,设为 no
UseRsh no
# 批处理模式,一般设为 no,如果设为 yes,交互式输入口令的提示将被禁止
# 这个选项对脚本文件和批处理任务十分有用
BatchMode no
# 设置 ssh 是否查看连接到服务器的主机的 IP 地址以防止 DNS 欺骗。建议设置为 yes
CheckHostIP yes
# 如果设为 yes,ssh 将不会自动把计算机的密匙加入 $HOME/.ssh/known_hosts 文件
# 一旦计算机的密匙发生了变化,就拒绝连接
StrictHostKeyChecking no
# 设置读取用户的 RSA 安全验证标识
IdentityFile ~/.ssh/identity
# 设置连接到远程主机的端口,ssh 默认端口为 22
Port 22
# 设置加密用的密钥,blowfish 可以自己随意设置
Cipher blowfish
# 设置 escape 字符
EscapeChar ~
2、编辑 /etc/ssh/sshd_config 文件
# This is ssh server systemwide configuration file.
# 设置 sshd 监听的端口号
Port 22
# 设置 sshd 服务器绑定的 IP 地址
ListenAddress 192.168.1.1
# 设置包含计算机私人密匙的文件
HostKey /etc/ssh/ssh_host_key
# 定义服务器密匙的位数
ServerKeyBits 1024
# 设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)
LoginGraceTime 600
# 设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)
# 重新生成密匙是为了防止用盗用的密匙解密被截获的信息
KeyRegenerationInterval 3600
# 设置是否允许 root 通过 ssh 登录。这个选项从安全角度来讲应设成 no
PermitRootLogin no
# 设置验证的时候是否使用 rhosts 和 shosts 文件
IgnoreRhosts yes
# 设置 ssh daemon 是否在进行 RhostsRSAAuthentication 安全验证
# 忽略用户的 $HOME/.ssh/known_hosts
IgnoreUserKnownHosts yes
# 设置 ssh 在接收登录请求之前是否检查用户家目录和 rhosts 文件的权限和所有权
# 这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限
StrictModes yes
# 设置是否允许 X11 转发
X11Forwarding no
# 设置 sshd 是否在用户登录的时候显示 /etc/motd 中的信息
PrintMotd yes
# 设置在记录来自 sshd 的消息的时候,是否给出 facility code
SyslogFacility AUTH
# 设置记录 sshd 日志消息的层次。INFO 是一个好的选择。查看 sshd 的 man 帮助页,已获取更多的信息
LogLevel INFO
# 设置只用 rhosts 或 /etc/hosts.equiv 进行安全验证是否已经足够了
RhostsAuthentication no
# 设置是否允许用 rhosts 或 /etc/hosts.equiv 加上 RSA 进行安全验证
RhostsRSAAuthentication no
# 设置是否允许只有 RSA 安全验证
RSAAuthentication yes
# 设置是否允许口令验证
PasswordAuthentication yes
# 设置是否允许用口令为空的帐号登录
PermitEmptyPasswords no
# 的后面可以跟任意的数量的用户名的匹配串,这些字符串用空格隔开。主机名可以是域名或 IP 地址
AllowUsers admin