• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在 centOS 上设置 SSH 用户配置(本地客户端)

    本机安装 SSH,与服务器端上安装方式是一样的,都是使用安装 OpenSSH 软件和其依赖软件包 OpenSSL。

    # 安装
    dnf -y install openssl openssh
    
    # 查看版本
    ssh -V
    


    从本机客户端 centOS 进行 ssh 连接,可以在连接的时候,直接附带上连接参数,也可以在本机客户端用户配置文件中设置。用户配置文件有两个:用户全局配置文件/etc/ssh/ssh_config,当前用户配置文件~/.ssh/config

    在 ssh 连接上配置参数:

    ssh -o ServerAliveInterval=60   admin@192.168.0.50
    


    持久连接

    实现客户端保持永久连接,需要分别配置服务端和客户端。服务端的配置是修改/etc/ssh/sshd_config文件,设置参数ClientAliveInterval 60ClientAliveCountMax 3,而客户端的实现,其实就是让客户端 ssh 定时发送信息,这样使得连接不会一段时间不操作后中断。


    设置用户全局配置文件/etc/ssh/ssh_config(注意:不是/etc/ssh/sshd_config文件):

    # 在客户端全局配置
    vim /etc/ssh/ssh_config
    
    Host *
        ServerAliveInterval 60
    


    认证方法顺序

    客户端发起 SSH 连接的时候,默认值认证方法顺序:publickey,gssapi-keyex,gssapi-with-mic,password

    1. 公钥认证(publickey)
    2. GSSAPI 认证(gssapi-keyex,gssapi-with-mic)
    3. 密码认证(password)

    SSH 认证过程会依次尝试,前面的认证失败了,才会采用后面的认证方式,这就浪费时间,也就造成 SSH 登录慢。关于 GSSAPI 相关的认证,消耗的时间比较多,具体可以查看 SSH 连接日志。所以修改为:先公钥认证,后密码认证。

    # 在客户端全局配置
    vim /etc/ssh/ssh_config
    
    Host *
        ServerAliveInterval 60
        PreferredAuthentications publickey,password,gssapi-keyex,gssapi-with-mic
    
    # /etc/ssh/ssh_config
    
    Host *                              # 选项 Host 只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
        Port 22                         # 设置连接到远程主机的端口。
        ForwardAgent no                 # 设置连接是否经过验证代理(如果存在)转发给远程计算机。
        ForwardX11 no                   # 设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
        RhostsAuthentication n          # 设置是否使用基于rhosts的安全验证。
        RhostsRSAAuthentication no      # 设置是否使用用RSA算法的基于rhosts的安全验证。
        RSAAuthentication yes           # 设置是否使用RSA算法进行安全验证。
        PasswordAuthentication yes      # 设置是否使用口令验证。
        FallBackToRsh no                # 设置如果用ssh连接出现错误是否自动使用rsh。
        UseRsh no                       # 设置是否在这台计算机上使用“rlogin/rsh”。
        BatchMode no                    # 如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
        CheckHostIP yes                 # 设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
        StrictHostKeyChecking no        # 如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。
        IdentityFile ~/.ssh/identity    # 设置从哪个文件读取用户的 RSA 安全验证标识。
        Cipher blowfish                 # 设置加密用的密码。
        EscapeChar ~                    # 设置escape字符。
    


    配置主机名

    本机客户端当前用户 ssh 配置,常用来配置 ssh连接的时候,主机名以及密钥位置。

    # 假设当前用户为 admin,若在其他用户下,需要切换过来,避免再修改文件所有者
    su admin
    
    # 在客户端用户配置
    vim ~/.ssh/config
    

    注意:~/.ssh目录文件,应该属于当前用户自己。若使用 root 用户,修改其下的文件,会被改变文件所有者以及所属组,需要修改文件所有者:

    chown -R admin:wheel ~/.ssh
    


    示例配置如下:

    Host example                       # 关键词
        HostName example.com           # 主机地址
        User root                      # 用户名
        # IdentityFile ~/.ssh/id_ecdsa       # 认证文件
        # Port 22                      # 指定端口
    

    当具备上面的配置后,通过执行ssh example,就可以登录我的服务器。而不需要敲更多的命令ssh root@example.com。又如想要向服务器传文件,可以执行命令:scp a.txt example:/home/user_name。更过相关帮助文档请参考:man ssh_config 5

    Host example.com
        HostName example.com
        Port 22
        User develop
        IdentityFile ~/.ssh/id_rsa
    
    Host example.com
        HostName 192.168.0.50
        Port 5678
        User root
        IdentityFile ~/.ssh/id_rsa
    
    Host sshtest
        HostName www.test.com
        User user
        Port 22
        IdentityFile ~/.ssh/id_rsa_test
    
    Host ssttest2
        HostName www.test2.com
        User user2
        Port 222
        IdentityFile ~/.ssh/id_rsa_test2
        IdentitiesOnly  yes
    
    • Host:服务器别名,只要是合法的变量名称且不重复即可,可任意指定,ssh 命令通过该名称来连接到指定服务器,比如上面的 example.com、sshtest。
    • Hostname:服务器地址,可以是域名,也可以是 ip 地址。
    • Port:端口号,默认为 22,只有修改了 ssh 连接的默认端口才需要配置此参数。
    • User:登陆远程客户端中的用户。
    • IdentityFile:ssh 私钥文件的路径(不带.pub 后缀的文件)。
    • IdentitiesOnly:只接受 SSH key 登录。

    SSH配置项参数值可以使用通配符:

    • *:代表 0~n 个非空白字符。Host *:匹配所有主机名。*.example.com:匹配以.example.com结尾域名。
    • ?:代表一个非空白字符。192.168.0.?:匹配 192.168.0.[0-9]的 IP。
    • !:代表排除的意思。!*.dialup.example.com,*.example.com:匹配以.example.com结尾域名。但要排除以.dialup.example.com结尾域名。