CentOS6下ssh简介及openssh的应用

1. ssh及openssl简介:

SSH:

ssh是secure shell,是用来通过网络来提供安全的远程访问的工具,C/S结构,在ssh之前,最早的远程计算机连接工具是telnet

telnet是使用明文通信的,所以安全性很差,除非紧急情况,否则不要使用telnet。

ssh则比telnet安全许多,而openssl则是ssh的一种开源实现,

OPENSSH

它可以作为 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。 更进一步, 其他任何 TCP/IP 连接都可以通过 SSH 安全地进行隧道/转发。 OpenSSH 对所有的传输进行加密, 从而有效地阻止了窃听、 连接劫持, 以及其他网络级的攻击。OpenSSH 由 OpenBSD project 维护。

登录过程和使用 rlogin 或 telnet 建立的会话非常类似。 在连接时, SSH 会利用一个密钥指纹系统来验证服务器的真实性。 只有在第一次连接时, 用户会被要求输入 yes。 之后的连接将会验证预先保存下来的密钥指纹。 如果保存的指纹与登录时接收到的不符, 则将会给出警告。 指纹保存在 ~/.ssh/known_hosts 中, 对于 SSH v2 指纹, 则是 ~/.ssh/known_hosts2。

默认情况下, 较新版本的 OpenSSH 只接受 SSH v2 连接。 如果能用版本 2 则客户程序会自动使用, 否则它会返回使用版本 1 的模式。 此外, 也可以通过命令行参数 -1 或 -2 来相应地强制使用版本 1 或 2。 保持客户端的版本 1 能力是为了考虑较早版本的兼容性。

SSH有两个版本:

1. sshv1

sshv1 基于CRC-32做MAC(完整性校验),无加密,只是校验码,强烈建议不使用。非常不安全

2. sshv2

sshv2 基于双方主机的协商选择使用最安全的MAC方式

加密机制及MAC机制由双方协商选定:

基于DH算法,实现密钥交换,基于RSA或DSA实现身份认证

客户端通过检查服务器端的主机密钥来判断是否能够继续通信

实际使用中,可以通过命令行参数Protocol 2,1 来相应地强制使用版本 1 或 2。

保持客户端的版本 1 能力是为了考虑较早版本的兼容性。

也可以只写2,而放弃兼容不安全的sshv1

2. OPENSSH客户端:

openssh是C/S架构,所以就有服务端和客户端两部分组成,linux下常用的客户端软件ssh, windows下常用的有putty,xshell,secrecrt,sshshellclient等

2.1 openssh的客户端组件:

2.1.1 ssh 配置文件是/etc/ssh/ssh_config

语法:

ssh [username]@host [COMMAND]  [-p PORT]
ssh -l username host [COMMAND]

#若没指定username,则使用本地当前用户尝试登陆,如果远程主机不存在此用户,会报错

#COMMAND,就是不远程登陆,只是在远程主机上执行COMMAND,然后将结果返回给本机。

例如:

需要获取192.168.229.202主机的ifconfig信息,ssh端口监听在2222端口上:

#ssh [email protected] ifconfig -p 7767

2.1.2 scp: 利用ssh协议在主机之间实现安全文件传输的工具

语法:

scp SRC1...DEST

分两种情况:

1. 原文件在本机,目标为远程

#scp /path/to/somefile [email protected]:/path/to/somewhere

是将本地/path/to/somefile文件,以USERNAME用户登陆到远程主机HOST上,复制到远程主机的/path/to/somewhere

例如:

将本地/etc/fstab文件复制到www.881027.com主机上/tmp下, 注意www.881027.com主机的ssh端口是2222

#scp -P 2222 /etc/fstab [email protected]:/tmp
#注意, 参数-P的位置一定要紧跟在scp命令后面,而且-P指定的是远程主机的ssh端口
#注意, 如果当前本机登陆的用户是root,则[email protected]中的[email protected]可以省略

2. 源文件在远程,本地为目标

#scp [email protected]:/path/to/somewhere /path/to/somewhere
-r: 复制目录时使用
-p: 保持源文件的元数据信息,包括属主,属组,mode,timestamp (如果远程主机不存在这个用户,也不行)
-q: 静默模式
-P PORT: 指定ssh协议监听的端口
例如:
将远程主机/tmp/fstab文件下载到本机/etc下
#scp -P 2222 [email protected] /etc

2.1.3 sftp: 基于ssh的ftp服务

sftp登陆进去,可以使用很多bash的命令,例如ls,cd, mkdir, put, get等ftp命令

用法: sftp [email protected]

例如:

sftp登陆到www.881027.com,ssh端口2222,并下载www.881027.com主机上/etc/fstab文件到本地

#sftp -oPort=2222 sbi.881027.com
#-oPort 来指定远程的端口,不指定默认22

3. openssh的服务器端: sshd

配置文件: /etc/ssh/sshd_config

ssh端口,控制sshd服务的各种运行参数等,下面最佳实践里有很多应用

这个命令可以通过

#man sshd_config

来查看每一个参数的详细说明和使用帮助

服务脚本: /etc/rc.d/init.d/sshd

控制sshd服务状态,启动,停止,重启,查看状态等

脚本配置文件: /etc/sysconfig/sshd

3.1 经常需要修改的参数:

PORT:修改默认监听的端口
ListenAddress 0.0.0.0 ;默认表示监听本地所有地址,也可以设定只监听特定ip地址
Protocol 2,1 ;优先选择2,向下兼容sshv1
HostKey /etc/ssh/ssh_host_rsa_key;当客户端连接时候,发送的密钥
HostKey /etc/ssh/ssh_host_dsa_key;当客户端连接时候,发送的密钥, DSA只能做身份验证
KeyRegenerationInterval 1h;密钥交换间隔,服务器自动进行的
LoginGraceTime 2m;登陆窗口宽限期, 就是弹出登陆窗口后,给你输入账号密码的时间
PermitRootLogin yes 
    yes:允许root用户首次直接ssh登录
    no: 不允许root用户首次直接ssh登陆,但是根据需要,可以从普通用户su - root
MaxAuthTries 6;最多登陆失败次数
MaxSessions 10;最多可支持的session数
RSAAuthentication yes ;是否启用RSA验证
PubkeyAuthentication yes ;是否启用公钥验证(非对称加密)
AuthorizedKeysFile .ssh/authorized_keys ;授权的密钥文件, 我们可以通过追加公钥信息到这个authorized_keys,来免密码登陆
ClientAliveInterval 0 ;服务器端向客户端请求消息的时间间隔,0 为不发送
ClientAliveCountMax 300 ;服务器发出请求后客户端没有响应的次数达到一定值
等等

我只列举一些常用的选项,还有很多选项没有一一列举,可以#man sshd_config去翻文档吧。

4. sshd认证方式:

1. 基于口令的认证:

没啥好说的, 用户名,密码认证

2. 基于密钥(公钥中的密钥)的认证:

逻辑:

a. 需要一对儿密钥,本地保留private key,

b. 将public key放到远程主机上的用户家目录: ~/.ssh/

c. 将本地public key追加到 远程主机家目录 ~/.ssh/authorized_users

步骤:

        #ssh-keygen -t rsa  生成密钥对
        默认密钥为id_rsa, id_rsa.pub
        -f path/to/somefile: 密钥文件保存位置
        -p ‘‘ 指定oldpasswd

也可以使用工具直接生成密钥对儿,直接上传到远程主机:

        #ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
        ssh-copy-id -i id_rsa.pub "-p 7767 [email protected]"
        ssh -p 222 hostname

5. ssh服务的最佳实践:

1. 不要使用默认端口22

2. 不要使用protocol 1

3. 限制可登陆的用户

白名单:

AllowUsers user1 user2 user3...

AllowGroups grp1 grp2 ....

黑名单:

DenyUsers user1 user2

DenyGroups grp1 grp2

#黑白名单不能同时使用,只能使用一种

4. 设定空闲会话超时时长

ClientAliveInterval 300  #秒数

ClientAliveCountMAX 0 #空闲计数最大值为0

5. 利用防火墙设置ssh访问策略:

6. 仅监听在特定的IP地址上,而非本机所有的IP地址

7. 使用强密码策略

#tr -dc A-Za-z0-9 < /dev/urandom | head -c 20 | xargs

8. 使用基于密钥的认证

9, 禁止使用空密码

10. 禁止管理员直接登录

11. 显示ssh的访问频度

iptables可以做到

12. 做好日志,经常分析

把服务器按照最佳实践来优化一番,在去对比下 lastb的ssh攻击,就会看到明显的效果。等以后学到iptables,在做更进一步的优化吧。

另外,提一个小软件 dropbear,是嵌入式轻量级的shh客户端工具,可以编译安装试试。比openssh小很多,但是功能却很完整的ssh开源工具。

时间: 2024-12-12 16:34:19

CentOS6下ssh简介及openssh的应用的相关文章

Ubuntu环境下SSH的安装及使用

Ubuntu环境下SSH的安装及使用 SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 .SSH的简介和工作机制可参看上篇文章SSH简介及工作机制. SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装ope

【转】Ubuntu环境下SSH的安装及使用

原文网址:http://blog.csdn.net/netwalk/article/details/12952051 SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 .SSH的简介和工作机制可参看上篇文章SSH简介及工作机制. SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get insta

Ubuntu下SSH设置

网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条: sudo apt-get install openssh-server (查看返回的结果,如果没有出错,则用putty.SecureCRT.SSH Secure Shell Client等SSH 客户端软

SSH 协议与OpenSSH详解

1. ssh概述 ssh是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议. 2. ssh 主要功能 一个就是类似 telnet 的远程联机使用 shell 的服务器,即 ssh 另一个就是类似 FTP 服务的 sftp-server ,提供更安全的 FTP 服务 3. ssh 工作原理 服务器建立公钥: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件,若系统刚

SSH学习之四 OpenSSH安全

OpenSSH是Linux/Unix下一款加密通讯软件,同时也是我们用来远程控制Linux/Unix服务器重要的必装软件.对于各版本的Linux及Unix发行版而言,OpenSSH的配置文件位置都各不一样.如Ubuntu下OpenSSH配置文件就在/etc/ssh/sshd_config. OpenSSH安全选项: Port 22 // OpenSSH打开的端口号 LoginGraceTime 120 // 客户端连接服务器成功后多少秒未登陆就被强制关闭连接 PermitRootLogin ye

VPS CentOS-6 下 LNMP HTTP服务器的搭建

VPS CentOS-6 下 LNMP HTTP服务器的搭建 前言 恢复更新后的第一篇博文, 前段时间由于各种理由, 把博客更新给宕掉了, 个人独立博客的开发也搁浅了, 现在随着工作的逐步稳定, 决心把博客重新恢复更新, 继续记录着代码路上的一点一滴. 在上篇博文中提到, 笔者将把工作和学习环境全面转移到Linux, 转移也没什么目的, Windows用久了, 换个口味.目前使用的Linux环境是 Ubuntu 14.04, 该版本是一个长期支持版本, 对于想试一试Linux系统的朋友, 也是值

virtualbox ubuntu下ssh连接

一.首先Ubuntu中安装ssh服务器 Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条: sudo apt-get install openssh-server 然后确认sshserver是否启动了:(或用“netstat -tlp”命令) ps -e | grep ssh 如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了. ssh-ser

linux下ssh客户端命令远程登入系统详解

1.远程登入系统有常用两个服务telnet和ssh,都属于C/S架构 telnet: 远程登录协议,端口为23/tcp 特点:明文传输,不加密 ssh: Secure SHell,端口为22/tcp有v1,v2两个版本 特点:主机加密认证 用户认证过程加密 数据传输过程加密 sshv1:由于受到中间人攻击等安全隐患,现在用的不多 sshv2:相对sshv1,很安全,其认证过程有两种:基于口令认证及基于密钥认证 2.Linux系统程序是openSSH 服务器端:sshd, 配置文件/etc/ssh

linux下ssh使用rsa验证登陆MACOX

由于项目的需求,我这边ubuntu下常常需要SSH访问另外一台MACOS. 每次输入密码有点烦,就想到RSA公钥和密钥验证的方法. 像所有教程上讲的一样,本机执行 [email protected]:~$ ssh-keygen -t rsa 将公钥拷贝到MACOS的/tmp下,并给其他人以读权限: [email protected]:~$ scp .ssh/id_rsa.pub [email protected]:/tmp [email protected]'s password: id_rsa