简单记录一些常见的 SSH 使用技巧。
环境变量
对于 OpenSSH 来说,首先需要在 /etc/ssh/sshd_config
中配置服务端能接受的环境变量,默认如下,重启之后生效。
AcceptEnv LANG LC_*
使用客户端时,可以通过 SendEnv
和 SetEnv
发送环境变量。
$ ssh -o 'SetEnv EnvName=EnvValue' your.server.com
$ EnvName=EnvValue ssh -o 'SendEnv EnvName' your.server.com
双因子验证
Google 提供了简单的双因子验证程序 (除此之外还有FreeOTP) ,而且是开源的,详细可以参考手机端程序 github auth 以及 ssh 服务端的 PAM 模块 github libpam 。
手机端可以直接下载安装即可,在 CentOS 中,可以通过如下方式安装。
----- 生成二维码的工具
# yum install qrencode
----- 安装PAM模块
# yum --enablerepo=epel install google-authenticator
然后直接通过 google-authenticator
命令配置即可,除了二维码,还会生成一堆类似如下的内容;可以直接通过手机扫描二维码即可,或者手动输入下面的 Secret Key
。
Your new secret key is: XXXXXXXXXXXXXXXXXXXXXXXXXX
Your verification code is 666666
Your emergency scratch codes are:
11111111
22222222
33333333
44444444
66666666
最终配置完成后,会在 HOME 目录下生成一个 .google_authenticator
文件,默认权限为 400
。
配置sshd
接下来需要确认如下内容。
$ cat /etc/pam.d/sshd | grep 'pam_google_auth'
auth required pam_google_authenticator.so
$ cat /etc/ssh/sshd_config | grep 'ChallengeResponseAuthentication'
ChallengeResponseAuthentication yes
# systemctl restart sshd
然后,通过 ssh 登陆时,会有如下的提示内容。
$ ssh 192.168.9.102
Verification code:
Password:
SCP
这 OpenSSH 工具集中比较常用的工具,可以用来复制文件、目录等,但是几乎没有完整的文档介绍该协议,老版本默认使用 SCP 协议,比较新的会使用 SFTP 协议,如果要使用老的协议可以添加 -O
参数。
安全加固
通过 sshd -T
命令可以查看当前 ssd
的配置参数,修改完配置后,通过 sshd -t
测试配置文件。
#----- 修改默认监听端口,建议大于1024,很多端口扫描软件不扫描高位端口
Port 2022
#----- 仅允许V2版本,V1存在中间人以及注入攻击
Protocol 2
#----- 不允许root用户登陆,或者不允许密码登陆,新版使用prohibit-password参数
PermitRootLogin yes
PermitRootLogin without-password
#----- 禁止空密码账户登入
PermitEmptyPasswords no
#----- 设置白名单,建议使用无实际权限的虚拟用户,可以添加到wheel组以便切换到root
AllowUsers foo bar foobar
#----- 设置黑名单
DenyUsers alice
#----- 修改登录时间,默认是2m,也就是2分钟
LoginGraceTime 1m
#----- 设置活动用户检测,如果10分钟处于非活动状态的话,就立即自动断线
ClientAliveInterval 600
ClientAliveCountMax 0
#----- 关闭X11转发,X11协议会存在安全漏洞
X11Forwarding no