sshd服务基本配置和使用(201610改)
一、基于密钥认证的服务端基本安全设置:
1、修改/etc/ssh/sshd_config,具体如下:
Protocol 2 #只支持SSH2协议
Port <端口号> #修改默认端口号
MaxStartups 5 #同时允许5个尚未登录的SSH联机
MaxAuthTries 3 #最大登录尝试次数为3
GSSAPIAuthentication no #关闭GSSAPI认证
ServerKeyBits 1024 #将ServerKey强度改为1024比特
PermitEmptyPasswords no #禁止空密码进行登录
ChallengeResponseAuthentication no #禁用s/key密码
UsePAM no #不通过PAM验证
PermitRootLogin no #禁止root远程登录
PasswordAuthentication no #不允许密码方式的登录
RSAAuthentication no #不允许RSA认证,只针对SSH1
PubkeyAuthentication yes #允许公钥认证
AuthorizedKeysFile .ssh/authorized_keys #保存公钥的认证文件
UsePrivilegeSeparation yes #用户权限设置
SyslogFacility AUTH #记录SSH登录情况
LogLevel INFO #记录等级为INFO
PrintMotd yes #登录成功后显示/etc/motd 文件的内容
PrintLastLog no #不显示上次登录信息
Compression yes #是否压缩命令
KeepAlive yes #防止死连接
StrictModes yes #接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查
UseDNS no #不使用DNS反解
AllowUsers <用户名> #允许通过远程访问的用户,多个用户以空格分隔
AllowGroups <组名> #允许通过远程访问的组,多个组以空格分隔
DenyUsers <用户名> #禁止通过远程访问的用户,多个用户以空格分隔
DenyGroups <组名> #禁止通过远程访问的组,多个组以空格分隔
2、如果需要限制来路IP的话,可以修改/etc/hosts.deny和/etc/hosts.allow两个文件,通过添加sshd:<IP地址或IP段>来限制或允许SSH远程链接IP。
3、密钥设置
A、用打算通过SSH登录的帐号登录系统,创建密钥对
ssh-keygen -b 1024 -t rsa
当要求输入passphrase密钥保护时,建议不要默认为空。
B、进入此用户的 .ssh目录,将生成的公钥文件(默认为id_rsa.pub)内容添加到与sshd_config中AuthorizedKeysFile设置项一样的文件(authorized_keys)中,并删除id_rsa.pub。
cat id_rsa.pub >>authorized_keys;rm -f id_rsa.pub
C、更改.ssh目录的权限为700,authorized_keys文件的权限为600。
D、私钥口令修改
ssh-keygen -p -P <旧私钥口令> -N <新私钥口令> -f <私钥文件路径>
二、基于密钥认证的客户端连接
linux:将私钥文件id_rsa拷贝到客户端<home>/.ssh/目录(你也可以CP到任何其他什么地方)中,重新命名,并设置权限chmod 600 <home>/.ssh/<PrivateKeyFileName>。
通过命令ssh -i ~/.ssh/<PrivateKeyFileName> <username>@<remote IP>登录远程机。
ssh客户端在登陆服务端时,会把对应的公钥写入~/.ssh/known_hosts文件。如果密钥发生改变,则将~/.ssh/known_hosts文件中对应的一行公钥删除,才能用新的私钥登录。
PUTTY:将私钥文件id_rsa拷贝到客户端,通过PUTTYGEN转换RSA密钥,保存私钥为ppk格式,最后通过密钥认证即可登录远程系统。
SecureCRT:将私钥文件id_rsa拷贝到客户端,在连接选项里把authentication的验证顺序中的PublicKey放到最先的位置,打开PublicKey验证的properties页,identity file选择id_rsa。
三、scp的使用
scp <源主机用户名>@<源主机名>:<源文件或目录路径,多个文件以空格分隔> <目标主机用户名>@<目标主机名>:<目标文件或目录路径>
如果源为本机的话,则只需要列出文件或目录路径即可。
常用参数 :
-v 显示进度
-C 压缩传输选项
-P 指定端口
-4 强行使用 IPV4 地址
-6 强行使用 IPV6 地址
-i 指定私钥文件路径
-r 遍历路径复制
-l 限制最大传输带宽,单位是Kb/s
四、sftp配置
1、使用ssh -v确定软件版本
openssh版本不低于4.8sp1
openssl版本不低于0.9.6
否则到官网下载最新版,卸载本机ssh后重新安装,此时要切记如果是远程操作的话应该切换至telnet!
#备份配置文件
cp /etc/ssh/sshd_config ~/sshd_conf
#获取最新的openssh源码
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-6.1p1.tar.gz
#查询系统中ssh相关软件包,并卸载
rpm -qa |grep ssh
rpm -e openssh-4.3p2-82.el5 --nodeps
rpm -e openssh-server-4.3p2-82.el5
rpm -e openssh-clients-4.3p2-82.el5 --nodeps
#解压下载的压缩包,并安装
tar zxvf openssh-6.1p1.tar.gz
cd openssh-6.1p1
./configure --prefix=/usr/local/ssh --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/man
make
make install
#确认ssh安装成功
ssh -v
#重建ssh服务运行环境
cp ~/sshd_config /etc/ssh/sshd_config
cp /usr/local/ssh/bin/* /usr/bin/
cp /usr/local/ssh/sbin/* /usr/sbin/
cp ./contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig --level 2345 sshd on
#确认服务配置正常
chkconfig --list
#启动ssh服务
/etc/init.d/sshd start
全部完成后,建议重启系统。
2、创建sftp伪根目录,确保所有者为root
例如:
mkdir /home/sftp
chown root /home/sftp
3、在系统中添加用户,可以不建home,设置密码。为了方便管理可以添加一个sftp组,将sftp登录用户集中管理。
例如:
groupadd sftp
useradd -g sftp -M user1
4、在/home/sftp下创建用户目录,确保所有者为对应用户,并根据实际情况设置此目录权限。
例如:
mkdir /home/sftp/user1
chown user1:sftp /home/sftp/user1
chmod 700 /home/sftp/user1
5、编辑/etc/ssh/sshd_config,具体如下:
注释 Subsystem sftp /usr/lib/openssh/sftp-server
添加 Subsystem sftp internal-sftp
在配置文件末尾加入针对登录用户或sftp组的访问限制
例如:
#sftp组成员登录后,chroot到与用户名同名的sftp下属目录
Match group sftp
ChrootDirectory /home/sftp/%u
#user1登录后,chroot到/home/sftp/user1目录
Match user user1
ChrootDirectory /home/sftp/user1
6、采用ChrootDirectory设置需要注意
ChrootDirectory设置的目录及其所有的上级目录属主必须是root且只有属主能拥有写权限,也就是说权限最大设置只能是755。否则会报“fatal: bad ownership or modes for chroot directory”这样的错误。
用户目录下的链接文件失去作用。
五、SSH客户端保持连接的设置
方法1:服务端配置
编辑服务端/etc/ssh/sshd_config文件,添加如下配置命令:
ClientAliveInterval 60 #每60秒向客户端发送一次确认心跳包
ClientAliveCountMax 3 #当客户端失去响应超过3次,则踢出客户端
方法2:客户端配置(推荐)
编辑客户端/etc/ssh/ssh_config文件或~/.ssh/ssh_config文件,添加如下配置命令:
TCPKeepAlive yes #保持连接
ServerAliveInterval 60 #每60秒发送一次心跳包
方法3:命令行配置
针对某个特定连接,可以在ssh命令行中加入配置选项,以保持连接。
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60
注意:
如果更改了SSH服务端口后,无法登录系统报“no route to host”错。请检查iptables的过滤策略,允许基于新端口的访问。