一、基于密钥认证的服务端基本安全设置: 1、修改/etc/ssh/sshd_config,具体如下: Protocol 2 #只支持SSH2协议 Port <端口号> #修改默认端口号 MaxStartups 5 #同时允许5个尚未登录的SSH联机 MaxAuthTries 3 #最大登录尝试次数为3 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:来限制或允许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拷贝到客户端/.ssh/目录(你也可以CP到任何其他什么地方)中,重新命名,并设置权限chmod 600 /.ssh/。 通过命令ssh -i ~/.ssh/ @登录远程机。 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。 用户目录下的链接文件失去作用。 注意: 如果更改了SSH服务端口后,无法登录系统报“no route to host”错。请检查iptables的过滤策略,允许基于新端口的访问。
