openssh的应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssh的应用相关的知识,希望对你有一定的参考价值。

OpenSSH:
在Linux系统上实现ssh协议的应用程序:实施远程登录服务器端;

登录:login,登入
计算机终端设备,通过输入用户账户标识和与之对应的口令的方式,倍计算及验证的过程就是登陆;

终端:Terminal,完整的称呼是“终端设备”,是计算机中的外围设备,主要用于用户信息的输入和计算机计算结果的输出;

终端的分类:
物理终端:计算机本身的控制台设备;通常将其标识为“pty”;在现在的计算机上,物理终端与早期的计算机上的物理终端的意义不一样了,在现在的Linux系统上,物理终端设备被映射到/dev/console上,所有内核输出的信息都输出到console终端,除此之外,其他用户进程输出的信息一般都输出到虚拟终端或伪终端上

虚拟终端:在现代的计算机中,通常将键盘+显示器组合称作“虚拟终端”或者“虚拟控制台”,即一个虚拟的终端设备;通常将其标识为“tty”

串行终端:如果服务器上没有装配显卡设备,就可以使用串行终端设备连接计算机;通常标示为“ttyS”

模拟终端:伪终端,通过网络客户端工具或图形终端下开启的命令行终端,都成为伪终端;通常标示为“pts”

远程登录:
Telnet:
Vlient:telnet
Server:telnet-server
Socket:23/TCP

安装telnet-server,telnet程序包,本地光盘yum仓库中;

CentOS 5.6
关闭防火墙和SELinux;
service iptables stop
setenforce 0

启动telnet服务
chkconfig telnet on
service xinetd restart|reload

检测服务是否启动:
ss -tnl | grep :23

CentOS 7:
关闭防火墙和SELinux
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables -F
setenforce 0

启动telnet服务:
 systemctl start telnet.socket

检测服务是否启动:
 ss -tnl | grep :23

 注意:telnet服务出于安全考虑,默认不允许root用户直接登录;但可以使用普通用户登录之后,利用su命令切换至root用户登录;

SSH:Secure SHell:
其目的旨在取代较早的非常不安全的telnet协议,实现安全的远程登录;
C/S结构:
Client:Xshell,ssh,scp,sftp,SecureCRT,sshsecureshellclient,putty(建议不要使用中文版的)
Server:OpenSSH(sshd),drophbear
Socket:22/TCP

SSH提供的认证方式:
基于口令的认证:
使用远程服务器上的有效用户账户和该用户的口令,进行身份验证;
需要在网络中传递被加密的用户名和口令信息;有被拦截和破解的风险;

基于密钥的认证:
用户在客户端提供一对密钥,私钥保存在客户端,公钥保存在远程服务器的某个用户的家目录下;
使用私钥加密一段数据,如果服务器可以使用对应的公钥进行加密,则说明认证成功,可以继续后续通信;
在整个过程中不涉及用户名和密码等敏感信息的传递;

SSH协议:
v1:不安全,禁用;一定不要用!!!!
v2:当前流行的安全应用协议

Openssh
Openssh应用程序的组成:
服务器端:
sshd
配置文件/etc/ssh/sshd_config

客户端:
应用程序:
ssh,scp,sftp
配置文件:
/etc/ssh/ssh_config

客户端程序:
ssh命令:
ssh - OpenSSH SSH client (remote login program)

 ssh [options...] [[email protected]]hostname [command]
  常用选项:
   -l login_name:制定此次使用哪个用户进行远程登录;如果使用了该选项,则hostname前面就不能再使用“[email protected]”’
     注意:如果既没有指定此选项,又没有在hostname前面指定“[email protected]”用户名前缀,SSH协议的客户端程序会默认使用客户端本地登录的用户账户作为此次远程登录的用户名;

   -p port:指明访问服务器的哪个具体的服务端口;省略该选项,默认是22;
   -b bind_address:指明此次访问服务器时的源IP地址;省略该选项,则从当前客户端所有有效的IP地址中,选择一个;
   -X:支持X11转发功能,当客户端使用SSH协议远程连接到服务器时,可以在客户端打开图形界面的配置窗口;
   -Y:支持受信任的X11转发;功能与-X相似;
   -o option=value:
    在实施远程连接时,引入特定的功能或以特定的方式对服务器进行访问;

    注意:-o选项所能够使用的配置内容非常复杂,通常会将常用的此类功能选项直接写到ssh客户端的配置文件中(/etc/ssh/ssh_config);
    格式为:
        HOST pattern
        OPTION1 value1
        OPTION2 value2
        ...

基于密钥的认证机制:
    1.创建密钥对儿:
        ssh-keygen命令:
            ssh-keygen — authentication key generation, management and conversion
            格式:
            ssh-keygen [-q] [-b bits] [-t type] [-P passphrase] [-f output_keyfile]
              常用选项:
                -q:安静模式;
                -b bits:指定创建的密钥的长度;
                    RSA:最少768bits,默认是2048bits;
                    DSA:显式给出1024bits;
                    ECDSA:256bits, 384bits, 521bits;
                    ED25519:只是使用固定长度的密钥而忽略-b选项指定内容;
                -t type:指明公钥加密算法的类型;
                    在SSHv2协议中可以使用上述四种算法;
                -P passphrase:指定加密私钥文件的口令;
                -f output_keyfile:生成的密钥文件保存的路径;

                示例:
                    ~]# ssh-keygen -t rsa -P ‘123456‘ -f .ssh/id_rsa

    2.将上一步骤中生成的公钥复制到目标服务器指定用户的家目录中:
        ssh-copy-id命令:

        示例:
            ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

    3.登录测试:
        在客户端执行下列命令:
            ~]# ssh -l USER hostname
            ~]# ssh [email protected]

    scp命令:基于ssh协议的cp命令;安全复制命令;
        scp - secure copy (remote file copy program)
            两种使用情形:
                推送:PUSH
                    scp [option...] /PATH/FROM/LOCAL_FILE [[email protected]]hostname:/PATH/TO/DESTINATION_REMOTE_FILE

                拉取:PULL
                    scp [option...] [[email protected]]hostname:/PATH/FROM/REMOTE_FILE /PATH/TO/LOCAL_FILE 

                    常用选项:
                        -r:递归复制,可以复制目录;
                        -p:保留源文件中的权限信息;
                        -q:安静模式;
                        -P port:指定远程主机的sshd进程监听的服务端口;

    sftp:
        FTP over ssh
        FTP over ssl(ftps)

        C/S架构:
            S:sftp-server, 由sshd进程管理的一个子服务项目,是sshd的一个子系统;在CentOS中默认是开启的;
            C:sftp命令

        sftp [[email protected]]HOSTNAME

        sftp> help
        sftp> get
        sftp> put
        ...

sshd程序:
    配置文件:/etc/ssh/sshd_config
        配置指令的格式:
            指令 值

        常用的指令:
            Port 22:指明sshd服务进程要监听的端口号;建议改为非22号端口;
            ListenAddress 0.0.0.0:指明sshd服务进程监听的IP地址,建议某个固定的IP地址;0.0.0.0表示当前主机上所有的可用IP地址;
            Protocol 2:ssh协议的版本;
            LoginGraceTime 2m:登录时,输入密码操作的最大时长;
            PermitRootLogin yes:是否运行root用户直接进行远程登录;在生产环境中,强烈建议禁用此功能;
            PasswordAuthentication yes:是否开启口令认证机制;
            UseDNS no:是否允许使用DNS反向解析主机名;建议关闭此功能;
            AllowUsers user1 user2 ...:设置登录用户的白名单;
            AllowGroups group1 group2 ...:设置组的白名单;
            DenyUsers user1 user2 ...:设置登录用户的黑名单;
            DenyGroups group1 group2 ...:设置组的黑名单;

        如果对此配置文件中的指令进行了修改,那必须要让sshd进程重新读取配置文件的内容才能使新配置生效;
            CentOS 5、6:
                ~]# service sshd reload
            CentOS 7:
                ~]# systemctl reload sshd

ssh服务的最佳实践方案:
1.更换服务端口,不要使用默认的22号端口;
2.禁止使用sshv1;
3.合理的设置登录用户的黑名单和白名单;
4.设置空闲会话的超时时间,将其改的短一些;
5.需要利用防火墙来配合设置ssh的安全访问规则;
6.监听固定的IP地址而不是0.0.0.0;
7.如果必须使用口令认证机制,则需要使用足够复杂的密码;
~]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
~]# openssl rand -base64 30 | head -c 30 | xargs
8.建议最好使用基于密钥的认证机制;
9.禁止用户使用空密码登录;
10.禁止root用户直接进行远程登录;
11.限制ssh的密码失败频度和并发数;
12.做好日志记录,并经常分析日志内容;

dropbear:
ssh协议的另一种实现
轻量级的实现方案,多用于嵌入式环境;

dropbear的rpm包,在EPEL源中;
    mirrors.sohu.com/fedora-epel/$releasever/$basearch
    mirrors.aliyun.com
    mirrors.163.com
    mirrors.tsinghua.edu.cn

可以使用dropbear源代码包进行编译安装;
源代码包可以在https://matt.ucc.asn.au/dropbear/dropbear.html下载;

编译环境:
    yum groupinstall "Development tools" "Server Platform Development"
    yum install zlib-devel(可选)

如果选择了编译源代码的方式进行安装:
    1.解压之后的目录中,有一个INSTALL的文件,查看该文件以获得安装方法
    2.~]# ./configure
    3.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert"
    4.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert" install

启动dropbear:
    dropbear -h
    dropbearkey -h
    获取相应的帮助信息;

    1.创建保存密钥文件的目录:
        ~]# mkdir /etc/dropbear
    2.创建对应密钥:
        ~]# dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key
        ~]# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
        ~]# dropbearkey -t ecdsa -s 521 -f /etc/dropbear/dropbear_ecdsa_host_key
    3.启动dropbear服务,并使其运行于前台;
        ~]# dropbear -p IP:PORT -F -E

        选项含义:
            -p IP:PORT:指定此次启动的dropbear服务进程监听的套接字;
            -F:将dropbear服务进程运行于前台;
            -E:将dropbear服务进程运行期间产生的信息从标准错误输出而不是写入到系统日志文件(syslog, /var/log/messages);
            -w:禁止root用户直接登录到dropbear服务器;

客户端访问:
    ~]# ssh -p PORT [email protected]
    ~]# dbclient -p PORT [email protected]

以上是关于openssh的应用的主要内容,如果未能解决你的问题,请参考以下文章

+++++++++OpenSSH应用

jQuery应用 代码片段

OpenSSH服务及其相关应用

openssh服务器端和客户端的配置及应用

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

Openssh到IOS邮件